Доброго времени суток. Возникла следующая проблема: попытка использовать phoenix-овскую обёртку над std::get в semantic action приводит к ошибке
Цитата | error: no matching function for call to 'boost::phoenix::function<phoenix_get_impl>::operator()(const boost::phoenix::actor<boost::spirit::argument<0> >&) const'
|
Вот код, который я наваял
Код | struct phoenix_get_impl { template <std::size_t I,typename... Args> struct result { typedef typename std::tuple_element<I,std::tuple<Args...>>::type type; }; template <std::size_t I,typename... Args> typename result<I,Args...>::type& operator () (std::tuple<Args...>& t) { return std::get<I> (t); } }; ph::function<phoenix_get_impl> const phoenix_get = phoenix_get_impl();
|
Вот его применение
Код | ... [std::cerr << phoenix_get.operator () <0> (qi::_1)];// qi::_1 => std::tuple<int,int,float>
|
Как заставить этот код работать? |