
On Wed, Mar 2, 2011 at 3:03 PM, Alexander Ospin
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; } };
Hi,
phoenix::call does not work with terminals (which have an arity of 0).
The reason for this is because I didn't want to dictate what should be
passed to the eval function, the possibilities are: the value of the
terminal, or the proto::terminal type itself, the reason i couldn't
decide is because phoenix::call passes along proto expressions to the
to be called function object, and not the result of the evaluation.
You're code will work by doing the following:
template <>
struct actions::whenphoenix::rule::terminal :
proto::call