灵气:用期望运算符替换序列时出错
Spirit Qi: Error when replacing sequence with expectation operator
我有一个语法,运行良好,包含以下行。
element = container | list | pair;
container = name >> '(' >> -(arg % ',') >> ')' >> '{' >> +element > '}';
// trying to put an expectation operator here --------^
list = name >> '(' > (value % ',') > ')' > ';';
pair = name >> ':' > value > ';';
为了获得有意义的错误消息,我想确保container
不会在遇到'{'
后立即回溯。但是由于某种原因,如果我在'{'
之后立即将序列运算符替换为期望运算符,则会出现巨大的编译器错误。知道问题可能是什么吗?
element
是boost::variant
; container
、list
和pair
是应用了BOOST_FUSION_ADAPT_STRUCT
的自己的结构体。请在此处查看完整的源代码:https://github.com/fklemme/liberty_tool/blob/master/src/liberty_grammar.hpp#L24
是的。由于 operator>>
和 operator>
的优先级不相等,因此生成的合成属性类型不同。
事实上,它不再自动与预期的公开属性类型兼容。
在这种情况下,可以通过在子表达式周围添加一些消除歧义的括号来快速消除问题:
container = name >> '(' >> -(arg % ',') >> ')' >> ('{' > +element > '}');
相关文章:
- 模板参数替换失败,并且未完成隐式转换
- 访问者访问变体并返回不同类型时出错
- 在Linux for Windows上编译C++代码时出错
- 读取文件的最后一行并输入到链接列表时出错
- 重载操作程序时出错>>用于类中的字符串 memebr
- 调用专用模板时出错"no matching function for call to [...]"
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错
- 如何用转义符替换字符串中的所有特殊字符
- LINK 尝试使用 OpenSSL evp aes 256 c++ 时出错
- 在Google Kick start中提交时出错
- 在c++中访问int到类对象的映射时出错
- 分段错误当我试图运行程序时出错
- 使用dynamic_cast和构造函数时出错
- CHECK(调用)函数在Google Colab中出错
- 用pybind11包装C++抽象类时出错
- 为x86而非x64编译时出错
- 灵气:用期望运算符替换序列时出错
- 在C++中继承类时出错:模板参数推导/替换失败
- C++:替换字符时出错
- 这个宏多次替换应该会出错吗