c++ - 为什么这里需要 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 - 使用 union 进行转换的可移植性
- javascript - 如何在 JavaScript 中的字符串验证中只允许数字和 *[star]?
- sql - Oracle SQL 将多列合并为日期时间戳
- python - 如何减少 Python 脚本的执行时间
- google-chrome - 如何在 chrome 设置中获取选定的相机?
- vue.js - 笑话:在测试用例中动态地期望
- python-3.x - CUDA驱动版本高于CUDA运行时版本?
- excel - 在 VBA 中,如何编写脚本以将按钮从一个工作表复制到另一个笔记本中的工作表(不记录宏并使用 .select)
- python - Python:无法打印正确的条件
- vue.js - 我们提交表单时如何清除所有本地存储输入字段