我正在尝试关闭包含替代运算符 ('|') 的规则的定界,但我收到有关不兼容定界符的编译错误。举个例子,我取了 boost 中的 calc2_ast_dump.cpp 例子,并将 struct dump_ast 中的 ast_node 规则修改为:
ast_node %= no_delimit[int_ | binary_node | unary_node];
但这会产生编译错误:
/usr/include/boost/function/function_template.hpp:754:17: note: candidate function not viable: no known conversion
from 'const
boost::spirit::karma::detail::unused_delimiter<boost::spirit::karma::any_space<boost::spirit::char_encoding::ascii>
>' to 'const boost::spirit::karma::any_space<boost::spirit::char_encoding::ascii>' for 3rd argument
result_type operator()(BOOST_FUNCTION_PARMS) const
以及 boost/spirit/home/karma/nonterminal/rule.hpp 中的相关评论:
// If you are seeing a compilation error here stating that the
// third parameter can't be converted to a karma::reference
// then you are probably trying to use a rule or a grammar with
// an incompatible delimiter type.
在我自己的项目中,我可以毫无问题地执行“no_delimit[a << b]”(使用 karma::space 分隔符)。
我对替代品有什么遗漏吗?为什么 no_delimit 可以使用 '<<' 而不是 '|'?
我使用的是 boost 1.48,所以我需要修复错误吗?