
I would like to use mpl::lambda in nest. In this case works fine. --------- typedef boost::mpl::lambda<boost::mpl::max<boost::mpl::_1,boost::mpl::_2>
BOOST_MPL_ASSERT(( boost::is_same< r2, boost::mpl::integral_c<int, 7> > )); --------- However --------- typedef boost::mpl::lambda< boost::mpl::fold< boost::mpl::_1 ,boost::mpl::front<boost::mpl::_1> ,my_max >::type >::type my_max_types; typedef my_max_types::apply<boost::mpl::vector_c<int,1,7,0,-2,5,-1>
::type r3;
BOOST_MPL_ASSERT(( boost::is_same< r3, boost::mpl::integral_c<int, 7> > )); ///error => becomes boost::mpl::integral_c<int, 1> --------- How to define such nest lambda in mpl?

On Sat, Feb 23, 2013 at 2:32 AM, Niitsuma Hirotaka < hirotaka.niitsuma@gmail.com> wrote:
Uh, I see a red flag in that you don't grab the nested type typedef from your mpl::lambda invocations, i.e., I think you should have typedef mpl::lambda< mpl::max< mpl::_1, mpl::_2 > >::type my_max; Incidentally, you could also do typedef mpl::quote2< mpl::max > my_max (Well, assuming mpl::max doesn't have some hidden default parameters...) Without grabbing the type typedef in your mpl::lambda invocation, your use of mpl::_1 and mpl::_2 are "exposed" to premature substitution. - Jeff

Thank you advice. I add ::type before my_max; But result is same. 2013/2/24 Jeffrey Lee Hellrung, Jr. <jeffrey.hellrung@gmail.com>:

On Sat, Feb 23, 2013 at 3:56 PM, Jeffrey Lee Hellrung, Jr. < jeffrey.hellrung@gmail.com> wrote:
Also: remove the ::type from the fold<> expression. Works for me after that (and the fix with adding the ::type on the definition of my_max). I would think you would've gotten a compiler error at this point but, meh. typedef my_max_types::apply<boost::mpl::vector_c<int,1,7,0,-2,5,-1>

On Sat, Feb 23, 2013 at 9:38 PM, Niitsuma Hirotaka < hirotaka.niitsuma@gmail.com> wrote:
Sorry, I think I inadvertently fixed a 3rd error in your original post (accessing ::type on the mpl::max invocation) when I copied your code. The following works for me on MSVC9: -------- #include <boost/mpl/assert.hpp> #include <boost/mpl/fold.hpp> #include <boost/mpl/front.hpp> #include <boost/mpl/integral_c.hpp> #include <boost/mpl/lambda.hpp> #include <boost/mpl/max.hpp> #include <boost/mpl/placeholders.hpp> #include <boost/mpl/vector_c.hpp> #include <boost/type_traits/is_same.hpp> namespace mpl = boost::mpl; typedef mpl::lambda< mpl::max< mpl::_1, mpl::_2 > >::type my_max; typedef mpl::fold< mpl::vector_c<int,1,7,0,-2,5,-1> , mpl::int_<6> , my_max
::type r2; BOOST_MPL_ASSERT(( boost::is_same< r2, mpl::integral_c<int, 7> > ));
typedef mpl::lambda< mpl::fold< mpl::_1 , mpl::front< mpl::_1 > , my_max
::type my_max_types;
typedef my_max_types::apply< mpl::vector_c<int,1,7,0,-2,5,-1> >::type r3; BOOST_MPL_ASSERT(( boost::is_same< r3, mpl::integral_c<int, 7> > )); -------- If you can't figure out the reasons your original posting didn't work and you want to know, holler back. - Jeff
participants (2)
-
Jeffrey Lee Hellrung, Jr.
-
Niitsuma Hirotaka