Boost logo

Boost :

From: Marco Costalba (mcostalba_at_[hidden])
Date: 2008-06-03 15:27:29

On Tue, Jun 3, 2008 at 5:19 PM, Daniel Walker <daniel.j.walker_at_[hidden]> wrote:
> The reason result_of couldn't deduce argument dependent return types
> for nullary invocations in C++98 is that according to the heuristic
> only the result_type member is checked for nullary calls, and for
> non-nullary calls if the result_type is present, result<> is never
> checked. So, you can't have both.

Thanks Daniel and Tobias for you explanation. Now this point it's clear to me.

Here it is another undocumented behaviour of boost::fusion.

Did you know that dereferencing a fusion iterator to a mpl sequence
causes a duplication of the pointed object?

Following the test code:

static int cnt = 0;

struct Test
     Test() { cnt++; }

using namespace boost::fusion;

int main(int, char**)
    typedef boost::mpl::vector<Test,Test> Mpl_vec;

    Mpl_vec mpl_vec;

    result_of::begin<Mpl_vec>::type iter = begin(mpl_vec);

    cout << cnt << endl; // prints 0


    cout << cnt << endl; // prints 1


    cout << cnt << endl; // prints 2

    return 0;

I found this while traversing a sequence with fusion::for_each because
code started to create a lot of copies of the sequence elements,
indeed the whole sequence is duplicated each time it's traversed with
fusion::for_each !!

Is this foreseen or it's a bug.


BTW dereferencing an iterator to a fusion sequence does not show this
behaviour and does not copy anything.

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