
So you can say "fun + fun" and build a new node representing an addition. Or you can say "fun(fun)" to build a new node representing a function call. You could even say "(fun + fun)(fun, fun fun)". But that would be too much fun.
Is the following statement correct: expr< tag::terminal, args0< placeholder_t >, 0 >::operator()(...args...) returns an expression representation that during evaluation via proto::eval() first evaluates its arguments and then delegates the result to to placeholder_t::operator()( ... args... ). In contrast to this all other operators (+, -, *, / etc.) return an expression representation that during evaluation via proto::eval(expr, context) first evaluates its arguments and then delegates the result to context::operator()(proto::tag::xxx, ...args...) If the above is correct: can I write my_context::operator()(proto::tag::fucntion, ...args...) to catch it first and hinder delegation to placeholder_t::operator()(...args...)? (Sorry if this is answered later in the docs, I am not through yet) Markus