
AMDG Mathias Gaunard <mathias.gaunard <at> etu.u-bordeaux1.fr> writes:
I don't know how boost.lambda actually does it, but on my x86 box, sizeof(_1 + a + b) yields 12, which means there is an overhead of one word for some reason.
_1 takes up space because lambda doesn't try to use EBO.
We are rather sure to have it well optimized if we do this though:
<snip>
It would be nice if we had a lambda engine that could automatically do such magic. This would probably require the use of macros though.
What you want is: template<class F> struct function_reference { function_reference(F& func) : f(boost::addressof(func)) {} template<class T...> decltype(make<F&>()(make<T>()...)) operator()(T&&... t) { return((*f)(t...)); } F* f; }; template<class F> function_reference<F> func_ref(F& f) { return(function_reference<F>(f)); } BOOST_AUTO(lambda, _1 + a + b); BOOST_AUTO(f, func_ref(lambda)); In Christ, Steven Watanabe