Is it possible to evaluate terminal and custom_terminal expressions in the some
custom actions class? For instance how to implement "terminal_eval" to print
something in the following code?
#include
#include <iostream>
using namespace boost;
struct actions
{
template struct when;
};
template <>
struct actions::whenphoenix::rule::terminal :
phoenix::call {};
int main()
{
int var = 11;
phoenix::eval(phoenix::val(var), phoenix::context(int(), actions()));
return 0;
}
I've tried to use the following form, but encountered some compiler errors:
(GCC-4.2.1[FreeBSD], boost and phoenix were taken from SVN, latest versions)
struct terminal_eval
{
typedef void result_type;
template
result_type operator ()(Context const &ctx, Expr const &expr)
{
std::cout << "terminal" << std::endl;
}
};
../../../../boost.phoenix/boost/phoenix/core/call.hpp:32: error: invalid use of
incomplete type 'struct boost::phoenix::detail::call_impl >&, const int&, const actions&, 0l>'
../../../../boost.phoenix/boost/phoenix/core/call.hpp:22: error: declaration of
'struct boost::phoenix::detail::call_impl >&, const int&, const actions&, 0l>'
../../../../boost/boost/proto/transform/call.hpp:315: error: no type named
'result_type' in 'struct
boost::proto::switch_boost::phoenix::meta_grammar::impl >&, const int&, const actions&>'
../../../../boost/boost/proto/transform/call.hpp:320: error: no type named
'result_type' in 'struct
boost::proto::switch_boost::phoenix::meta_grammar::impl >&, const int&, const actions&>'
The same situation with the phoenix::ref and custom_terminal rule.