Boost logo

Boost :

From: Steven Watanabe (steven_at_[hidden])
Date: 2007-08-22 15:20:08


Mathias Gaunard <mathias.gaunard <at>> 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) {
    F* f;

template<class F>
function_reference<F> func_ref(F& f) {

BOOST_AUTO(lambda, _1 + a + b);
BOOST_AUTO(f, func_ref(lambda));

In Christ,
Steven Watanabe

Boost list run by bdawes at, gregod at, cpdaniel at, john at