首页 > 解决方案 > 为什么这里需要 x3::raw ?

问题描述

下面的代码会产生一个大的编译器错误static assertion failed: Size of the passed attribute is less than expected.

constexpr x3::rule<struct Variable, ast::Variable> variable = "Variable";
const auto variable_def = +x3::alpha >> +x3::alnum;
BOOST_SPIRIT_DEFINE(variable);

其中ast::Variable定义为struct Variable { std::string name_; }

但是,当被它包围x3::raw[]时编译得很好:

const auto variable_def = x3::raw[+x3::alpha >> +x3::alnum];

我希望根据复合属性规则+x3::alpha >> +x3::alnum折叠成一个单一的:std::string

a: vector<A>, b: vector<A> --> (a >> b): vector<A>

特别是因为const auto variable_def = +x3::alpha;也编译成功。

为什么是x3::raw[]必要的+x3::alpha >> +x3::alnum

标签: c++boostc++17boost-spirit-x3

解决方案


推荐阅读