Mã này không biên dịch (gcc 5.3.1 + tăng 1.60):Thần X3, hành động ngữ nghĩa làm cho biên soạn không thành công với: Thuộc tính không có kích thước dự kiến
#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());
}
Nó không thành công với một sự khẳng định tĩnh:
error: static assertion failed: Attribute does not have the expected size.
Nhờ Wandbox, tôi cũng cố gắng tăng 1,61 và kêu vang, cả hai đều cho ra kết quả tương tự.
Nếu tôi xóa hành động ngữ nghĩa được đính kèm với portal
, nó sẽ biên dịch tốt; điều tương tự cũng xảy ra nếu tôi thay đổi dest
thành:
auto dest = x3::lit('[') >> x3::int_ >> ']';
Mọi trợ giúp sẽ được đánh giá cao. TIA.
Trình sao chép này rất tuyệt vời. Tôi thích khi mọi người thu hẹp vấn đề về bản chất. +10 nếu tôi có thể – sehe