Ce code ne compile (gcc 5.3.1 SURCPL 1,60):Esprit X3, l'action sémantique fait compilation échoue avec: attribut n'a pas la taille attendue
#include <boost/spirit/home/x3.hpp>
namespace x3 = boost::spirit::x3;
template <typename T>
void parse(T begin, T end) {
auto dest = x3::lit('[') >> x3::int_ >> ';' >> x3::int_ >> ']';
auto on_portal = [&](auto& ctx) {};
auto portal = (x3::char_('P') >> -dest)[on_portal];
auto tiles = +portal;
x3::phrase_parse(begin, end, tiles, x3::eol);
}
int main() {
std::string x;
parse(x.begin(), x.end());
}
Il échoue avec une assertion statique:
error: static assertion failed: Attribute does not have the expected size.
Grâce à wandbox j'ai également essayé 1.61 boost et clang, les deux produisent les mêmes résultats.
Si je supprime l'action sémantique attachée à portal
, il compile bien; la même chose se produit si je change dest
à:
auto dest = x3::lit('[') >> x3::int_ >> ']';
Toute aide serait appréciée. TIA.
Ce reproducteur est excellent. J'aime quand les gens réduisent le problème à l'essentiel. +10 si je pouvais – sehe