
On 08/24/2011 07:09 PM, Thomas Heller wrote:
Of course, in order to transform such a call node though, you need to implement the specific behaviour in the operator() overloads of phoenix::actor. I can see this happening though ... could be almost trivial ... we could add a post processing actions step to the evaluation which returns false_ if the expression shouldnt be evaluated just yet, or true_ otherwise. A function_eval node (which is, in a way equivalent to your imaginary call node) can then select the proper action based on which types it holds. For that we can reuse the logic Eric proposed.
Ok, it seems phoenix::function doesn't work like I thought. Why doesn't it just do a proto::make_expr(proto::tag::function, f, a0, a1..., aN)? I don't really understand how Phoenix works. For some reason I thought the node type for function application in Proto was called 'call', looks like it's actually 'function', sorry.