|
Boost : |
From: dan marsden (danmarsden_at_[hidden])
Date: 2005-11-25 15:26:57
--- Brian Braatz <brianb_at_[hidden]> wrote:
> /// Testing remove
>
> {
> typedef vector<Y, char, long, X, bool,
> double> mpl_vec;
> BOOST_TEST((fusion::remove(mpl_vec(),
> identity<X>())
> == tuple<Y, char, long, bool,
> double>()));
> BOOST_TEST((fusion::remove(mpl_vec(),
> identity<Y>())
> == tuple<char, long, X, bool,
> double>()));
> BOOST_TEST((fusion::remove(mpl_vec(),
> identity<long>())
> == tuple<Y, char, X, bool, double>()));
> }
>
>
> My question is how does the above WORK?
> What caught my attention is the char,long,bool, and
> double have undefined
> values in them.
The mpl::vector doesn't have any values in it, never
mind undefined ones. (See later)
> Is it that when performing a ==, if one is comparing
> a mpl sequence the
> equality is based solely on TYPE? (is that what is
> going on?)
No thats not correct. Fusion can iterate over an MPL
sequence, even though that sequence does not have
values in it. To do this when a fusion iterator over
an MPL is dereferenced, it returns a default
constructed value of the current element type.
So for example mpl::vector<int,char> can be thought of
as a sequence containing elements int() and char().
So operator == checks the sequences are the same size,
then creates fusion iterators to iterate over the
sequence, and compares all the (default constructed)
values.
Hope that helps.
Cheers
Dan
___________________________________________________________
To help you stay safe and secure online, we've developed the all new Yahoo! Security Centre. http://uk.security.yahoo.com
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk