Hello, here my compile problem using phoenix (for use with spirit): ---8<--- template<typename ActionsT> struct tag_keyword_action { template <typename ScanT, typename Iter1T, typename Iter2T> struct result { typedef void type; }; explicit tag_keyword_action( const ActionsT& action ) : action( action ) { } template <typename ScanT, typename Iter1T, typename Iter2T> void operator()( const ScanT& scan, const Iter1T& bgn, const Iter2T& end ) const { action.on_tag( // the real action / assign class std::string( bgn, end ), scan.first.get_position().line ); } const ActionsT& action; }; template<typename ActionsT> struct ver_parser { typedef ::phoenix::function< tag_keyword_action<ActionsT> > keyword_tag_type; explicit ver_parser( const ActionsT& action ) : tag_keyword( action ) { } template <typename ScannerT> std::ptrdiff_t operator()(const ScannerT& scan, result_t& result) const { ... rule_t rule = lexeme_d[ ... ][tag_keyword( var( scan ), arg1, arg2 )] ... } const keyword_tag_type tag_keyword; }; template <typename ActionsT = parse_actions, typename ErrorHandlerT = parse_error_handler> struct grammar : sp::grammar< grammar<ActionsT, ErrorHandlerT> > { explicit grammar(const ActionsT& actions = ActionsT(), const ErrorHandlerT& handler = ErrorHandlerT()) : actions( actions ), error_handler( handler ) { } template <typename ScannerT> struct definition { ... explicit definition( const grammar& self ) : ver_p( self.actions ) { ... } ... const sp::functor_parser< ver_parser<ActionsT> > ver_p; }; ... }; --->8--- The (beautified) error message is: error: no matching function for call to 'boost::spirit::functor_parser<ver_parser<parse_actions>
::functor_parser(const parse_actions&)'
candidates are: boost::spirit::functor_parser<FunctorT>::functor_parser(const FunctorT&) [with FunctorT = ver_parser<parse_actions>] boost::spirit::functor_parser<FunctorT>::functor_parser() [with FunctorT = ver_parser<parse_actions>] boost::spirit::functor_parser<ver_parser<parse_actions>
::functor_parser(const boost::spirit::functor_parser<ver_parser<parse_actions> >&)
What is the correct syntax, is this way a good choice? I want to tag the keyword in the given data files with their lines to display them in a browser later. Thanks, Olaf