
Eric Niebler wrote:
What I'm saying is that, in C++03, polymorphic function objects are broken, so we need the runtime equivalent of a metafunction class ... a generator for monomorphic function objects. Call it a function class:
struct fun_class { template<typename A> struct apply { typedef ... result_type; result_type operator()( typedef add_const_ref<A>::type a ) const { return ...; } }; };
Now both the return type calculation *and* the operator() have access to *all* the information about the arguments, even their lvalue/rvalue-ness.
After all, if you need "overload on rvalueness" in C++03, some workaround is needed. BTW, this doesn't need a new concept: foo(i, boost::rval(3)); I don't like it of course, though. :-) Regards, -- Shunsuke Sogame