
Eric Niebler wrote:
return make_plus()( _()(e), _()(e) );
So now how are _ and make_plus defined?
_ is simple -- it is essentially identity which I showed earlier.
make_plus is trickier. It must be optimal and safe. When passed lvalues, it should return a new node that holds the children by reference. When passed rvalues, it should return a new node that hold the children by value.
I think that, in general, it depends on context whether or not `return f(a);` is "safe". It doesn't depend on whether `a` is an lvalue or rvalue. e.g. BOOST_FOREACH (char ch, to_const_reference(std::string("abc")) { } After all, that's the C++ language, isn't it? :-) BTW, I think `result_of<F(int)>::type` is always the same as `result_of<F(int const &)>::type` in C++03. Regards, -- Shunsuke Sogame