
Boost Users : 
From: Aleksey Gurtovoy (agurtovoy_at_[hidden])
Date: 20060301 10:56:07
Lucio Flores writes:
> So as an exercise, I'm trying to use a lambda expression that
> applies the first argument twice on it's second argument.
>
> typedef mpl::apply<_1, mpl::apply<_1, _2>::type>::type twice_type;
I'm afraid this doesn't do what you think. Following a metafunction
with '::type' means invoking it, so the above is basically equivalent
to
typedef mpl::apply<_1, _2>::type t;
// == _1::apply<_2>::type == _2
typedef mpl::apply<_1,t>::type twice_type;
// == _1::apply<t>::type == _1::apply<_2>::type
// == _2
>
> Then I instance this lambda function on boost::add_pointer and int
>
> typedef mpl::apply<twice_type, boost::add_pointer<_1>, int>::type result_type;
.. and, in its turn, this is equivalent to
typedef mpl::apply<_2, boost::add_pointer<_1>, int>::type result_type;
which gives you the result you refer to below.
>
> But using boost::is_same, I've found that result_type==int, not
> int** as expected. Can someone see why?
HTH,
 Aleksey Gurtovoy MetaCommunications Engineering
Boostusers list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net