这段代码来自boost spirit libs的例子,没关系:
on_error<fail>(expr,error_handler_function(eh)("expecting ", _4, _3));
但是,此代码无法在Xcode中编译:
on_error<fail>(expr,error_handler_function(eh)("expecting ", _4, _3, _1));
错误消息:
/usr/local/include/boost/spirit/home/phoenix/core/detail/function_eval.hpp:115:30:
error: too many template arguments for class template 'result'
fn::template result<BOOST_PP_ENUM_PARAMS(N, a)>
^~~~~~~~~~~~~~~~~~~~~~~~~~~~
eh(error_handle)
是对的,我添加了_1
的参数。
答案 0 :(得分:2)
您添加了参数,但未能添加模板参数。
它需要是一个模板参数,因为Phoenix期望完全多态的仿函数。
可能(取决于编译器和库版本),您可以使用
删除一些限制#define BOOST_SPIRIT_USE_PHOENIX_V3
// and/or
#define BOOST_RESULT_OF_USE_DECLTYPE