Questo codice non compilazione (gcc 5.3.1 + amplificare 1,60):Spirito X3, azione semantica rende la compilazione non riesce con: attributo non ha la dimensione prevista
#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());
}
Non riesce con un'affermazione statica:
error: static assertion failed: Attribute does not have the expected size.
Grazie a wandbox ho anche provato ad aumentare 1.61 e clang, entrambi producono gli stessi risultati.
Se rimuovo l'azione semantica allegata a portal
, compila bene; lo stesso accade se cambio dest
a:
auto dest = x3::lit('[') >> x3::int_ >> ']';
Qualsiasi aiuto sarebbe apprezzato. TIA.
Questo riproduttore è eccellente. Amo quando le persone restringono il problema all'essenza. +10 se potessi – sehe