From 5a060a51ce5542623241b6629ffdde29f7cd1189 Mon Sep 17 00:00:00 2001 From: Aleksey Gurtovoy Date: Mon, 4 Aug 2003 02:03:46 +0000 Subject: [PATCH] add support for tagged lambda invocations [SVN r19417] --- include/boost/mpl/aux_/full_lambda.hpp | 79 ++++--- include/boost/mpl/aux_/lambda_no_ctps.hpp | 59 +++--- .../mpl/aux_/preprocessed/bcc/full_lambda.hpp | 182 ++++++++++------ .../aux_/preprocessed/bcc/lambda_no_ctps.hpp | 106 +++++++--- .../boost/mpl/aux_/preprocessed/bcc/quote.hpp | 2 +- .../aux_/preprocessed/bcc551/full_lambda.hpp | 182 ++++++++++------ .../preprocessed/bcc551/lambda_no_ctps.hpp | 106 +++++++--- .../mpl/aux_/preprocessed/bcc551/quote.hpp | 2 +- .../mpl/aux_/preprocessed/gcc/full_lambda.hpp | 182 ++++++++++------ .../aux_/preprocessed/gcc/lambda_no_ctps.hpp | 106 +++++++--- .../boost/mpl/aux_/preprocessed/gcc/quote.hpp | 7 +- .../aux_/preprocessed/msvc60/full_lambda.hpp | 200 +++++++++++------- .../preprocessed/msvc60/lambda_no_ctps.hpp | 106 +++++++--- .../mpl/aux_/preprocessed/msvc60/quote.hpp | 2 +- .../aux_/preprocessed/msvc70/full_lambda.hpp | 200 +++++++++++------- .../preprocessed/msvc70/lambda_no_ctps.hpp | 106 +++++++--- .../mpl/aux_/preprocessed/msvc70/quote.hpp | 8 +- .../aux_/preprocessed/mwcw/full_lambda.hpp | 200 +++++++++++------- .../aux_/preprocessed/mwcw/lambda_no_ctps.hpp | 106 +++++++--- .../mpl/aux_/preprocessed/mwcw/quote.hpp | 7 +- .../aux_/preprocessed/no_ctps/full_lambda.hpp | 200 +++++++++++------- .../preprocessed/no_ctps/lambda_no_ctps.hpp | 106 +++++++--- .../mpl/aux_/preprocessed/no_ctps/quote.hpp | 8 +- .../aux_/preprocessed/plain/full_lambda.hpp | 169 +++++++++------ .../preprocessed/plain/lambda_no_ctps.hpp | 106 +++++++--- .../mpl/aux_/preprocessed/plain/quote.hpp | 7 +- include/boost/mpl/aux_/void_spec.hpp | 2 + include/boost/mpl/lambda_fwd.hpp | 36 +++- include/boost/mpl/quote.hpp | 32 +-- 29 files changed, 1685 insertions(+), 929 deletions(-) diff --git a/include/boost/mpl/aux_/full_lambda.hpp b/include/boost/mpl/aux_/full_lambda.hpp index 5d02053..bc4442d 100644 --- a/include/boost/mpl/aux_/full_lambda.hpp +++ b/include/boost/mpl/aux_/full_lambda.hpp @@ -1,9 +1,15 @@ -//----------------------------------------------------------------------------- -// boost mpl/aux_/full_lambda.hpp header file -// See http://www.boost.org for updates, documentation, and revision history. -//----------------------------------------------------------------------------- -// -// Copyright (c) 2001-02 + +#if !defined(BOOST_PP_IS_ITERATING) + +///// header body + +#ifndef BOOST_MPL_AUX_FULL_LAMBDA_HPP_INCLUDED +#define BOOST_MPL_AUX_FULL_LAMBDA_HPP_INCLUDED + +// + file: boost/mpl/full_lambda.hpp +// + last modified: 03/aug/03 + +// Copyright (c) 2001-03 // Aleksey Gurtovoy // // Permission to use, copy, modify, distribute and sell this software @@ -13,13 +19,8 @@ // supporting documentation. No representations are made about the // suitability of this software for any purpose. It is provided "as is" // without express or implied warranty. - -#if !defined(BOOST_PP_IS_ITERATING) - -///// header body - -#ifndef BOOST_MPL_AUX_FULL_LAMBDA_HPP_INCLUDED -#define BOOST_MPL_AUX_FULL_LAMBDA_HPP_INCLUDED +// +// See http://www.boost.org/libs/mpl for documentation. #if !defined(BOOST_MPL_PREPROCESSING_MODE) # include "boost/mpl/lambda_fwd.hpp" @@ -81,6 +82,7 @@ namespace mpl { template< typename T + , typename Tag , typename Protect = false_ AUX_ARITY_PARAM(typename Arity = int_< aux::template_arity::value >) > @@ -92,10 +94,11 @@ struct lambda_impl template< typename T + , typename Tag = void_ AUX_ARITY_PARAM(typename Arity = int_< aux::template_arity::value >) > struct lambda - : lambda_impl + : lambda_impl { }; @@ -121,8 +124,8 @@ struct lambda_or< BOOST_MPL_PP_ENUM(n,false) > } // namespace aux #undef n -template< int N, typename Protect > -struct lambda_impl< arg, Protect AUX_ARITY_PARAM(int_<-1>) > +template< int N, typename Tag, typename Protect > +struct lambda_impl< arg,Tag,Protect AUX_ARITY_PARAM(int_<-1>) > { BOOST_MPL_AUX_IS_LAMBDA_EXPR(true_) typedef arg type; @@ -135,8 +138,8 @@ struct lambda_impl< arg, Protect AUX_ARITY_PARAM(int_<-1>) > #include BOOST_PP_ITERATE() //: special case for 'protect' -template< typename T, typename Protect > -struct lambda_impl< protect, Protect AUX_ARITY_PARAM(int_<1>) > +template< typename T, typename Tag, typename Protect > +struct lambda_impl< protect,Tag,Protect AUX_ARITY_PARAM(int_<1>) > { BOOST_MPL_AUX_IS_LAMBDA_EXPR(false_) typedef protect type; @@ -145,10 +148,12 @@ struct lambda_impl< protect, Protect AUX_ARITY_PARAM(int_<1>) > //: specializations for main 'bind', 'bind1st' and 'bind2nd' forms template< typename F, AUX_LAMBDA_BIND_PARAMS(typename T) + , typename Tag , typename Protect > struct lambda_impl< bind + , Tag , Protect AUX_ARITY_PARAM(int_) > @@ -159,9 +164,10 @@ struct lambda_impl< template< typename F, typename T + , typename Tag , typename Protect > -struct lambda_impl< bind1st, Protect AUX_ARITY_PARAM(int_<2>) > +struct lambda_impl< bind1st,Tag,Protect AUX_ARITY_PARAM(int_<2>) > { BOOST_MPL_AUX_IS_LAMBDA_EXPR(false_) typedef bind1st type; @@ -169,9 +175,10 @@ struct lambda_impl< bind1st, Protect AUX_ARITY_PARAM(int_<2>) > template< typename F, typename T + , typename Tag , typename Protect > -struct lambda_impl< bind2nd, Protect AUX_ARITY_PARAM(int_<2>) > +struct lambda_impl< bind2nd,Tag,Protect AUX_ARITY_PARAM(int_<2>) > { BOOST_MPL_AUX_IS_LAMBDA_EXPR(false_) typedef bind2nd type; @@ -198,9 +205,10 @@ struct lambda_impl< bind2nd, Protect AUX_ARITY_PARAM(int_<2>) > template< template< AUX_LAMBDA_PARAMS(i, typename P) > class F , AUX_LAMBDA_PARAMS(i, typename T) + , typename Tag > -struct lambda< F AUX_ARITY_PARAM(int_) > - : lambda_impl< F, true_ AUX_ARITY_PARAM(int_) > +struct lambda< F, Tag AUX_ARITY_PARAM(int_) > + : lambda_impl< F,Tag,true_ AUX_ARITY_PARAM(int_) > { }; @@ -209,19 +217,20 @@ struct lambda< F AUX_ARITY_PARAM(int_) > template< template< AUX_LAMBDA_PARAMS(i, typename P) > class F , AUX_LAMBDA_PARAMS(i, typename T) + , typename Tag , typename Protect > struct lambda_impl< - F, Protect AUX_ARITY_PARAM(int_) + F, Tag, Protect AUX_ARITY_PARAM(int_) > { # define AUX_LAMBDA_INVOCATION(unused, i, T) \ BOOST_PP_COMMA_IF(i) \ - typename lambda_impl< BOOST_PP_CAT(T, BOOST_PP_INC(i)) >::type \ + typename lambda_impl< BOOST_PP_CAT(T, BOOST_PP_INC(i)),Tag >::type \ /**/ typedef BOOST_PP_CAT(bind,i)< - BOOST_PP_CAT(quote,i) + BOOST_PP_CAT(quote,i) , BOOST_MPL_PP_REPEAT(i, AUX_LAMBDA_INVOCATION, T) > type; @@ -238,7 +247,7 @@ struct lambda_impl< namespace aux { template< - typename IsLE, typename Protect + typename IsLE, typename Tag, typename Protect , template< AUX_LAMBDA_PARAMS(i, typename P) > class F , AUX_LAMBDA_PARAMS(i, typename L) > @@ -251,24 +260,26 @@ struct BOOST_PP_CAT(le_result,i) template< template< AUX_LAMBDA_PARAMS(i, typename P) > class F + , typename Tag , AUX_LAMBDA_PARAMS(i, typename L) > -struct BOOST_PP_CAT(le_result,i)< true_,false_,F,AUX_LAMBDA_PARAMS(i, L) > +struct BOOST_PP_CAT(le_result,i)< true_,Tag,false_,F,AUX_LAMBDA_PARAMS(i, L) > { typedef BOOST_PP_CAT(bind,i)< - BOOST_PP_CAT(quote,i) + BOOST_PP_CAT(quote,i) , BOOST_MPL_PP_REPEAT(i, AUX_LAMBDA_RESULT, L) > type; }; template< template< AUX_LAMBDA_PARAMS(i, typename P) > class F + , typename Tag , AUX_LAMBDA_PARAMS(i, typename L) > -struct BOOST_PP_CAT(le_result,i)< true_,true_,F,AUX_LAMBDA_PARAMS(i, L) > +struct BOOST_PP_CAT(le_result,i)< true_,Tag,true_,F,AUX_LAMBDA_PARAMS(i, L) > { typedef protect< BOOST_PP_CAT(bind,i)< - BOOST_PP_CAT(quote,i) + BOOST_PP_CAT(quote,i) , BOOST_MPL_PP_REPEAT(i, AUX_LAMBDA_RESULT, L) > > type; }; @@ -276,7 +287,7 @@ struct BOOST_PP_CAT(le_result,i)< true_,true_,F,AUX_LAMBDA_PARAMS(i, L) > } // namespace aux # define AUX_LAMBDA_INVOCATION(unused, i, T) \ - typedef lambda_impl< BOOST_PP_CAT(T, BOOST_PP_INC(i)) > \ + typedef lambda_impl< BOOST_PP_CAT(T, BOOST_PP_INC(i)), Tag > \ BOOST_PP_CAT(l,BOOST_PP_INC(i)); \ /**/ @@ -288,10 +299,11 @@ struct BOOST_PP_CAT(le_result,i)< true_,true_,F,AUX_LAMBDA_PARAMS(i, L) > template< template< AUX_LAMBDA_PARAMS(i, typename P) > class F , AUX_LAMBDA_PARAMS(i, typename T) + , typename Tag , typename Protect > struct lambda_impl< - F, Protect AUX_ARITY_PARAM(int_) + F, Tag, Protect AUX_ARITY_PARAM(int_) > { BOOST_MPL_PP_REPEAT(i, AUX_LAMBDA_INVOCATION, T) @@ -301,6 +313,7 @@ struct lambda_impl< typedef typename aux::BOOST_PP_CAT(le_result,i)< typename is_le::type + , Tag , Protect , F , AUX_LAMBDA_PARAMS(i, l) @@ -316,10 +329,12 @@ struct lambda_impl< template< typename F AUX_LAMBDA_BIND_N_PARAMS(i, typename T) + , typename Tag , typename Protect > struct lambda_impl< BOOST_PP_CAT(bind,i) + , Tag , Protect AUX_ARITY_PARAM(int_) > { diff --git a/include/boost/mpl/aux_/lambda_no_ctps.hpp b/include/boost/mpl/aux_/lambda_no_ctps.hpp index 0ee8a80..da51e51 100644 --- a/include/boost/mpl/aux_/lambda_no_ctps.hpp +++ b/include/boost/mpl/aux_/lambda_no_ctps.hpp @@ -1,9 +1,15 @@ -//----------------------------------------------------------------------------- -// boost mpl/lambda_no_ctps.hpp header file -// See http://www.boost.org for updates, documentation, and revision history. -//----------------------------------------------------------------------------- -// -// Copyright (c) 2001-02 + +#if !defined(BOOST_PP_IS_ITERATING) + +///// header body + +#ifndef BOOST_MPL_AUX_LAMBDA_NO_CTPS_HPP_INCLUDED +#define BOOST_MPL_AUX_LAMBDA_NO_CTPS_HPP_INCLUDED + +// + file: boost/mpl/lambda_no_ctps.hpp +// + last modified: 03/aug/03 + +// Copyright (c) 2001-03 // Aleksey Gurtovoy // // Permission to use, copy, modify, distribute and sell this software @@ -13,26 +19,22 @@ // supporting documentation. No representations are made about the // suitability of this software for any purpose. It is provided "as is" // without express or implied warranty. - -#if !defined(BOOST_PP_IS_ITERATING) - -///// header body - -#ifndef BOOST_MPL_AUX_LAMBDA_NO_CTPS_HPP_INCLUDED -#define BOOST_MPL_AUX_LAMBDA_NO_CTPS_HPP_INCLUDED +// +// See http://www.boost.org/libs/mpl for documentation. #if !defined(BOOST_MPL_PREPROCESSING_MODE) # include "boost/mpl/lambda_fwd.hpp" # include "boost/mpl/bind.hpp" # include "boost/mpl/protect.hpp" # include "boost/mpl/bool.hpp" +# include "boost/mpl/void.hpp" # include "boost/mpl/aux_/template_arity.hpp" #endif #include "boost/mpl/aux_/config/use_preprocessed.hpp" -#if !defined(BOOST_MPL_NO_PREPROCESSED_HEADERS) && \ - !defined(BOOST_MPL_PREPROCESSING_MODE) +#if !defined(BOOST_MPL_NO_PREPROCESSED_HEADERS) \ + && !defined(BOOST_MPL_PREPROCESSING_MODE) # define BOOST_MPL_PREPROCESSED_HEADER lambda_no_ctps.hpp # include "boost/mpl/aux_/include_preprocessed.hpp" @@ -62,7 +64,7 @@ namespace aux { template< BOOST_MPL_AUX_NTTP_DECL(int, arity_), bool Protect > struct lambda_impl { - template< typename T > struct result_ + template< typename T, typename Tag > struct result_ { typedef T type; }; @@ -74,7 +76,11 @@ template< BOOST_MPL_AUX_NTTP_DECL(int, arity_), bool Protect > struct lambda_imp } // namespace aux -template< typename T, bool Protect = true > +template< + typename T + , typename Tag = void_ + , bool Protect = true + > struct lambda : aux::lambda_impl< ::boost::mpl::aux::template_arity::value @@ -83,7 +89,7 @@ struct lambda #else , bool_::value #endif - >::template result_ + >::template result_ { }; @@ -101,32 +107,37 @@ struct lambda #define i BOOST_PP_FRAME_ITERATION(1) # define AUX_LAMBDA_INVOCATION(unused, i, T) \ - , typename lambda< \ + typedef typename lambda< \ typename F::BOOST_PP_CAT(arg,BOOST_PP_INC(i)) \ + , Tag \ , false \ - >::type \ + >::type BOOST_PP_CAT(arg,BOOST_PP_INC(i)); \ /**/ template<> struct lambda_impl { - template< typename F > struct result_ + template< typename F, typename Tag > struct result_ { typedef typename F::rebind f_; + BOOST_MPL_PP_REPEAT(i, AUX_LAMBDA_INVOCATION, T) + typedef BOOST_PP_CAT(bind,i)< f_ - BOOST_MPL_PP_REPEAT(i, AUX_LAMBDA_INVOCATION, T) + , AUX_LAMBDA_PARAMS(i, arg) > type; }; }; template<> struct lambda_impl { - template< typename F > struct result_ + template< typename F, typename Tag > struct result_ { typedef typename F::rebind f_; + BOOST_MPL_PP_REPEAT(i, AUX_LAMBDA_INVOCATION, T) + typedef mpl::protect< BOOST_PP_CAT(bind,i)< f_ - BOOST_MPL_PP_REPEAT(i, AUX_LAMBDA_INVOCATION, T) + , AUX_LAMBDA_PARAMS(i, arg) > > type; }; }; diff --git a/include/boost/mpl/aux_/preprocessed/bcc/full_lambda.hpp b/include/boost/mpl/aux_/preprocessed/bcc/full_lambda.hpp index c790f08..703ffa0 100644 --- a/include/boost/mpl/aux_/preprocessed/bcc/full_lambda.hpp +++ b/include/boost/mpl/aux_/preprocessed/bcc/full_lambda.hpp @@ -1,4 +1,4 @@ -// preprocessed version of 'boost/mpl/aux_/full_lambda.hpp' header +// preprocessed version of 'boost/mpl/aux_/lambda_expr.hpp' header // see the original for copyright information namespace boost { @@ -6,6 +6,7 @@ namespace mpl { template< typename T + , typename Tag , typename Protect = false_ , typename Arity = int_< aux::template_arity::value > > @@ -17,10 +18,11 @@ struct lambda_impl template< typename T + , typename Tag = void_ , typename Arity = int_< aux::template_arity::value > > struct lambda - : lambda_impl< T,false_,Arity > + : lambda_impl< T,Tag,false_,Arity > { }; @@ -43,8 +45,8 @@ struct lambda_or< false,false,false,false,false > } // namespace aux -template< int N, typename Protect > -struct lambda_impl< arg,Protect,int_<-1> > +template< int N, typename Tag, typename Protect > +struct lambda_impl< arg,Tag,Protect,int_<-1> > { typedef true_ is_le; typedef arg type; @@ -52,10 +54,12 @@ struct lambda_impl< arg,Protect,int_<-1> > template< typename F + , typename Tag , typename Protect > struct lambda_impl< bind0 + , Tag , Protect, int_<1> > { @@ -68,16 +72,17 @@ struct lambda_impl< template< template< typename P1 > class F , typename T1 + , typename Tag > -struct lambda< F,int_<1> > - : lambda_impl< F,true_,int_<1> > +struct lambda< F,Tag,int_<1> > + : lambda_impl< F,Tag,true_,int_<1> > { }; namespace aux { template< - typename IsLE, typename Protect + typename IsLE, typename Tag, typename Protect , template< typename P1 > class F , typename L1 > @@ -90,24 +95,26 @@ struct le_result1 template< template< typename P1 > class F + , typename Tag , typename L1 > -struct le_result1< true_,false_,F,L1 > +struct le_result1< true_,Tag,false_,F,L1 > { typedef bind1< - quote1 + quote1< F,Tag > , typename L1::type > type; }; template< template< typename P1 > class F + , typename Tag , typename L1 > -struct le_result1< true_,true_,F,L1 > +struct le_result1< true_,Tag,true_,F,L1 > { typedef protect< bind1< - quote1 + quote1< F,Tag > , typename L1::type > > type; }; @@ -117,19 +124,21 @@ struct le_result1< true_,true_,F,L1 > template< template< typename P1 > class F , typename T1 + , typename Tag , typename Protect > -struct lambda_impl< - F< T1>,Protect,int_<1 > +struct lambda_impl< + F< T1>,Tag,Protect,int_<1 > > { - typedef lambda_impl l1; + typedef lambda_impl< T1,Tag > l1; typedef aux::lambda_or< l1::is_le::value > is_le; typedef typename aux::le_result1< typename is_le::type + , Tag , Protect , F , l1 @@ -138,10 +147,12 @@ struct lambda_impl< template< typename F, typename T1 + , typename Tag , typename Protect > struct lambda_impl< bind1< F,T1 > + , Tag , Protect, int_<2> > { @@ -155,16 +166,17 @@ struct lambda_impl< template< template< typename P1, typename P2 > class F , typename T1, typename T2 + , typename Tag > -struct lambda< F,int_<2> > - : lambda_impl< F,true_,int_<2> > +struct lambda< F,Tag,int_<2> > + : lambda_impl< F,Tag,true_,int_<2> > { }; namespace aux { template< - typename IsLE, typename Protect + typename IsLE, typename Tag, typename Protect , template< typename P1, typename P2 > class F , typename L1, typename L2 > @@ -177,24 +189,26 @@ struct le_result2 template< template< typename P1, typename P2 > class F + , typename Tag , typename L1, typename L2 > -struct le_result2< true_,false_,F,L1,L2 > +struct le_result2< true_,Tag,false_,F,L1,L2 > { typedef bind2< - quote2 + quote2< F,Tag > , typename L1::type, typename L2::type > type; }; template< template< typename P1, typename P2 > class F + , typename Tag , typename L1, typename L2 > -struct le_result2< true_,true_,F,L1,L2 > +struct le_result2< true_,Tag,true_,F,L1,L2 > { typedef protect< bind2< - quote2 + quote2< F,Tag > , typename L1::type, typename L2::type > > type; }; @@ -204,14 +218,15 @@ struct le_result2< true_,true_,F,L1,L2 > template< template< typename P1, typename P2 > class F , typename T1, typename T2 + , typename Tag , typename Protect > -struct lambda_impl< - F< T1,T2>,Protect,int_<2 > +struct lambda_impl< + F< T1,T2>,Tag,Protect,int_<2 > > { - typedef lambda_impl l1; - typedef lambda_impl l2; + typedef lambda_impl< T1,Tag > l1; + typedef lambda_impl< T2,Tag > l2; typedef aux::lambda_or< l1::is_le::value, l2::is_le::value @@ -219,6 +234,7 @@ struct lambda_impl< typedef typename aux::le_result2< typename is_le::type + , Tag , Protect , F , l1, l2 @@ -227,10 +243,12 @@ struct lambda_impl< template< typename F, typename T1, typename T2 + , typename Tag , typename Protect > struct lambda_impl< bind2< F,T1,T2 > + , Tag , Protect, int_<3> > { @@ -244,16 +262,17 @@ struct lambda_impl< template< template< typename P1, typename P2, typename P3 > class F , typename T1, typename T2, typename T3 + , typename Tag > -struct lambda< F,int_<3> > - : lambda_impl< F,true_,int_<3> > +struct lambda< F,Tag,int_<3> > + : lambda_impl< F,Tag,true_,int_<3> > { }; namespace aux { template< - typename IsLE, typename Protect + typename IsLE, typename Tag, typename Protect , template< typename P1, typename P2, typename P3 > class F , typename L1, typename L2, typename L3 > @@ -266,24 +285,26 @@ struct le_result3 template< template< typename P1, typename P2, typename P3 > class F + , typename Tag , typename L1, typename L2, typename L3 > -struct le_result3< true_,false_,F,L1,L2,L3 > +struct le_result3< true_,Tag,false_,F,L1,L2,L3 > { typedef bind3< - quote3 + quote3< F,Tag > , typename L1::type, typename L2::type, typename L3::type > type; }; template< template< typename P1, typename P2, typename P3 > class F + , typename Tag , typename L1, typename L2, typename L3 > -struct le_result3< true_,true_,F,L1,L2,L3 > +struct le_result3< true_,Tag,true_,F,L1,L2,L3 > { typedef protect< bind3< - quote3 + quote3< F,Tag > , typename L1::type, typename L2::type, typename L3::type > > type; }; @@ -293,15 +314,16 @@ struct le_result3< true_,true_,F,L1,L2,L3 > template< template< typename P1, typename P2, typename P3 > class F , typename T1, typename T2, typename T3 + , typename Tag , typename Protect > -struct lambda_impl< - F< T1,T2,T3>,Protect,int_<3 > +struct lambda_impl< + F< T1,T2,T3>,Tag,Protect,int_<3 > > { - typedef lambda_impl l1; - typedef lambda_impl l2; - typedef lambda_impl l3; + typedef lambda_impl< T1,Tag > l1; + typedef lambda_impl< T2,Tag > l2; + typedef lambda_impl< T3,Tag > l3; typedef aux::lambda_or< l1::is_le::value, l2::is_le::value, l3::is_le::value @@ -309,6 +331,7 @@ struct lambda_impl< typedef typename aux::le_result3< typename is_le::type + , Tag , Protect , F , l1, l2, l3 @@ -317,10 +340,12 @@ struct lambda_impl< template< typename F, typename T1, typename T2, typename T3 + , typename Tag , typename Protect > struct lambda_impl< bind3< F,T1,T2,T3 > + , Tag , Protect, int_<4> > { @@ -334,16 +359,17 @@ struct lambda_impl< template< template< typename P1, typename P2, typename P3, typename P4 > class F , typename T1, typename T2, typename T3, typename T4 + , typename Tag > -struct lambda< F,int_<4> > - : lambda_impl< F,true_,int_<4> > +struct lambda< F,Tag,int_<4> > + : lambda_impl< F,Tag,true_,int_<4> > { }; namespace aux { template< - typename IsLE, typename Protect + typename IsLE, typename Tag, typename Protect , template< typename P1, typename P2, typename P3, typename P4 > class F , typename L1, typename L2, typename L3, typename L4 > @@ -357,12 +383,13 @@ struct le_result4 template< template< typename P1, typename P2, typename P3, typename P4 > class F + , typename Tag , typename L1, typename L2, typename L3, typename L4 > -struct le_result4< true_,false_,F,L1,L2,L3,L4 > +struct le_result4< true_,Tag,false_,F,L1,L2,L3,L4 > { typedef bind4< - quote4 + quote4< F,Tag > , typename L1::type, typename L2::type, typename L3::type , typename L4::type > type; @@ -370,12 +397,13 @@ struct le_result4< true_,false_,F,L1,L2,L3,L4 > template< template< typename P1, typename P2, typename P3, typename P4 > class F + , typename Tag , typename L1, typename L2, typename L3, typename L4 > -struct le_result4< true_,true_,F,L1,L2,L3,L4 > +struct le_result4< true_,Tag,true_,F,L1,L2,L3,L4 > { typedef protect< bind4< - quote4 + quote4< F,Tag > , typename L1::type, typename L2::type, typename L3::type , typename L4::type > > type; @@ -386,16 +414,17 @@ struct le_result4< true_,true_,F,L1,L2,L3,L4 > template< template< typename P1, typename P2, typename P3, typename P4 > class F , typename T1, typename T2, typename T3, typename T4 + , typename Tag , typename Protect > -struct lambda_impl< - F< T1,T2,T3,T4>,Protect,int_<4 > +struct lambda_impl< + F< T1,T2,T3,T4>,Tag,Protect,int_<4 > > { - typedef lambda_impl l1; - typedef lambda_impl l2; - typedef lambda_impl l3; - typedef lambda_impl l4; + typedef lambda_impl< T1,Tag > l1; + typedef lambda_impl< T2,Tag > l2; + typedef lambda_impl< T3,Tag > l3; + typedef lambda_impl< T4,Tag > l4; typedef aux::lambda_or< l1::is_le::value, l2::is_le::value, l3::is_le::value @@ -404,6 +433,7 @@ struct lambda_impl< typedef typename aux::le_result4< typename is_le::type + , Tag , Protect , F , l1, l2, l3, l4 @@ -412,10 +442,12 @@ struct lambda_impl< template< typename F, typename T1, typename T2, typename T3, typename T4 + , typename Tag , typename Protect > struct lambda_impl< bind4< F,T1,T2,T3,T4 > + , Tag , Protect, int_<5> > { @@ -433,16 +465,17 @@ template< > class F , typename T1, typename T2, typename T3, typename T4, typename T5 + , typename Tag > -struct lambda< F,int_<5> > - : lambda_impl< F,true_,int_<5> > +struct lambda< F,Tag,int_<5> > + : lambda_impl< F,Tag,true_,int_<5> > { }; namespace aux { template< - typename IsLE, typename Protect + typename IsLE, typename Tag, typename Protect , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F , typename L1, typename L2, typename L3, typename L4, typename L5 > @@ -460,12 +493,13 @@ template< , typename P5 > class F + , typename Tag , typename L1, typename L2, typename L3, typename L4, typename L5 > -struct le_result5< true_,false_,F,L1,L2,L3,L4,L5 > +struct le_result5< true_,Tag,false_,F,L1,L2,L3,L4,L5 > { typedef bind5< - quote5 + quote5< F,Tag > , typename L1::type, typename L2::type, typename L3::type , typename L4::type, typename L5::type > type; @@ -477,12 +511,13 @@ template< , typename P5 > class F + , typename Tag , typename L1, typename L2, typename L3, typename L4, typename L5 > -struct le_result5< true_,true_,F,L1,L2,L3,L4,L5 > +struct le_result5< true_,Tag,true_,F,L1,L2,L3,L4,L5 > { typedef protect< bind5< - quote5 + quote5< F,Tag > , typename L1::type, typename L2::type, typename L3::type , typename L4::type, typename L5::type > > type; @@ -497,17 +532,18 @@ template< > class F , typename T1, typename T2, typename T3, typename T4, typename T5 + , typename Tag , typename Protect > -struct lambda_impl< - F< T1,T2,T3,T4,T5>,Protect,int_<5 > +struct lambda_impl< + F< T1,T2,T3,T4,T5>,Tag,Protect,int_<5 > > { - typedef lambda_impl l1; - typedef lambda_impl l2; - typedef lambda_impl l3; - typedef lambda_impl l4; - typedef lambda_impl l5; + typedef lambda_impl< T1,Tag > l1; + typedef lambda_impl< T2,Tag > l2; + typedef lambda_impl< T3,Tag > l3; + typedef lambda_impl< T4,Tag > l4; + typedef lambda_impl< T5,Tag > l5; typedef aux::lambda_or< l1::is_le::value, l2::is_le::value, l3::is_le::value @@ -516,6 +552,7 @@ struct lambda_impl< typedef typename aux::le_result5< typename is_le::type + , Tag , Protect , F , l1, l2, l3, l4, l5 @@ -525,10 +562,12 @@ struct lambda_impl< template< typename F, typename T1, typename T2, typename T3, typename T4 , typename T5 + , typename Tag , typename Protect > struct lambda_impl< bind5< F,T1,T2,T3,T4,T5 > + , Tag , Protect, int_<6> > { @@ -540,22 +579,25 @@ struct lambda_impl< }; // special case for 'protect' -template< typename T, typename Protect > -struct lambda_impl< protect,Protect,int_<1> > +template< typename T, typename Tag, typename Protect > +struct lambda_impl< protect,Tag,Protect,int_<1> > { typedef false_ is_le; typedef protect type; }; // specializations for main 'bind', 'bind1st' and 'bind2nd' forms + template< typename F, typename T1, typename T2, typename T3, typename T4 , typename T5 + , typename Tag , typename Protect > struct lambda_impl< bind< F,T1,T2,T3,T4,T5 > - , Protect + , Tag + , Protect , int_<6> > { @@ -565,9 +607,10 @@ struct lambda_impl< template< typename F, typename T + , typename Tag , typename Protect > -struct lambda_impl< bind1st,Protect,int_<2> > +struct lambda_impl< bind1st,Tag,Protect,int_<2> > { typedef false_ is_le; typedef bind1st< F,T > type; @@ -575,9 +618,10 @@ struct lambda_impl< bind1st,Protect,int_<2> > template< typename F, typename T + , typename Tag , typename Protect > -struct lambda_impl< bind2nd,Protect,int_<2> > +struct lambda_impl< bind2nd,Tag,Protect,int_<2> > { typedef false_ is_le; typedef bind2nd< F,T > type; diff --git a/include/boost/mpl/aux_/preprocessed/bcc/lambda_no_ctps.hpp b/include/boost/mpl/aux_/preprocessed/bcc/lambda_no_ctps.hpp index 23d1969..5cb1956 100644 --- a/include/boost/mpl/aux_/preprocessed/bcc/lambda_no_ctps.hpp +++ b/include/boost/mpl/aux_/preprocessed/bcc/lambda_no_ctps.hpp @@ -1,4 +1,4 @@ -// preprocessed version of 'boost/mpl/lambda_no_ctps.hpp' header +// preprocessed version of 'boost/mpl/aux_/config/use_preprocessed.hpp' header // see the original for copyright information namespace boost { @@ -8,7 +8,7 @@ namespace aux { template< int arity_, bool Protect > struct lambda_impl { - template< typename T > struct result_ + template< typename T, typename Tag > struct result_ { typedef T type; }; @@ -16,142 +16,184 @@ template< int arity_, bool Protect > struct lambda_impl template<> struct lambda_impl<1, false> { - template< typename F > struct result_ + template< typename F, typename Tag > struct result_ { typedef typename F::rebind f_; + typedef typename lambda< typename F::arg1, Tag, false >::type arg1; typedef bind1< f_ - , typename lambda< typename F::arg1, false >::type + , arg1 > type; }; }; template<> struct lambda_impl<1, true> { - template< typename F > struct result_ + template< typename F, typename Tag > struct result_ { typedef typename F::rebind f_; + typedef typename lambda< typename F::arg1, Tag, false >::type arg1; typedef mpl::protect< bind1< f_ - , typename lambda< typename F::arg1, false >::type + , arg1 > > type; }; }; template<> struct lambda_impl<2, false> { - template< typename F > struct result_ + template< typename F, typename Tag > struct result_ { typedef typename F::rebind f_; + typedef typename lambda< typename F::arg1, Tag, false >::type arg1; + typedef typename lambda< typename F::arg2, Tag, false >::type arg2; + + typedef bind2< f_ - - ,typename lambda< typename F::arg1, false >::type, typename lambda< typename F::arg2, false >::type + , arg1, arg2 > type; }; }; template<> struct lambda_impl<2, true> { - template< typename F > struct result_ + template< typename F, typename Tag > struct result_ { typedef typename F::rebind f_; + typedef typename lambda< typename F::arg1, Tag, false >::type arg1; + typedef typename lambda< typename F::arg2, Tag, false >::type arg2; + + typedef mpl::protect< bind2< f_ - - ,typename lambda< typename F::arg1, false >::type, typename lambda< typename F::arg2, false >::type + , arg1, arg2 > > type; }; }; template<> struct lambda_impl<3, false> { - template< typename F > struct result_ + template< typename F, typename Tag > struct result_ { typedef typename F::rebind f_; + typedef typename lambda< typename F::arg1, Tag, false >::type arg1; + typedef typename lambda< typename F::arg2, Tag, false >::type arg2; + typedef typename lambda< typename F::arg3, Tag, false >::type arg3; + + typedef bind3< f_ - - ,typename lambda< typename F::arg1, false >::type, typename lambda< typename F::arg2, false >::type, typename lambda< typename F::arg3, false >::type + , arg1, arg2, arg3 > type; }; }; template<> struct lambda_impl<3, true> { - template< typename F > struct result_ + template< typename F, typename Tag > struct result_ { typedef typename F::rebind f_; + typedef typename lambda< typename F::arg1, Tag, false >::type arg1; + typedef typename lambda< typename F::arg2, Tag, false >::type arg2; + typedef typename lambda< typename F::arg3, Tag, false >::type arg3; + + typedef mpl::protect< bind3< f_ - - ,typename lambda< typename F::arg1, false >::type, typename lambda< typename F::arg2, false >::type, typename lambda< typename F::arg3, false >::type + , arg1, arg2, arg3 > > type; }; }; template<> struct lambda_impl<4, false> { - template< typename F > struct result_ + template< typename F, typename Tag > struct result_ { typedef typename F::rebind f_; + typedef typename lambda< typename F::arg1, Tag, false >::type arg1; + typedef typename lambda< typename F::arg2, Tag, false >::type arg2; + typedef typename lambda< typename F::arg3, Tag, false >::type arg3; + typedef typename lambda< typename F::arg4, Tag, false >::type arg4; + + typedef bind4< f_ - - ,typename lambda< typename F::arg1, false >::type, typename lambda< typename F::arg2, false >::type, typename lambda< typename F::arg3, false >::type, typename lambda< typename F::arg4, false >::type + , arg1, arg2, arg3, arg4 > type; }; }; template<> struct lambda_impl<4, true> { - template< typename F > struct result_ + template< typename F, typename Tag > struct result_ { typedef typename F::rebind f_; + typedef typename lambda< typename F::arg1, Tag, false >::type arg1; + typedef typename lambda< typename F::arg2, Tag, false >::type arg2; + typedef typename lambda< typename F::arg3, Tag, false >::type arg3; + typedef typename lambda< typename F::arg4, Tag, false >::type arg4; + + typedef mpl::protect< bind4< f_ - - ,typename lambda< typename F::arg1, false >::type, typename lambda< typename F::arg2, false >::type, typename lambda< typename F::arg3, false >::type, typename lambda< typename F::arg4, false >::type + , arg1, arg2, arg3, arg4 > > type; }; }; template<> struct lambda_impl<5, false> { - template< typename F > struct result_ + template< typename F, typename Tag > struct result_ { typedef typename F::rebind f_; + typedef typename lambda< typename F::arg1, Tag, false >::type arg1; + typedef typename lambda< typename F::arg2, Tag, false >::type arg2; + typedef typename lambda< typename F::arg3, Tag, false >::type arg3; + typedef typename lambda< typename F::arg4, Tag, false >::type arg4; + typedef typename lambda< typename F::arg5, Tag, false >::type arg5; + + typedef bind5< f_ - - ,typename lambda< typename F::arg1, false >::type, typename lambda< typename F::arg2, false >::type, typename lambda< typename F::arg3, false >::type, typename lambda< typename F::arg4, false >::type, typename lambda< typename F::arg5, false >::type + , arg1, arg2, arg3, arg4, arg5 > type; }; }; template<> struct lambda_impl<5, true> { - template< typename F > struct result_ + template< typename F, typename Tag > struct result_ { typedef typename F::rebind f_; + typedef typename lambda< typename F::arg1, Tag, false >::type arg1; + typedef typename lambda< typename F::arg2, Tag, false >::type arg2; + typedef typename lambda< typename F::arg3, Tag, false >::type arg3; + typedef typename lambda< typename F::arg4, Tag, false >::type arg4; + typedef typename lambda< typename F::arg5, Tag, false >::type arg5; + + typedef mpl::protect< bind5< f_ - - ,typename lambda< typename F::arg1, false >::type, typename lambda< typename F::arg2, false >::type, typename lambda< typename F::arg3, false >::type, typename lambda< typename F::arg4, false >::type, typename lambda< typename F::arg5, false >::type + , arg1, arg2, arg3, arg4, arg5 > > type; }; }; } // namespace aux -template< typename T, bool Protect = true > +template< + typename T + , typename Tag = void_ + , bool Protect = true + > struct lambda : aux::lambda_impl< ::boost::mpl::aux::template_arity::value , Protect - >::template result_ + >::template result_< T,Tag > { }; diff --git a/include/boost/mpl/aux_/preprocessed/bcc/quote.hpp b/include/boost/mpl/aux_/preprocessed/bcc/quote.hpp index 902c44e..ff98b23 100644 --- a/include/boost/mpl/aux_/preprocessed/bcc/quote.hpp +++ b/include/boost/mpl/aux_/preprocessed/bcc/quote.hpp @@ -1,3 +1,3 @@ -// preprocessed version of 'boost/mpl/quote.hpp' header +// preprocessed version of 'boost/mpl/aux_/config/use_preprocessed.hpp' header // see the original for copyright information diff --git a/include/boost/mpl/aux_/preprocessed/bcc551/full_lambda.hpp b/include/boost/mpl/aux_/preprocessed/bcc551/full_lambda.hpp index c790f08..703ffa0 100644 --- a/include/boost/mpl/aux_/preprocessed/bcc551/full_lambda.hpp +++ b/include/boost/mpl/aux_/preprocessed/bcc551/full_lambda.hpp @@ -1,4 +1,4 @@ -// preprocessed version of 'boost/mpl/aux_/full_lambda.hpp' header +// preprocessed version of 'boost/mpl/aux_/lambda_expr.hpp' header // see the original for copyright information namespace boost { @@ -6,6 +6,7 @@ namespace mpl { template< typename T + , typename Tag , typename Protect = false_ , typename Arity = int_< aux::template_arity::value > > @@ -17,10 +18,11 @@ struct lambda_impl template< typename T + , typename Tag = void_ , typename Arity = int_< aux::template_arity::value > > struct lambda - : lambda_impl< T,false_,Arity > + : lambda_impl< T,Tag,false_,Arity > { }; @@ -43,8 +45,8 @@ struct lambda_or< false,false,false,false,false > } // namespace aux -template< int N, typename Protect > -struct lambda_impl< arg,Protect,int_<-1> > +template< int N, typename Tag, typename Protect > +struct lambda_impl< arg,Tag,Protect,int_<-1> > { typedef true_ is_le; typedef arg type; @@ -52,10 +54,12 @@ struct lambda_impl< arg,Protect,int_<-1> > template< typename F + , typename Tag , typename Protect > struct lambda_impl< bind0 + , Tag , Protect, int_<1> > { @@ -68,16 +72,17 @@ struct lambda_impl< template< template< typename P1 > class F , typename T1 + , typename Tag > -struct lambda< F,int_<1> > - : lambda_impl< F,true_,int_<1> > +struct lambda< F,Tag,int_<1> > + : lambda_impl< F,Tag,true_,int_<1> > { }; namespace aux { template< - typename IsLE, typename Protect + typename IsLE, typename Tag, typename Protect , template< typename P1 > class F , typename L1 > @@ -90,24 +95,26 @@ struct le_result1 template< template< typename P1 > class F + , typename Tag , typename L1 > -struct le_result1< true_,false_,F,L1 > +struct le_result1< true_,Tag,false_,F,L1 > { typedef bind1< - quote1 + quote1< F,Tag > , typename L1::type > type; }; template< template< typename P1 > class F + , typename Tag , typename L1 > -struct le_result1< true_,true_,F,L1 > +struct le_result1< true_,Tag,true_,F,L1 > { typedef protect< bind1< - quote1 + quote1< F,Tag > , typename L1::type > > type; }; @@ -117,19 +124,21 @@ struct le_result1< true_,true_,F,L1 > template< template< typename P1 > class F , typename T1 + , typename Tag , typename Protect > -struct lambda_impl< - F< T1>,Protect,int_<1 > +struct lambda_impl< + F< T1>,Tag,Protect,int_<1 > > { - typedef lambda_impl l1; + typedef lambda_impl< T1,Tag > l1; typedef aux::lambda_or< l1::is_le::value > is_le; typedef typename aux::le_result1< typename is_le::type + , Tag , Protect , F , l1 @@ -138,10 +147,12 @@ struct lambda_impl< template< typename F, typename T1 + , typename Tag , typename Protect > struct lambda_impl< bind1< F,T1 > + , Tag , Protect, int_<2> > { @@ -155,16 +166,17 @@ struct lambda_impl< template< template< typename P1, typename P2 > class F , typename T1, typename T2 + , typename Tag > -struct lambda< F,int_<2> > - : lambda_impl< F,true_,int_<2> > +struct lambda< F,Tag,int_<2> > + : lambda_impl< F,Tag,true_,int_<2> > { }; namespace aux { template< - typename IsLE, typename Protect + typename IsLE, typename Tag, typename Protect , template< typename P1, typename P2 > class F , typename L1, typename L2 > @@ -177,24 +189,26 @@ struct le_result2 template< template< typename P1, typename P2 > class F + , typename Tag , typename L1, typename L2 > -struct le_result2< true_,false_,F,L1,L2 > +struct le_result2< true_,Tag,false_,F,L1,L2 > { typedef bind2< - quote2 + quote2< F,Tag > , typename L1::type, typename L2::type > type; }; template< template< typename P1, typename P2 > class F + , typename Tag , typename L1, typename L2 > -struct le_result2< true_,true_,F,L1,L2 > +struct le_result2< true_,Tag,true_,F,L1,L2 > { typedef protect< bind2< - quote2 + quote2< F,Tag > , typename L1::type, typename L2::type > > type; }; @@ -204,14 +218,15 @@ struct le_result2< true_,true_,F,L1,L2 > template< template< typename P1, typename P2 > class F , typename T1, typename T2 + , typename Tag , typename Protect > -struct lambda_impl< - F< T1,T2>,Protect,int_<2 > +struct lambda_impl< + F< T1,T2>,Tag,Protect,int_<2 > > { - typedef lambda_impl l1; - typedef lambda_impl l2; + typedef lambda_impl< T1,Tag > l1; + typedef lambda_impl< T2,Tag > l2; typedef aux::lambda_or< l1::is_le::value, l2::is_le::value @@ -219,6 +234,7 @@ struct lambda_impl< typedef typename aux::le_result2< typename is_le::type + , Tag , Protect , F , l1, l2 @@ -227,10 +243,12 @@ struct lambda_impl< template< typename F, typename T1, typename T2 + , typename Tag , typename Protect > struct lambda_impl< bind2< F,T1,T2 > + , Tag , Protect, int_<3> > { @@ -244,16 +262,17 @@ struct lambda_impl< template< template< typename P1, typename P2, typename P3 > class F , typename T1, typename T2, typename T3 + , typename Tag > -struct lambda< F,int_<3> > - : lambda_impl< F,true_,int_<3> > +struct lambda< F,Tag,int_<3> > + : lambda_impl< F,Tag,true_,int_<3> > { }; namespace aux { template< - typename IsLE, typename Protect + typename IsLE, typename Tag, typename Protect , template< typename P1, typename P2, typename P3 > class F , typename L1, typename L2, typename L3 > @@ -266,24 +285,26 @@ struct le_result3 template< template< typename P1, typename P2, typename P3 > class F + , typename Tag , typename L1, typename L2, typename L3 > -struct le_result3< true_,false_,F,L1,L2,L3 > +struct le_result3< true_,Tag,false_,F,L1,L2,L3 > { typedef bind3< - quote3 + quote3< F,Tag > , typename L1::type, typename L2::type, typename L3::type > type; }; template< template< typename P1, typename P2, typename P3 > class F + , typename Tag , typename L1, typename L2, typename L3 > -struct le_result3< true_,true_,F,L1,L2,L3 > +struct le_result3< true_,Tag,true_,F,L1,L2,L3 > { typedef protect< bind3< - quote3 + quote3< F,Tag > , typename L1::type, typename L2::type, typename L3::type > > type; }; @@ -293,15 +314,16 @@ struct le_result3< true_,true_,F,L1,L2,L3 > template< template< typename P1, typename P2, typename P3 > class F , typename T1, typename T2, typename T3 + , typename Tag , typename Protect > -struct lambda_impl< - F< T1,T2,T3>,Protect,int_<3 > +struct lambda_impl< + F< T1,T2,T3>,Tag,Protect,int_<3 > > { - typedef lambda_impl l1; - typedef lambda_impl l2; - typedef lambda_impl l3; + typedef lambda_impl< T1,Tag > l1; + typedef lambda_impl< T2,Tag > l2; + typedef lambda_impl< T3,Tag > l3; typedef aux::lambda_or< l1::is_le::value, l2::is_le::value, l3::is_le::value @@ -309,6 +331,7 @@ struct lambda_impl< typedef typename aux::le_result3< typename is_le::type + , Tag , Protect , F , l1, l2, l3 @@ -317,10 +340,12 @@ struct lambda_impl< template< typename F, typename T1, typename T2, typename T3 + , typename Tag , typename Protect > struct lambda_impl< bind3< F,T1,T2,T3 > + , Tag , Protect, int_<4> > { @@ -334,16 +359,17 @@ struct lambda_impl< template< template< typename P1, typename P2, typename P3, typename P4 > class F , typename T1, typename T2, typename T3, typename T4 + , typename Tag > -struct lambda< F,int_<4> > - : lambda_impl< F,true_,int_<4> > +struct lambda< F,Tag,int_<4> > + : lambda_impl< F,Tag,true_,int_<4> > { }; namespace aux { template< - typename IsLE, typename Protect + typename IsLE, typename Tag, typename Protect , template< typename P1, typename P2, typename P3, typename P4 > class F , typename L1, typename L2, typename L3, typename L4 > @@ -357,12 +383,13 @@ struct le_result4 template< template< typename P1, typename P2, typename P3, typename P4 > class F + , typename Tag , typename L1, typename L2, typename L3, typename L4 > -struct le_result4< true_,false_,F,L1,L2,L3,L4 > +struct le_result4< true_,Tag,false_,F,L1,L2,L3,L4 > { typedef bind4< - quote4 + quote4< F,Tag > , typename L1::type, typename L2::type, typename L3::type , typename L4::type > type; @@ -370,12 +397,13 @@ struct le_result4< true_,false_,F,L1,L2,L3,L4 > template< template< typename P1, typename P2, typename P3, typename P4 > class F + , typename Tag , typename L1, typename L2, typename L3, typename L4 > -struct le_result4< true_,true_,F,L1,L2,L3,L4 > +struct le_result4< true_,Tag,true_,F,L1,L2,L3,L4 > { typedef protect< bind4< - quote4 + quote4< F,Tag > , typename L1::type, typename L2::type, typename L3::type , typename L4::type > > type; @@ -386,16 +414,17 @@ struct le_result4< true_,true_,F,L1,L2,L3,L4 > template< template< typename P1, typename P2, typename P3, typename P4 > class F , typename T1, typename T2, typename T3, typename T4 + , typename Tag , typename Protect > -struct lambda_impl< - F< T1,T2,T3,T4>,Protect,int_<4 > +struct lambda_impl< + F< T1,T2,T3,T4>,Tag,Protect,int_<4 > > { - typedef lambda_impl l1; - typedef lambda_impl l2; - typedef lambda_impl l3; - typedef lambda_impl l4; + typedef lambda_impl< T1,Tag > l1; + typedef lambda_impl< T2,Tag > l2; + typedef lambda_impl< T3,Tag > l3; + typedef lambda_impl< T4,Tag > l4; typedef aux::lambda_or< l1::is_le::value, l2::is_le::value, l3::is_le::value @@ -404,6 +433,7 @@ struct lambda_impl< typedef typename aux::le_result4< typename is_le::type + , Tag , Protect , F , l1, l2, l3, l4 @@ -412,10 +442,12 @@ struct lambda_impl< template< typename F, typename T1, typename T2, typename T3, typename T4 + , typename Tag , typename Protect > struct lambda_impl< bind4< F,T1,T2,T3,T4 > + , Tag , Protect, int_<5> > { @@ -433,16 +465,17 @@ template< > class F , typename T1, typename T2, typename T3, typename T4, typename T5 + , typename Tag > -struct lambda< F,int_<5> > - : lambda_impl< F,true_,int_<5> > +struct lambda< F,Tag,int_<5> > + : lambda_impl< F,Tag,true_,int_<5> > { }; namespace aux { template< - typename IsLE, typename Protect + typename IsLE, typename Tag, typename Protect , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F , typename L1, typename L2, typename L3, typename L4, typename L5 > @@ -460,12 +493,13 @@ template< , typename P5 > class F + , typename Tag , typename L1, typename L2, typename L3, typename L4, typename L5 > -struct le_result5< true_,false_,F,L1,L2,L3,L4,L5 > +struct le_result5< true_,Tag,false_,F,L1,L2,L3,L4,L5 > { typedef bind5< - quote5 + quote5< F,Tag > , typename L1::type, typename L2::type, typename L3::type , typename L4::type, typename L5::type > type; @@ -477,12 +511,13 @@ template< , typename P5 > class F + , typename Tag , typename L1, typename L2, typename L3, typename L4, typename L5 > -struct le_result5< true_,true_,F,L1,L2,L3,L4,L5 > +struct le_result5< true_,Tag,true_,F,L1,L2,L3,L4,L5 > { typedef protect< bind5< - quote5 + quote5< F,Tag > , typename L1::type, typename L2::type, typename L3::type , typename L4::type, typename L5::type > > type; @@ -497,17 +532,18 @@ template< > class F , typename T1, typename T2, typename T3, typename T4, typename T5 + , typename Tag , typename Protect > -struct lambda_impl< - F< T1,T2,T3,T4,T5>,Protect,int_<5 > +struct lambda_impl< + F< T1,T2,T3,T4,T5>,Tag,Protect,int_<5 > > { - typedef lambda_impl l1; - typedef lambda_impl l2; - typedef lambda_impl l3; - typedef lambda_impl l4; - typedef lambda_impl l5; + typedef lambda_impl< T1,Tag > l1; + typedef lambda_impl< T2,Tag > l2; + typedef lambda_impl< T3,Tag > l3; + typedef lambda_impl< T4,Tag > l4; + typedef lambda_impl< T5,Tag > l5; typedef aux::lambda_or< l1::is_le::value, l2::is_le::value, l3::is_le::value @@ -516,6 +552,7 @@ struct lambda_impl< typedef typename aux::le_result5< typename is_le::type + , Tag , Protect , F , l1, l2, l3, l4, l5 @@ -525,10 +562,12 @@ struct lambda_impl< template< typename F, typename T1, typename T2, typename T3, typename T4 , typename T5 + , typename Tag , typename Protect > struct lambda_impl< bind5< F,T1,T2,T3,T4,T5 > + , Tag , Protect, int_<6> > { @@ -540,22 +579,25 @@ struct lambda_impl< }; // special case for 'protect' -template< typename T, typename Protect > -struct lambda_impl< protect,Protect,int_<1> > +template< typename T, typename Tag, typename Protect > +struct lambda_impl< protect,Tag,Protect,int_<1> > { typedef false_ is_le; typedef protect type; }; // specializations for main 'bind', 'bind1st' and 'bind2nd' forms + template< typename F, typename T1, typename T2, typename T3, typename T4 , typename T5 + , typename Tag , typename Protect > struct lambda_impl< bind< F,T1,T2,T3,T4,T5 > - , Protect + , Tag + , Protect , int_<6> > { @@ -565,9 +607,10 @@ struct lambda_impl< template< typename F, typename T + , typename Tag , typename Protect > -struct lambda_impl< bind1st,Protect,int_<2> > +struct lambda_impl< bind1st,Tag,Protect,int_<2> > { typedef false_ is_le; typedef bind1st< F,T > type; @@ -575,9 +618,10 @@ struct lambda_impl< bind1st,Protect,int_<2> > template< typename F, typename T + , typename Tag , typename Protect > -struct lambda_impl< bind2nd,Protect,int_<2> > +struct lambda_impl< bind2nd,Tag,Protect,int_<2> > { typedef false_ is_le; typedef bind2nd< F,T > type; diff --git a/include/boost/mpl/aux_/preprocessed/bcc551/lambda_no_ctps.hpp b/include/boost/mpl/aux_/preprocessed/bcc551/lambda_no_ctps.hpp index 23d1969..5cb1956 100644 --- a/include/boost/mpl/aux_/preprocessed/bcc551/lambda_no_ctps.hpp +++ b/include/boost/mpl/aux_/preprocessed/bcc551/lambda_no_ctps.hpp @@ -1,4 +1,4 @@ -// preprocessed version of 'boost/mpl/lambda_no_ctps.hpp' header +// preprocessed version of 'boost/mpl/aux_/config/use_preprocessed.hpp' header // see the original for copyright information namespace boost { @@ -8,7 +8,7 @@ namespace aux { template< int arity_, bool Protect > struct lambda_impl { - template< typename T > struct result_ + template< typename T, typename Tag > struct result_ { typedef T type; }; @@ -16,142 +16,184 @@ template< int arity_, bool Protect > struct lambda_impl template<> struct lambda_impl<1, false> { - template< typename F > struct result_ + template< typename F, typename Tag > struct result_ { typedef typename F::rebind f_; + typedef typename lambda< typename F::arg1, Tag, false >::type arg1; typedef bind1< f_ - , typename lambda< typename F::arg1, false >::type + , arg1 > type; }; }; template<> struct lambda_impl<1, true> { - template< typename F > struct result_ + template< typename F, typename Tag > struct result_ { typedef typename F::rebind f_; + typedef typename lambda< typename F::arg1, Tag, false >::type arg1; typedef mpl::protect< bind1< f_ - , typename lambda< typename F::arg1, false >::type + , arg1 > > type; }; }; template<> struct lambda_impl<2, false> { - template< typename F > struct result_ + template< typename F, typename Tag > struct result_ { typedef typename F::rebind f_; + typedef typename lambda< typename F::arg1, Tag, false >::type arg1; + typedef typename lambda< typename F::arg2, Tag, false >::type arg2; + + typedef bind2< f_ - - ,typename lambda< typename F::arg1, false >::type, typename lambda< typename F::arg2, false >::type + , arg1, arg2 > type; }; }; template<> struct lambda_impl<2, true> { - template< typename F > struct result_ + template< typename F, typename Tag > struct result_ { typedef typename F::rebind f_; + typedef typename lambda< typename F::arg1, Tag, false >::type arg1; + typedef typename lambda< typename F::arg2, Tag, false >::type arg2; + + typedef mpl::protect< bind2< f_ - - ,typename lambda< typename F::arg1, false >::type, typename lambda< typename F::arg2, false >::type + , arg1, arg2 > > type; }; }; template<> struct lambda_impl<3, false> { - template< typename F > struct result_ + template< typename F, typename Tag > struct result_ { typedef typename F::rebind f_; + typedef typename lambda< typename F::arg1, Tag, false >::type arg1; + typedef typename lambda< typename F::arg2, Tag, false >::type arg2; + typedef typename lambda< typename F::arg3, Tag, false >::type arg3; + + typedef bind3< f_ - - ,typename lambda< typename F::arg1, false >::type, typename lambda< typename F::arg2, false >::type, typename lambda< typename F::arg3, false >::type + , arg1, arg2, arg3 > type; }; }; template<> struct lambda_impl<3, true> { - template< typename F > struct result_ + template< typename F, typename Tag > struct result_ { typedef typename F::rebind f_; + typedef typename lambda< typename F::arg1, Tag, false >::type arg1; + typedef typename lambda< typename F::arg2, Tag, false >::type arg2; + typedef typename lambda< typename F::arg3, Tag, false >::type arg3; + + typedef mpl::protect< bind3< f_ - - ,typename lambda< typename F::arg1, false >::type, typename lambda< typename F::arg2, false >::type, typename lambda< typename F::arg3, false >::type + , arg1, arg2, arg3 > > type; }; }; template<> struct lambda_impl<4, false> { - template< typename F > struct result_ + template< typename F, typename Tag > struct result_ { typedef typename F::rebind f_; + typedef typename lambda< typename F::arg1, Tag, false >::type arg1; + typedef typename lambda< typename F::arg2, Tag, false >::type arg2; + typedef typename lambda< typename F::arg3, Tag, false >::type arg3; + typedef typename lambda< typename F::arg4, Tag, false >::type arg4; + + typedef bind4< f_ - - ,typename lambda< typename F::arg1, false >::type, typename lambda< typename F::arg2, false >::type, typename lambda< typename F::arg3, false >::type, typename lambda< typename F::arg4, false >::type + , arg1, arg2, arg3, arg4 > type; }; }; template<> struct lambda_impl<4, true> { - template< typename F > struct result_ + template< typename F, typename Tag > struct result_ { typedef typename F::rebind f_; + typedef typename lambda< typename F::arg1, Tag, false >::type arg1; + typedef typename lambda< typename F::arg2, Tag, false >::type arg2; + typedef typename lambda< typename F::arg3, Tag, false >::type arg3; + typedef typename lambda< typename F::arg4, Tag, false >::type arg4; + + typedef mpl::protect< bind4< f_ - - ,typename lambda< typename F::arg1, false >::type, typename lambda< typename F::arg2, false >::type, typename lambda< typename F::arg3, false >::type, typename lambda< typename F::arg4, false >::type + , arg1, arg2, arg3, arg4 > > type; }; }; template<> struct lambda_impl<5, false> { - template< typename F > struct result_ + template< typename F, typename Tag > struct result_ { typedef typename F::rebind f_; + typedef typename lambda< typename F::arg1, Tag, false >::type arg1; + typedef typename lambda< typename F::arg2, Tag, false >::type arg2; + typedef typename lambda< typename F::arg3, Tag, false >::type arg3; + typedef typename lambda< typename F::arg4, Tag, false >::type arg4; + typedef typename lambda< typename F::arg5, Tag, false >::type arg5; + + typedef bind5< f_ - - ,typename lambda< typename F::arg1, false >::type, typename lambda< typename F::arg2, false >::type, typename lambda< typename F::arg3, false >::type, typename lambda< typename F::arg4, false >::type, typename lambda< typename F::arg5, false >::type + , arg1, arg2, arg3, arg4, arg5 > type; }; }; template<> struct lambda_impl<5, true> { - template< typename F > struct result_ + template< typename F, typename Tag > struct result_ { typedef typename F::rebind f_; + typedef typename lambda< typename F::arg1, Tag, false >::type arg1; + typedef typename lambda< typename F::arg2, Tag, false >::type arg2; + typedef typename lambda< typename F::arg3, Tag, false >::type arg3; + typedef typename lambda< typename F::arg4, Tag, false >::type arg4; + typedef typename lambda< typename F::arg5, Tag, false >::type arg5; + + typedef mpl::protect< bind5< f_ - - ,typename lambda< typename F::arg1, false >::type, typename lambda< typename F::arg2, false >::type, typename lambda< typename F::arg3, false >::type, typename lambda< typename F::arg4, false >::type, typename lambda< typename F::arg5, false >::type + , arg1, arg2, arg3, arg4, arg5 > > type; }; }; } // namespace aux -template< typename T, bool Protect = true > +template< + typename T + , typename Tag = void_ + , bool Protect = true + > struct lambda : aux::lambda_impl< ::boost::mpl::aux::template_arity::value , Protect - >::template result_ + >::template result_< T,Tag > { }; diff --git a/include/boost/mpl/aux_/preprocessed/bcc551/quote.hpp b/include/boost/mpl/aux_/preprocessed/bcc551/quote.hpp index 902c44e..ff98b23 100644 --- a/include/boost/mpl/aux_/preprocessed/bcc551/quote.hpp +++ b/include/boost/mpl/aux_/preprocessed/bcc551/quote.hpp @@ -1,3 +1,3 @@ -// preprocessed version of 'boost/mpl/quote.hpp' header +// preprocessed version of 'boost/mpl/aux_/config/use_preprocessed.hpp' header // see the original for copyright information diff --git a/include/boost/mpl/aux_/preprocessed/gcc/full_lambda.hpp b/include/boost/mpl/aux_/preprocessed/gcc/full_lambda.hpp index c790f08..703ffa0 100644 --- a/include/boost/mpl/aux_/preprocessed/gcc/full_lambda.hpp +++ b/include/boost/mpl/aux_/preprocessed/gcc/full_lambda.hpp @@ -1,4 +1,4 @@ -// preprocessed version of 'boost/mpl/aux_/full_lambda.hpp' header +// preprocessed version of 'boost/mpl/aux_/lambda_expr.hpp' header // see the original for copyright information namespace boost { @@ -6,6 +6,7 @@ namespace mpl { template< typename T + , typename Tag , typename Protect = false_ , typename Arity = int_< aux::template_arity::value > > @@ -17,10 +18,11 @@ struct lambda_impl template< typename T + , typename Tag = void_ , typename Arity = int_< aux::template_arity::value > > struct lambda - : lambda_impl< T,false_,Arity > + : lambda_impl< T,Tag,false_,Arity > { }; @@ -43,8 +45,8 @@ struct lambda_or< false,false,false,false,false > } // namespace aux -template< int N, typename Protect > -struct lambda_impl< arg,Protect,int_<-1> > +template< int N, typename Tag, typename Protect > +struct lambda_impl< arg,Tag,Protect,int_<-1> > { typedef true_ is_le; typedef arg type; @@ -52,10 +54,12 @@ struct lambda_impl< arg,Protect,int_<-1> > template< typename F + , typename Tag , typename Protect > struct lambda_impl< bind0 + , Tag , Protect, int_<1> > { @@ -68,16 +72,17 @@ struct lambda_impl< template< template< typename P1 > class F , typename T1 + , typename Tag > -struct lambda< F,int_<1> > - : lambda_impl< F,true_,int_<1> > +struct lambda< F,Tag,int_<1> > + : lambda_impl< F,Tag,true_,int_<1> > { }; namespace aux { template< - typename IsLE, typename Protect + typename IsLE, typename Tag, typename Protect , template< typename P1 > class F , typename L1 > @@ -90,24 +95,26 @@ struct le_result1 template< template< typename P1 > class F + , typename Tag , typename L1 > -struct le_result1< true_,false_,F,L1 > +struct le_result1< true_,Tag,false_,F,L1 > { typedef bind1< - quote1 + quote1< F,Tag > , typename L1::type > type; }; template< template< typename P1 > class F + , typename Tag , typename L1 > -struct le_result1< true_,true_,F,L1 > +struct le_result1< true_,Tag,true_,F,L1 > { typedef protect< bind1< - quote1 + quote1< F,Tag > , typename L1::type > > type; }; @@ -117,19 +124,21 @@ struct le_result1< true_,true_,F,L1 > template< template< typename P1 > class F , typename T1 + , typename Tag , typename Protect > -struct lambda_impl< - F< T1>,Protect,int_<1 > +struct lambda_impl< + F< T1>,Tag,Protect,int_<1 > > { - typedef lambda_impl l1; + typedef lambda_impl< T1,Tag > l1; typedef aux::lambda_or< l1::is_le::value > is_le; typedef typename aux::le_result1< typename is_le::type + , Tag , Protect , F , l1 @@ -138,10 +147,12 @@ struct lambda_impl< template< typename F, typename T1 + , typename Tag , typename Protect > struct lambda_impl< bind1< F,T1 > + , Tag , Protect, int_<2> > { @@ -155,16 +166,17 @@ struct lambda_impl< template< template< typename P1, typename P2 > class F , typename T1, typename T2 + , typename Tag > -struct lambda< F,int_<2> > - : lambda_impl< F,true_,int_<2> > +struct lambda< F,Tag,int_<2> > + : lambda_impl< F,Tag,true_,int_<2> > { }; namespace aux { template< - typename IsLE, typename Protect + typename IsLE, typename Tag, typename Protect , template< typename P1, typename P2 > class F , typename L1, typename L2 > @@ -177,24 +189,26 @@ struct le_result2 template< template< typename P1, typename P2 > class F + , typename Tag , typename L1, typename L2 > -struct le_result2< true_,false_,F,L1,L2 > +struct le_result2< true_,Tag,false_,F,L1,L2 > { typedef bind2< - quote2 + quote2< F,Tag > , typename L1::type, typename L2::type > type; }; template< template< typename P1, typename P2 > class F + , typename Tag , typename L1, typename L2 > -struct le_result2< true_,true_,F,L1,L2 > +struct le_result2< true_,Tag,true_,F,L1,L2 > { typedef protect< bind2< - quote2 + quote2< F,Tag > , typename L1::type, typename L2::type > > type; }; @@ -204,14 +218,15 @@ struct le_result2< true_,true_,F,L1,L2 > template< template< typename P1, typename P2 > class F , typename T1, typename T2 + , typename Tag , typename Protect > -struct lambda_impl< - F< T1,T2>,Protect,int_<2 > +struct lambda_impl< + F< T1,T2>,Tag,Protect,int_<2 > > { - typedef lambda_impl l1; - typedef lambda_impl l2; + typedef lambda_impl< T1,Tag > l1; + typedef lambda_impl< T2,Tag > l2; typedef aux::lambda_or< l1::is_le::value, l2::is_le::value @@ -219,6 +234,7 @@ struct lambda_impl< typedef typename aux::le_result2< typename is_le::type + , Tag , Protect , F , l1, l2 @@ -227,10 +243,12 @@ struct lambda_impl< template< typename F, typename T1, typename T2 + , typename Tag , typename Protect > struct lambda_impl< bind2< F,T1,T2 > + , Tag , Protect, int_<3> > { @@ -244,16 +262,17 @@ struct lambda_impl< template< template< typename P1, typename P2, typename P3 > class F , typename T1, typename T2, typename T3 + , typename Tag > -struct lambda< F,int_<3> > - : lambda_impl< F,true_,int_<3> > +struct lambda< F,Tag,int_<3> > + : lambda_impl< F,Tag,true_,int_<3> > { }; namespace aux { template< - typename IsLE, typename Protect + typename IsLE, typename Tag, typename Protect , template< typename P1, typename P2, typename P3 > class F , typename L1, typename L2, typename L3 > @@ -266,24 +285,26 @@ struct le_result3 template< template< typename P1, typename P2, typename P3 > class F + , typename Tag , typename L1, typename L2, typename L3 > -struct le_result3< true_,false_,F,L1,L2,L3 > +struct le_result3< true_,Tag,false_,F,L1,L2,L3 > { typedef bind3< - quote3 + quote3< F,Tag > , typename L1::type, typename L2::type, typename L3::type > type; }; template< template< typename P1, typename P2, typename P3 > class F + , typename Tag , typename L1, typename L2, typename L3 > -struct le_result3< true_,true_,F,L1,L2,L3 > +struct le_result3< true_,Tag,true_,F,L1,L2,L3 > { typedef protect< bind3< - quote3 + quote3< F,Tag > , typename L1::type, typename L2::type, typename L3::type > > type; }; @@ -293,15 +314,16 @@ struct le_result3< true_,true_,F,L1,L2,L3 > template< template< typename P1, typename P2, typename P3 > class F , typename T1, typename T2, typename T3 + , typename Tag , typename Protect > -struct lambda_impl< - F< T1,T2,T3>,Protect,int_<3 > +struct lambda_impl< + F< T1,T2,T3>,Tag,Protect,int_<3 > > { - typedef lambda_impl l1; - typedef lambda_impl l2; - typedef lambda_impl l3; + typedef lambda_impl< T1,Tag > l1; + typedef lambda_impl< T2,Tag > l2; + typedef lambda_impl< T3,Tag > l3; typedef aux::lambda_or< l1::is_le::value, l2::is_le::value, l3::is_le::value @@ -309,6 +331,7 @@ struct lambda_impl< typedef typename aux::le_result3< typename is_le::type + , Tag , Protect , F , l1, l2, l3 @@ -317,10 +340,12 @@ struct lambda_impl< template< typename F, typename T1, typename T2, typename T3 + , typename Tag , typename Protect > struct lambda_impl< bind3< F,T1,T2,T3 > + , Tag , Protect, int_<4> > { @@ -334,16 +359,17 @@ struct lambda_impl< template< template< typename P1, typename P2, typename P3, typename P4 > class F , typename T1, typename T2, typename T3, typename T4 + , typename Tag > -struct lambda< F,int_<4> > - : lambda_impl< F,true_,int_<4> > +struct lambda< F,Tag,int_<4> > + : lambda_impl< F,Tag,true_,int_<4> > { }; namespace aux { template< - typename IsLE, typename Protect + typename IsLE, typename Tag, typename Protect , template< typename P1, typename P2, typename P3, typename P4 > class F , typename L1, typename L2, typename L3, typename L4 > @@ -357,12 +383,13 @@ struct le_result4 template< template< typename P1, typename P2, typename P3, typename P4 > class F + , typename Tag , typename L1, typename L2, typename L3, typename L4 > -struct le_result4< true_,false_,F,L1,L2,L3,L4 > +struct le_result4< true_,Tag,false_,F,L1,L2,L3,L4 > { typedef bind4< - quote4 + quote4< F,Tag > , typename L1::type, typename L2::type, typename L3::type , typename L4::type > type; @@ -370,12 +397,13 @@ struct le_result4< true_,false_,F,L1,L2,L3,L4 > template< template< typename P1, typename P2, typename P3, typename P4 > class F + , typename Tag , typename L1, typename L2, typename L3, typename L4 > -struct le_result4< true_,true_,F,L1,L2,L3,L4 > +struct le_result4< true_,Tag,true_,F,L1,L2,L3,L4 > { typedef protect< bind4< - quote4 + quote4< F,Tag > , typename L1::type, typename L2::type, typename L3::type , typename L4::type > > type; @@ -386,16 +414,17 @@ struct le_result4< true_,true_,F,L1,L2,L3,L4 > template< template< typename P1, typename P2, typename P3, typename P4 > class F , typename T1, typename T2, typename T3, typename T4 + , typename Tag , typename Protect > -struct lambda_impl< - F< T1,T2,T3,T4>,Protect,int_<4 > +struct lambda_impl< + F< T1,T2,T3,T4>,Tag,Protect,int_<4 > > { - typedef lambda_impl l1; - typedef lambda_impl l2; - typedef lambda_impl l3; - typedef lambda_impl l4; + typedef lambda_impl< T1,Tag > l1; + typedef lambda_impl< T2,Tag > l2; + typedef lambda_impl< T3,Tag > l3; + typedef lambda_impl< T4,Tag > l4; typedef aux::lambda_or< l1::is_le::value, l2::is_le::value, l3::is_le::value @@ -404,6 +433,7 @@ struct lambda_impl< typedef typename aux::le_result4< typename is_le::type + , Tag , Protect , F , l1, l2, l3, l4 @@ -412,10 +442,12 @@ struct lambda_impl< template< typename F, typename T1, typename T2, typename T3, typename T4 + , typename Tag , typename Protect > struct lambda_impl< bind4< F,T1,T2,T3,T4 > + , Tag , Protect, int_<5> > { @@ -433,16 +465,17 @@ template< > class F , typename T1, typename T2, typename T3, typename T4, typename T5 + , typename Tag > -struct lambda< F,int_<5> > - : lambda_impl< F,true_,int_<5> > +struct lambda< F,Tag,int_<5> > + : lambda_impl< F,Tag,true_,int_<5> > { }; namespace aux { template< - typename IsLE, typename Protect + typename IsLE, typename Tag, typename Protect , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F , typename L1, typename L2, typename L3, typename L4, typename L5 > @@ -460,12 +493,13 @@ template< , typename P5 > class F + , typename Tag , typename L1, typename L2, typename L3, typename L4, typename L5 > -struct le_result5< true_,false_,F,L1,L2,L3,L4,L5 > +struct le_result5< true_,Tag,false_,F,L1,L2,L3,L4,L5 > { typedef bind5< - quote5 + quote5< F,Tag > , typename L1::type, typename L2::type, typename L3::type , typename L4::type, typename L5::type > type; @@ -477,12 +511,13 @@ template< , typename P5 > class F + , typename Tag , typename L1, typename L2, typename L3, typename L4, typename L5 > -struct le_result5< true_,true_,F,L1,L2,L3,L4,L5 > +struct le_result5< true_,Tag,true_,F,L1,L2,L3,L4,L5 > { typedef protect< bind5< - quote5 + quote5< F,Tag > , typename L1::type, typename L2::type, typename L3::type , typename L4::type, typename L5::type > > type; @@ -497,17 +532,18 @@ template< > class F , typename T1, typename T2, typename T3, typename T4, typename T5 + , typename Tag , typename Protect > -struct lambda_impl< - F< T1,T2,T3,T4,T5>,Protect,int_<5 > +struct lambda_impl< + F< T1,T2,T3,T4,T5>,Tag,Protect,int_<5 > > { - typedef lambda_impl l1; - typedef lambda_impl l2; - typedef lambda_impl l3; - typedef lambda_impl l4; - typedef lambda_impl l5; + typedef lambda_impl< T1,Tag > l1; + typedef lambda_impl< T2,Tag > l2; + typedef lambda_impl< T3,Tag > l3; + typedef lambda_impl< T4,Tag > l4; + typedef lambda_impl< T5,Tag > l5; typedef aux::lambda_or< l1::is_le::value, l2::is_le::value, l3::is_le::value @@ -516,6 +552,7 @@ struct lambda_impl< typedef typename aux::le_result5< typename is_le::type + , Tag , Protect , F , l1, l2, l3, l4, l5 @@ -525,10 +562,12 @@ struct lambda_impl< template< typename F, typename T1, typename T2, typename T3, typename T4 , typename T5 + , typename Tag , typename Protect > struct lambda_impl< bind5< F,T1,T2,T3,T4,T5 > + , Tag , Protect, int_<6> > { @@ -540,22 +579,25 @@ struct lambda_impl< }; // special case for 'protect' -template< typename T, typename Protect > -struct lambda_impl< protect,Protect,int_<1> > +template< typename T, typename Tag, typename Protect > +struct lambda_impl< protect,Tag,Protect,int_<1> > { typedef false_ is_le; typedef protect type; }; // specializations for main 'bind', 'bind1st' and 'bind2nd' forms + template< typename F, typename T1, typename T2, typename T3, typename T4 , typename T5 + , typename Tag , typename Protect > struct lambda_impl< bind< F,T1,T2,T3,T4,T5 > - , Protect + , Tag + , Protect , int_<6> > { @@ -565,9 +607,10 @@ struct lambda_impl< template< typename F, typename T + , typename Tag , typename Protect > -struct lambda_impl< bind1st,Protect,int_<2> > +struct lambda_impl< bind1st,Tag,Protect,int_<2> > { typedef false_ is_le; typedef bind1st< F,T > type; @@ -575,9 +618,10 @@ struct lambda_impl< bind1st,Protect,int_<2> > template< typename F, typename T + , typename Tag , typename Protect > -struct lambda_impl< bind2nd,Protect,int_<2> > +struct lambda_impl< bind2nd,Tag,Protect,int_<2> > { typedef false_ is_le; typedef bind2nd< F,T > type; diff --git a/include/boost/mpl/aux_/preprocessed/gcc/lambda_no_ctps.hpp b/include/boost/mpl/aux_/preprocessed/gcc/lambda_no_ctps.hpp index 23d1969..5cb1956 100644 --- a/include/boost/mpl/aux_/preprocessed/gcc/lambda_no_ctps.hpp +++ b/include/boost/mpl/aux_/preprocessed/gcc/lambda_no_ctps.hpp @@ -1,4 +1,4 @@ -// preprocessed version of 'boost/mpl/lambda_no_ctps.hpp' header +// preprocessed version of 'boost/mpl/aux_/config/use_preprocessed.hpp' header // see the original for copyright information namespace boost { @@ -8,7 +8,7 @@ namespace aux { template< int arity_, bool Protect > struct lambda_impl { - template< typename T > struct result_ + template< typename T, typename Tag > struct result_ { typedef T type; }; @@ -16,142 +16,184 @@ template< int arity_, bool Protect > struct lambda_impl template<> struct lambda_impl<1, false> { - template< typename F > struct result_ + template< typename F, typename Tag > struct result_ { typedef typename F::rebind f_; + typedef typename lambda< typename F::arg1, Tag, false >::type arg1; typedef bind1< f_ - , typename lambda< typename F::arg1, false >::type + , arg1 > type; }; }; template<> struct lambda_impl<1, true> { - template< typename F > struct result_ + template< typename F, typename Tag > struct result_ { typedef typename F::rebind f_; + typedef typename lambda< typename F::arg1, Tag, false >::type arg1; typedef mpl::protect< bind1< f_ - , typename lambda< typename F::arg1, false >::type + , arg1 > > type; }; }; template<> struct lambda_impl<2, false> { - template< typename F > struct result_ + template< typename F, typename Tag > struct result_ { typedef typename F::rebind f_; + typedef typename lambda< typename F::arg1, Tag, false >::type arg1; + typedef typename lambda< typename F::arg2, Tag, false >::type arg2; + + typedef bind2< f_ - - ,typename lambda< typename F::arg1, false >::type, typename lambda< typename F::arg2, false >::type + , arg1, arg2 > type; }; }; template<> struct lambda_impl<2, true> { - template< typename F > struct result_ + template< typename F, typename Tag > struct result_ { typedef typename F::rebind f_; + typedef typename lambda< typename F::arg1, Tag, false >::type arg1; + typedef typename lambda< typename F::arg2, Tag, false >::type arg2; + + typedef mpl::protect< bind2< f_ - - ,typename lambda< typename F::arg1, false >::type, typename lambda< typename F::arg2, false >::type + , arg1, arg2 > > type; }; }; template<> struct lambda_impl<3, false> { - template< typename F > struct result_ + template< typename F, typename Tag > struct result_ { typedef typename F::rebind f_; + typedef typename lambda< typename F::arg1, Tag, false >::type arg1; + typedef typename lambda< typename F::arg2, Tag, false >::type arg2; + typedef typename lambda< typename F::arg3, Tag, false >::type arg3; + + typedef bind3< f_ - - ,typename lambda< typename F::arg1, false >::type, typename lambda< typename F::arg2, false >::type, typename lambda< typename F::arg3, false >::type + , arg1, arg2, arg3 > type; }; }; template<> struct lambda_impl<3, true> { - template< typename F > struct result_ + template< typename F, typename Tag > struct result_ { typedef typename F::rebind f_; + typedef typename lambda< typename F::arg1, Tag, false >::type arg1; + typedef typename lambda< typename F::arg2, Tag, false >::type arg2; + typedef typename lambda< typename F::arg3, Tag, false >::type arg3; + + typedef mpl::protect< bind3< f_ - - ,typename lambda< typename F::arg1, false >::type, typename lambda< typename F::arg2, false >::type, typename lambda< typename F::arg3, false >::type + , arg1, arg2, arg3 > > type; }; }; template<> struct lambda_impl<4, false> { - template< typename F > struct result_ + template< typename F, typename Tag > struct result_ { typedef typename F::rebind f_; + typedef typename lambda< typename F::arg1, Tag, false >::type arg1; + typedef typename lambda< typename F::arg2, Tag, false >::type arg2; + typedef typename lambda< typename F::arg3, Tag, false >::type arg3; + typedef typename lambda< typename F::arg4, Tag, false >::type arg4; + + typedef bind4< f_ - - ,typename lambda< typename F::arg1, false >::type, typename lambda< typename F::arg2, false >::type, typename lambda< typename F::arg3, false >::type, typename lambda< typename F::arg4, false >::type + , arg1, arg2, arg3, arg4 > type; }; }; template<> struct lambda_impl<4, true> { - template< typename F > struct result_ + template< typename F, typename Tag > struct result_ { typedef typename F::rebind f_; + typedef typename lambda< typename F::arg1, Tag, false >::type arg1; + typedef typename lambda< typename F::arg2, Tag, false >::type arg2; + typedef typename lambda< typename F::arg3, Tag, false >::type arg3; + typedef typename lambda< typename F::arg4, Tag, false >::type arg4; + + typedef mpl::protect< bind4< f_ - - ,typename lambda< typename F::arg1, false >::type, typename lambda< typename F::arg2, false >::type, typename lambda< typename F::arg3, false >::type, typename lambda< typename F::arg4, false >::type + , arg1, arg2, arg3, arg4 > > type; }; }; template<> struct lambda_impl<5, false> { - template< typename F > struct result_ + template< typename F, typename Tag > struct result_ { typedef typename F::rebind f_; + typedef typename lambda< typename F::arg1, Tag, false >::type arg1; + typedef typename lambda< typename F::arg2, Tag, false >::type arg2; + typedef typename lambda< typename F::arg3, Tag, false >::type arg3; + typedef typename lambda< typename F::arg4, Tag, false >::type arg4; + typedef typename lambda< typename F::arg5, Tag, false >::type arg5; + + typedef bind5< f_ - - ,typename lambda< typename F::arg1, false >::type, typename lambda< typename F::arg2, false >::type, typename lambda< typename F::arg3, false >::type, typename lambda< typename F::arg4, false >::type, typename lambda< typename F::arg5, false >::type + , arg1, arg2, arg3, arg4, arg5 > type; }; }; template<> struct lambda_impl<5, true> { - template< typename F > struct result_ + template< typename F, typename Tag > struct result_ { typedef typename F::rebind f_; + typedef typename lambda< typename F::arg1, Tag, false >::type arg1; + typedef typename lambda< typename F::arg2, Tag, false >::type arg2; + typedef typename lambda< typename F::arg3, Tag, false >::type arg3; + typedef typename lambda< typename F::arg4, Tag, false >::type arg4; + typedef typename lambda< typename F::arg5, Tag, false >::type arg5; + + typedef mpl::protect< bind5< f_ - - ,typename lambda< typename F::arg1, false >::type, typename lambda< typename F::arg2, false >::type, typename lambda< typename F::arg3, false >::type, typename lambda< typename F::arg4, false >::type, typename lambda< typename F::arg5, false >::type + , arg1, arg2, arg3, arg4, arg5 > > type; }; }; } // namespace aux -template< typename T, bool Protect = true > +template< + typename T + , typename Tag = void_ + , bool Protect = true + > struct lambda : aux::lambda_impl< ::boost::mpl::aux::template_arity::value , Protect - >::template result_ + >::template result_< T,Tag > { }; diff --git a/include/boost/mpl/aux_/preprocessed/gcc/quote.hpp b/include/boost/mpl/aux_/preprocessed/gcc/quote.hpp index 0a8e644..363c114 100644 --- a/include/boost/mpl/aux_/preprocessed/gcc/quote.hpp +++ b/include/boost/mpl/aux_/preprocessed/gcc/quote.hpp @@ -1,4 +1,4 @@ -// preprocessed version of 'boost/mpl/quote.hpp' header +// preprocessed version of 'boost/mpl/aux_/config/use_preprocessed.hpp' header // see the original for copyright information namespace boost { @@ -19,6 +19,7 @@ struct quote_impl< T,false > template< template< typename P1 > class F + , typename Tag = void_ > struct quote1 { @@ -32,6 +33,7 @@ struct quote1 template< template< typename P1, typename P2 > class F + , typename Tag = void_ > struct quote2 { @@ -45,6 +47,7 @@ struct quote2 template< template< typename P1, typename P2, typename P3 > class F + , typename Tag = void_ > struct quote3 { @@ -58,6 +61,7 @@ struct quote3 template< template< typename P1, typename P2, typename P3, typename P4 > class F + , typename Tag = void_ > struct quote4 { @@ -78,6 +82,7 @@ template< , typename P5 > class F + , typename Tag = void_ > struct quote5 { diff --git a/include/boost/mpl/aux_/preprocessed/msvc60/full_lambda.hpp b/include/boost/mpl/aux_/preprocessed/msvc60/full_lambda.hpp index 4eae84d..e46ce7a 100644 --- a/include/boost/mpl/aux_/preprocessed/msvc60/full_lambda.hpp +++ b/include/boost/mpl/aux_/preprocessed/msvc60/full_lambda.hpp @@ -1,4 +1,4 @@ -// preprocessed version of 'boost/mpl/aux_/full_lambda.hpp' header +// preprocessed version of 'boost/mpl/aux_/lambda_expr.hpp' header // see the original for copyright information namespace boost { @@ -6,8 +6,9 @@ namespace mpl { template< typename T + , typename Tag , typename Protect = false_ - + > struct lambda_impl { @@ -17,10 +18,11 @@ struct lambda_impl template< typename T - + , typename Tag = void_ + > struct lambda - : lambda_impl< T,false_ > + : lambda_impl< T,Tag,false_ > { }; @@ -43,8 +45,8 @@ struct lambda_or< false,false,false,false,false > } // namespace aux -template< int N, typename Protect > -struct lambda_impl< arg,Protect > +template< int N, typename Tag, typename Protect > +struct lambda_impl< arg,Tag,Protect > { typedef true_ is_le; typedef arg type; @@ -52,11 +54,13 @@ struct lambda_impl< arg,Protect > template< typename F + , typename Tag , typename Protect > struct lambda_impl< bind0 - , Protect + , Tag + , Protect > { typedef false_ is_le; @@ -68,16 +72,17 @@ struct lambda_impl< template< template< typename P1 > class F , typename T1 + , typename Tag > -struct lambda< F > - : lambda_impl< F,true_ > +struct lambda< F,Tag > + : lambda_impl< F,Tag,true_ > { }; namespace aux { template< - typename IsLE, typename Protect + typename IsLE, typename Tag, typename Protect , template< typename P1 > class F , typename L1 > @@ -90,24 +95,26 @@ struct le_result1 template< template< typename P1 > class F + , typename Tag , typename L1 > -struct le_result1< true_,false_,F,L1 > +struct le_result1< true_,Tag,false_,F,L1 > { typedef bind1< - quote1 + quote1< F,Tag > , typename L1::type > type; }; template< template< typename P1 > class F + , typename Tag , typename L1 > -struct le_result1< true_,true_,F,L1 > +struct le_result1< true_,Tag,true_,F,L1 > { typedef protect< bind1< - quote1 + quote1< F,Tag > , typename L1::type > > type; }; @@ -117,19 +124,21 @@ struct le_result1< true_,true_,F,L1 > template< template< typename P1 > class F , typename T1 + , typename Tag , typename Protect > -struct lambda_impl< - F, Protect +struct lambda_impl< + F, Tag, Protect > { - typedef lambda_impl l1; + typedef lambda_impl< T1,Tag > l1; typedef aux::lambda_or< l1::is_le::value > is_le; typedef typename aux::le_result1< typename is_le::type + , Tag , Protect , F , l1 @@ -138,11 +147,13 @@ struct lambda_impl< template< typename F, typename T1 + , typename Tag , typename Protect > struct lambda_impl< bind1< F,T1 > - , Protect + , Tag + , Protect > { typedef false_ is_le; @@ -155,16 +166,17 @@ struct lambda_impl< template< template< typename P1, typename P2 > class F , typename T1, typename T2 + , typename Tag > -struct lambda< F > - : lambda_impl< F,true_ > +struct lambda< F,Tag > + : lambda_impl< F,Tag,true_ > { }; namespace aux { template< - typename IsLE, typename Protect + typename IsLE, typename Tag, typename Protect , template< typename P1, typename P2 > class F , typename L1, typename L2 > @@ -177,24 +189,26 @@ struct le_result2 template< template< typename P1, typename P2 > class F + , typename Tag , typename L1, typename L2 > -struct le_result2< true_,false_,F,L1,L2 > +struct le_result2< true_,Tag,false_,F,L1,L2 > { typedef bind2< - quote2 + quote2< F,Tag > , typename L1::type, typename L2::type > type; }; template< template< typename P1, typename P2 > class F + , typename Tag , typename L1, typename L2 > -struct le_result2< true_,true_,F,L1,L2 > +struct le_result2< true_,Tag,true_,F,L1,L2 > { typedef protect< bind2< - quote2 + quote2< F,Tag > , typename L1::type, typename L2::type > > type; }; @@ -204,14 +218,15 @@ struct le_result2< true_,true_,F,L1,L2 > template< template< typename P1, typename P2 > class F , typename T1, typename T2 + , typename Tag , typename Protect > -struct lambda_impl< - F< T1,T2 >, Protect +struct lambda_impl< + F< T1,T2 >, Tag, Protect > { - typedef lambda_impl l1; - typedef lambda_impl l2; + typedef lambda_impl< T1,Tag > l1; + typedef lambda_impl< T2,Tag > l2; typedef aux::lambda_or< l1::is_le::value, l2::is_le::value @@ -219,6 +234,7 @@ struct lambda_impl< typedef typename aux::le_result2< typename is_le::type + , Tag , Protect , F , l1, l2 @@ -227,11 +243,13 @@ struct lambda_impl< template< typename F, typename T1, typename T2 + , typename Tag , typename Protect > struct lambda_impl< bind2< F,T1,T2 > - , Protect + , Tag + , Protect > { typedef false_ is_le; @@ -244,16 +262,17 @@ struct lambda_impl< template< template< typename P1, typename P2, typename P3 > class F , typename T1, typename T2, typename T3 + , typename Tag > -struct lambda< F > - : lambda_impl< F,true_ > +struct lambda< F,Tag > + : lambda_impl< F,Tag,true_ > { }; namespace aux { template< - typename IsLE, typename Protect + typename IsLE, typename Tag, typename Protect , template< typename P1, typename P2, typename P3 > class F , typename L1, typename L2, typename L3 > @@ -266,24 +285,26 @@ struct le_result3 template< template< typename P1, typename P2, typename P3 > class F + , typename Tag , typename L1, typename L2, typename L3 > -struct le_result3< true_,false_,F,L1,L2,L3 > +struct le_result3< true_,Tag,false_,F,L1,L2,L3 > { typedef bind3< - quote3 + quote3< F,Tag > , typename L1::type, typename L2::type, typename L3::type > type; }; template< template< typename P1, typename P2, typename P3 > class F + , typename Tag , typename L1, typename L2, typename L3 > -struct le_result3< true_,true_,F,L1,L2,L3 > +struct le_result3< true_,Tag,true_,F,L1,L2,L3 > { typedef protect< bind3< - quote3 + quote3< F,Tag > , typename L1::type, typename L2::type, typename L3::type > > type; }; @@ -293,15 +314,16 @@ struct le_result3< true_,true_,F,L1,L2,L3 > template< template< typename P1, typename P2, typename P3 > class F , typename T1, typename T2, typename T3 + , typename Tag , typename Protect > -struct lambda_impl< - F< T1,T2,T3 >, Protect +struct lambda_impl< + F< T1,T2,T3 >, Tag, Protect > { - typedef lambda_impl l1; - typedef lambda_impl l2; - typedef lambda_impl l3; + typedef lambda_impl< T1,Tag > l1; + typedef lambda_impl< T2,Tag > l2; + typedef lambda_impl< T3,Tag > l3; typedef aux::lambda_or< l1::is_le::value, l2::is_le::value, l3::is_le::value @@ -309,6 +331,7 @@ struct lambda_impl< typedef typename aux::le_result3< typename is_le::type + , Tag , Protect , F , l1, l2, l3 @@ -317,11 +340,13 @@ struct lambda_impl< template< typename F, typename T1, typename T2, typename T3 + , typename Tag , typename Protect > struct lambda_impl< bind3< F,T1,T2,T3 > - , Protect + , Tag + , Protect > { typedef false_ is_le; @@ -334,16 +359,17 @@ struct lambda_impl< template< template< typename P1, typename P2, typename P3, typename P4 > class F , typename T1, typename T2, typename T3, typename T4 + , typename Tag > -struct lambda< F > - : lambda_impl< F,true_ > +struct lambda< F,Tag > + : lambda_impl< F,Tag,true_ > { }; namespace aux { template< - typename IsLE, typename Protect + typename IsLE, typename Tag, typename Protect , template< typename P1, typename P2, typename P3, typename P4 > class F , typename L1, typename L2, typename L3, typename L4 > @@ -357,12 +383,13 @@ struct le_result4 template< template< typename P1, typename P2, typename P3, typename P4 > class F + , typename Tag , typename L1, typename L2, typename L3, typename L4 > -struct le_result4< true_,false_,F,L1,L2,L3,L4 > +struct le_result4< true_,Tag,false_,F,L1,L2,L3,L4 > { typedef bind4< - quote4 + quote4< F,Tag > , typename L1::type, typename L2::type, typename L3::type , typename L4::type > type; @@ -370,12 +397,13 @@ struct le_result4< true_,false_,F,L1,L2,L3,L4 > template< template< typename P1, typename P2, typename P3, typename P4 > class F + , typename Tag , typename L1, typename L2, typename L3, typename L4 > -struct le_result4< true_,true_,F,L1,L2,L3,L4 > +struct le_result4< true_,Tag,true_,F,L1,L2,L3,L4 > { typedef protect< bind4< - quote4 + quote4< F,Tag > , typename L1::type, typename L2::type, typename L3::type , typename L4::type > > type; @@ -386,16 +414,17 @@ struct le_result4< true_,true_,F,L1,L2,L3,L4 > template< template< typename P1, typename P2, typename P3, typename P4 > class F , typename T1, typename T2, typename T3, typename T4 + , typename Tag , typename Protect > -struct lambda_impl< - F< T1,T2,T3,T4 >, Protect +struct lambda_impl< + F< T1,T2,T3,T4 >, Tag, Protect > { - typedef lambda_impl l1; - typedef lambda_impl l2; - typedef lambda_impl l3; - typedef lambda_impl l4; + typedef lambda_impl< T1,Tag > l1; + typedef lambda_impl< T2,Tag > l2; + typedef lambda_impl< T3,Tag > l3; + typedef lambda_impl< T4,Tag > l4; typedef aux::lambda_or< l1::is_le::value, l2::is_le::value, l3::is_le::value @@ -404,6 +433,7 @@ struct lambda_impl< typedef typename aux::le_result4< typename is_le::type + , Tag , Protect , F , l1, l2, l3, l4 @@ -412,11 +442,13 @@ struct lambda_impl< template< typename F, typename T1, typename T2, typename T3, typename T4 + , typename Tag , typename Protect > struct lambda_impl< bind4< F,T1,T2,T3,T4 > - , Protect + , Tag + , Protect > { typedef false_ is_le; @@ -433,16 +465,17 @@ template< > class F , typename T1, typename T2, typename T3, typename T4, typename T5 + , typename Tag > -struct lambda< F > - : lambda_impl< F,true_ > +struct lambda< F,Tag > + : lambda_impl< F,Tag,true_ > { }; namespace aux { template< - typename IsLE, typename Protect + typename IsLE, typename Tag, typename Protect , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F , typename L1, typename L2, typename L3, typename L4, typename L5 > @@ -460,12 +493,13 @@ template< , typename P5 > class F + , typename Tag , typename L1, typename L2, typename L3, typename L4, typename L5 > -struct le_result5< true_,false_,F,L1,L2,L3,L4,L5 > +struct le_result5< true_,Tag,false_,F,L1,L2,L3,L4,L5 > { typedef bind5< - quote5 + quote5< F,Tag > , typename L1::type, typename L2::type, typename L3::type , typename L4::type, typename L5::type > type; @@ -477,12 +511,13 @@ template< , typename P5 > class F + , typename Tag , typename L1, typename L2, typename L3, typename L4, typename L5 > -struct le_result5< true_,true_,F,L1,L2,L3,L4,L5 > +struct le_result5< true_,Tag,true_,F,L1,L2,L3,L4,L5 > { typedef protect< bind5< - quote5 + quote5< F,Tag > , typename L1::type, typename L2::type, typename L3::type , typename L4::type, typename L5::type > > type; @@ -497,17 +532,18 @@ template< > class F , typename T1, typename T2, typename T3, typename T4, typename T5 + , typename Tag , typename Protect > -struct lambda_impl< - F< T1,T2,T3,T4,T5 >, Protect +struct lambda_impl< + F< T1,T2,T3,T4,T5 >, Tag, Protect > { - typedef lambda_impl l1; - typedef lambda_impl l2; - typedef lambda_impl l3; - typedef lambda_impl l4; - typedef lambda_impl l5; + typedef lambda_impl< T1,Tag > l1; + typedef lambda_impl< T2,Tag > l2; + typedef lambda_impl< T3,Tag > l3; + typedef lambda_impl< T4,Tag > l4; + typedef lambda_impl< T5,Tag > l5; typedef aux::lambda_or< l1::is_le::value, l2::is_le::value, l3::is_le::value @@ -516,6 +552,7 @@ struct lambda_impl< typedef typename aux::le_result5< typename is_le::type + , Tag , Protect , F , l1, l2, l3, l4, l5 @@ -525,11 +562,13 @@ struct lambda_impl< template< typename F, typename T1, typename T2, typename T3, typename T4 , typename T5 + , typename Tag , typename Protect > struct lambda_impl< bind5< F,T1,T2,T3,T4,T5 > - , Protect + , Tag + , Protect > { typedef false_ is_le; @@ -540,23 +579,26 @@ struct lambda_impl< }; // special case for 'protect' -template< typename T, typename Protect > -struct lambda_impl< protect,Protect > +template< typename T, typename Tag, typename Protect > +struct lambda_impl< protect,Tag,Protect > { typedef false_ is_le; typedef protect type; }; // specializations for main 'bind', 'bind1st' and 'bind2nd' forms + template< typename F, typename T1, typename T2, typename T3, typename T4 , typename T5 + , typename Tag , typename Protect > struct lambda_impl< bind< F,T1,T2,T3,T4,T5 > - , Protect - + , Tag + , Protect + > { typedef false_ is_le; @@ -565,9 +607,10 @@ struct lambda_impl< template< typename F, typename T + , typename Tag , typename Protect > -struct lambda_impl< bind1st,Protect > +struct lambda_impl< bind1st,Tag,Protect > { typedef false_ is_le; typedef bind1st< F,T > type; @@ -575,9 +618,10 @@ struct lambda_impl< bind1st,Protect > template< typename F, typename T + , typename Tag , typename Protect > -struct lambda_impl< bind2nd,Protect > +struct lambda_impl< bind2nd,Tag,Protect > { typedef false_ is_le; typedef bind2nd< F,T > type; diff --git a/include/boost/mpl/aux_/preprocessed/msvc60/lambda_no_ctps.hpp b/include/boost/mpl/aux_/preprocessed/msvc60/lambda_no_ctps.hpp index 423094b..4d1d460 100644 --- a/include/boost/mpl/aux_/preprocessed/msvc60/lambda_no_ctps.hpp +++ b/include/boost/mpl/aux_/preprocessed/msvc60/lambda_no_ctps.hpp @@ -1,4 +1,4 @@ -// preprocessed version of 'boost/mpl/lambda_no_ctps.hpp' header +// preprocessed version of 'boost/mpl/aux_/config/use_preprocessed.hpp' header // see the original for copyright information namespace boost { @@ -8,7 +8,7 @@ namespace aux { template< nttp_int arity_, bool Protect > struct lambda_impl { - template< typename T > struct result_ + template< typename T, typename Tag > struct result_ { typedef T type; }; @@ -16,142 +16,184 @@ template< nttp_int arity_, bool Protect > struct lambda_impl template<> struct lambda_impl<1, false> { - template< typename F > struct result_ + template< typename F, typename Tag > struct result_ { typedef typename F::rebind f_; + typedef typename lambda< typename F::arg1, Tag, false >::type arg1; typedef bind1< f_ - , typename lambda< typename F::arg1, false >::type + , arg1 > type; }; }; template<> struct lambda_impl<1, true> { - template< typename F > struct result_ + template< typename F, typename Tag > struct result_ { typedef typename F::rebind f_; + typedef typename lambda< typename F::arg1, Tag, false >::type arg1; typedef mpl::protect< bind1< f_ - , typename lambda< typename F::arg1, false >::type + , arg1 > > type; }; }; template<> struct lambda_impl<2, false> { - template< typename F > struct result_ + template< typename F, typename Tag > struct result_ { typedef typename F::rebind f_; + typedef typename lambda< typename F::arg1, Tag, false >::type arg1; + typedef typename lambda< typename F::arg2, Tag, false >::type arg2; + + typedef bind2< f_ - - ,typename lambda< typename F::arg1, false >::type, typename lambda< typename F::arg2, false >::type + , arg1, arg2 > type; }; }; template<> struct lambda_impl<2, true> { - template< typename F > struct result_ + template< typename F, typename Tag > struct result_ { typedef typename F::rebind f_; + typedef typename lambda< typename F::arg1, Tag, false >::type arg1; + typedef typename lambda< typename F::arg2, Tag, false >::type arg2; + + typedef mpl::protect< bind2< f_ - - ,typename lambda< typename F::arg1, false >::type, typename lambda< typename F::arg2, false >::type + , arg1, arg2 > > type; }; }; template<> struct lambda_impl<3, false> { - template< typename F > struct result_ + template< typename F, typename Tag > struct result_ { typedef typename F::rebind f_; + typedef typename lambda< typename F::arg1, Tag, false >::type arg1; + typedef typename lambda< typename F::arg2, Tag, false >::type arg2; + typedef typename lambda< typename F::arg3, Tag, false >::type arg3; + + typedef bind3< f_ - - ,typename lambda< typename F::arg1, false >::type, typename lambda< typename F::arg2, false >::type, typename lambda< typename F::arg3, false >::type + , arg1, arg2, arg3 > type; }; }; template<> struct lambda_impl<3, true> { - template< typename F > struct result_ + template< typename F, typename Tag > struct result_ { typedef typename F::rebind f_; + typedef typename lambda< typename F::arg1, Tag, false >::type arg1; + typedef typename lambda< typename F::arg2, Tag, false >::type arg2; + typedef typename lambda< typename F::arg3, Tag, false >::type arg3; + + typedef mpl::protect< bind3< f_ - - ,typename lambda< typename F::arg1, false >::type, typename lambda< typename F::arg2, false >::type, typename lambda< typename F::arg3, false >::type + , arg1, arg2, arg3 > > type; }; }; template<> struct lambda_impl<4, false> { - template< typename F > struct result_ + template< typename F, typename Tag > struct result_ { typedef typename F::rebind f_; + typedef typename lambda< typename F::arg1, Tag, false >::type arg1; + typedef typename lambda< typename F::arg2, Tag, false >::type arg2; + typedef typename lambda< typename F::arg3, Tag, false >::type arg3; + typedef typename lambda< typename F::arg4, Tag, false >::type arg4; + + typedef bind4< f_ - - ,typename lambda< typename F::arg1, false >::type, typename lambda< typename F::arg2, false >::type, typename lambda< typename F::arg3, false >::type, typename lambda< typename F::arg4, false >::type + , arg1, arg2, arg3, arg4 > type; }; }; template<> struct lambda_impl<4, true> { - template< typename F > struct result_ + template< typename F, typename Tag > struct result_ { typedef typename F::rebind f_; + typedef typename lambda< typename F::arg1, Tag, false >::type arg1; + typedef typename lambda< typename F::arg2, Tag, false >::type arg2; + typedef typename lambda< typename F::arg3, Tag, false >::type arg3; + typedef typename lambda< typename F::arg4, Tag, false >::type arg4; + + typedef mpl::protect< bind4< f_ - - ,typename lambda< typename F::arg1, false >::type, typename lambda< typename F::arg2, false >::type, typename lambda< typename F::arg3, false >::type, typename lambda< typename F::arg4, false >::type + , arg1, arg2, arg3, arg4 > > type; }; }; template<> struct lambda_impl<5, false> { - template< typename F > struct result_ + template< typename F, typename Tag > struct result_ { typedef typename F::rebind f_; + typedef typename lambda< typename F::arg1, Tag, false >::type arg1; + typedef typename lambda< typename F::arg2, Tag, false >::type arg2; + typedef typename lambda< typename F::arg3, Tag, false >::type arg3; + typedef typename lambda< typename F::arg4, Tag, false >::type arg4; + typedef typename lambda< typename F::arg5, Tag, false >::type arg5; + + typedef bind5< f_ - - ,typename lambda< typename F::arg1, false >::type, typename lambda< typename F::arg2, false >::type, typename lambda< typename F::arg3, false >::type, typename lambda< typename F::arg4, false >::type, typename lambda< typename F::arg5, false >::type + , arg1, arg2, arg3, arg4, arg5 > type; }; }; template<> struct lambda_impl<5, true> { - template< typename F > struct result_ + template< typename F, typename Tag > struct result_ { typedef typename F::rebind f_; + typedef typename lambda< typename F::arg1, Tag, false >::type arg1; + typedef typename lambda< typename F::arg2, Tag, false >::type arg2; + typedef typename lambda< typename F::arg3, Tag, false >::type arg3; + typedef typename lambda< typename F::arg4, Tag, false >::type arg4; + typedef typename lambda< typename F::arg5, Tag, false >::type arg5; + + typedef mpl::protect< bind5< f_ - - ,typename lambda< typename F::arg1, false >::type, typename lambda< typename F::arg2, false >::type, typename lambda< typename F::arg3, false >::type, typename lambda< typename F::arg4, false >::type, typename lambda< typename F::arg5, false >::type + , arg1, arg2, arg3, arg4, arg5 > > type; }; }; } // namespace aux -template< typename T, bool Protect = true > +template< + typename T + , typename Tag = void_ + , bool Protect = true + > struct lambda : aux::lambda_impl< ::boost::mpl::aux::template_arity::value , bool_::value - >::template result_ + >::template result_< T,Tag > { }; diff --git a/include/boost/mpl/aux_/preprocessed/msvc60/quote.hpp b/include/boost/mpl/aux_/preprocessed/msvc60/quote.hpp index 902c44e..ff98b23 100644 --- a/include/boost/mpl/aux_/preprocessed/msvc60/quote.hpp +++ b/include/boost/mpl/aux_/preprocessed/msvc60/quote.hpp @@ -1,3 +1,3 @@ -// preprocessed version of 'boost/mpl/quote.hpp' header +// preprocessed version of 'boost/mpl/aux_/config/use_preprocessed.hpp' header // see the original for copyright information diff --git a/include/boost/mpl/aux_/preprocessed/msvc70/full_lambda.hpp b/include/boost/mpl/aux_/preprocessed/msvc70/full_lambda.hpp index 4eae84d..e46ce7a 100644 --- a/include/boost/mpl/aux_/preprocessed/msvc70/full_lambda.hpp +++ b/include/boost/mpl/aux_/preprocessed/msvc70/full_lambda.hpp @@ -1,4 +1,4 @@ -// preprocessed version of 'boost/mpl/aux_/full_lambda.hpp' header +// preprocessed version of 'boost/mpl/aux_/lambda_expr.hpp' header // see the original for copyright information namespace boost { @@ -6,8 +6,9 @@ namespace mpl { template< typename T + , typename Tag , typename Protect = false_ - + > struct lambda_impl { @@ -17,10 +18,11 @@ struct lambda_impl template< typename T - + , typename Tag = void_ + > struct lambda - : lambda_impl< T,false_ > + : lambda_impl< T,Tag,false_ > { }; @@ -43,8 +45,8 @@ struct lambda_or< false,false,false,false,false > } // namespace aux -template< int N, typename Protect > -struct lambda_impl< arg,Protect > +template< int N, typename Tag, typename Protect > +struct lambda_impl< arg,Tag,Protect > { typedef true_ is_le; typedef arg type; @@ -52,11 +54,13 @@ struct lambda_impl< arg,Protect > template< typename F + , typename Tag , typename Protect > struct lambda_impl< bind0 - , Protect + , Tag + , Protect > { typedef false_ is_le; @@ -68,16 +72,17 @@ struct lambda_impl< template< template< typename P1 > class F , typename T1 + , typename Tag > -struct lambda< F > - : lambda_impl< F,true_ > +struct lambda< F,Tag > + : lambda_impl< F,Tag,true_ > { }; namespace aux { template< - typename IsLE, typename Protect + typename IsLE, typename Tag, typename Protect , template< typename P1 > class F , typename L1 > @@ -90,24 +95,26 @@ struct le_result1 template< template< typename P1 > class F + , typename Tag , typename L1 > -struct le_result1< true_,false_,F,L1 > +struct le_result1< true_,Tag,false_,F,L1 > { typedef bind1< - quote1 + quote1< F,Tag > , typename L1::type > type; }; template< template< typename P1 > class F + , typename Tag , typename L1 > -struct le_result1< true_,true_,F,L1 > +struct le_result1< true_,Tag,true_,F,L1 > { typedef protect< bind1< - quote1 + quote1< F,Tag > , typename L1::type > > type; }; @@ -117,19 +124,21 @@ struct le_result1< true_,true_,F,L1 > template< template< typename P1 > class F , typename T1 + , typename Tag , typename Protect > -struct lambda_impl< - F, Protect +struct lambda_impl< + F, Tag, Protect > { - typedef lambda_impl l1; + typedef lambda_impl< T1,Tag > l1; typedef aux::lambda_or< l1::is_le::value > is_le; typedef typename aux::le_result1< typename is_le::type + , Tag , Protect , F , l1 @@ -138,11 +147,13 @@ struct lambda_impl< template< typename F, typename T1 + , typename Tag , typename Protect > struct lambda_impl< bind1< F,T1 > - , Protect + , Tag + , Protect > { typedef false_ is_le; @@ -155,16 +166,17 @@ struct lambda_impl< template< template< typename P1, typename P2 > class F , typename T1, typename T2 + , typename Tag > -struct lambda< F > - : lambda_impl< F,true_ > +struct lambda< F,Tag > + : lambda_impl< F,Tag,true_ > { }; namespace aux { template< - typename IsLE, typename Protect + typename IsLE, typename Tag, typename Protect , template< typename P1, typename P2 > class F , typename L1, typename L2 > @@ -177,24 +189,26 @@ struct le_result2 template< template< typename P1, typename P2 > class F + , typename Tag , typename L1, typename L2 > -struct le_result2< true_,false_,F,L1,L2 > +struct le_result2< true_,Tag,false_,F,L1,L2 > { typedef bind2< - quote2 + quote2< F,Tag > , typename L1::type, typename L2::type > type; }; template< template< typename P1, typename P2 > class F + , typename Tag , typename L1, typename L2 > -struct le_result2< true_,true_,F,L1,L2 > +struct le_result2< true_,Tag,true_,F,L1,L2 > { typedef protect< bind2< - quote2 + quote2< F,Tag > , typename L1::type, typename L2::type > > type; }; @@ -204,14 +218,15 @@ struct le_result2< true_,true_,F,L1,L2 > template< template< typename P1, typename P2 > class F , typename T1, typename T2 + , typename Tag , typename Protect > -struct lambda_impl< - F< T1,T2 >, Protect +struct lambda_impl< + F< T1,T2 >, Tag, Protect > { - typedef lambda_impl l1; - typedef lambda_impl l2; + typedef lambda_impl< T1,Tag > l1; + typedef lambda_impl< T2,Tag > l2; typedef aux::lambda_or< l1::is_le::value, l2::is_le::value @@ -219,6 +234,7 @@ struct lambda_impl< typedef typename aux::le_result2< typename is_le::type + , Tag , Protect , F , l1, l2 @@ -227,11 +243,13 @@ struct lambda_impl< template< typename F, typename T1, typename T2 + , typename Tag , typename Protect > struct lambda_impl< bind2< F,T1,T2 > - , Protect + , Tag + , Protect > { typedef false_ is_le; @@ -244,16 +262,17 @@ struct lambda_impl< template< template< typename P1, typename P2, typename P3 > class F , typename T1, typename T2, typename T3 + , typename Tag > -struct lambda< F > - : lambda_impl< F,true_ > +struct lambda< F,Tag > + : lambda_impl< F,Tag,true_ > { }; namespace aux { template< - typename IsLE, typename Protect + typename IsLE, typename Tag, typename Protect , template< typename P1, typename P2, typename P3 > class F , typename L1, typename L2, typename L3 > @@ -266,24 +285,26 @@ struct le_result3 template< template< typename P1, typename P2, typename P3 > class F + , typename Tag , typename L1, typename L2, typename L3 > -struct le_result3< true_,false_,F,L1,L2,L3 > +struct le_result3< true_,Tag,false_,F,L1,L2,L3 > { typedef bind3< - quote3 + quote3< F,Tag > , typename L1::type, typename L2::type, typename L3::type > type; }; template< template< typename P1, typename P2, typename P3 > class F + , typename Tag , typename L1, typename L2, typename L3 > -struct le_result3< true_,true_,F,L1,L2,L3 > +struct le_result3< true_,Tag,true_,F,L1,L2,L3 > { typedef protect< bind3< - quote3 + quote3< F,Tag > , typename L1::type, typename L2::type, typename L3::type > > type; }; @@ -293,15 +314,16 @@ struct le_result3< true_,true_,F,L1,L2,L3 > template< template< typename P1, typename P2, typename P3 > class F , typename T1, typename T2, typename T3 + , typename Tag , typename Protect > -struct lambda_impl< - F< T1,T2,T3 >, Protect +struct lambda_impl< + F< T1,T2,T3 >, Tag, Protect > { - typedef lambda_impl l1; - typedef lambda_impl l2; - typedef lambda_impl l3; + typedef lambda_impl< T1,Tag > l1; + typedef lambda_impl< T2,Tag > l2; + typedef lambda_impl< T3,Tag > l3; typedef aux::lambda_or< l1::is_le::value, l2::is_le::value, l3::is_le::value @@ -309,6 +331,7 @@ struct lambda_impl< typedef typename aux::le_result3< typename is_le::type + , Tag , Protect , F , l1, l2, l3 @@ -317,11 +340,13 @@ struct lambda_impl< template< typename F, typename T1, typename T2, typename T3 + , typename Tag , typename Protect > struct lambda_impl< bind3< F,T1,T2,T3 > - , Protect + , Tag + , Protect > { typedef false_ is_le; @@ -334,16 +359,17 @@ struct lambda_impl< template< template< typename P1, typename P2, typename P3, typename P4 > class F , typename T1, typename T2, typename T3, typename T4 + , typename Tag > -struct lambda< F > - : lambda_impl< F,true_ > +struct lambda< F,Tag > + : lambda_impl< F,Tag,true_ > { }; namespace aux { template< - typename IsLE, typename Protect + typename IsLE, typename Tag, typename Protect , template< typename P1, typename P2, typename P3, typename P4 > class F , typename L1, typename L2, typename L3, typename L4 > @@ -357,12 +383,13 @@ struct le_result4 template< template< typename P1, typename P2, typename P3, typename P4 > class F + , typename Tag , typename L1, typename L2, typename L3, typename L4 > -struct le_result4< true_,false_,F,L1,L2,L3,L4 > +struct le_result4< true_,Tag,false_,F,L1,L2,L3,L4 > { typedef bind4< - quote4 + quote4< F,Tag > , typename L1::type, typename L2::type, typename L3::type , typename L4::type > type; @@ -370,12 +397,13 @@ struct le_result4< true_,false_,F,L1,L2,L3,L4 > template< template< typename P1, typename P2, typename P3, typename P4 > class F + , typename Tag , typename L1, typename L2, typename L3, typename L4 > -struct le_result4< true_,true_,F,L1,L2,L3,L4 > +struct le_result4< true_,Tag,true_,F,L1,L2,L3,L4 > { typedef protect< bind4< - quote4 + quote4< F,Tag > , typename L1::type, typename L2::type, typename L3::type , typename L4::type > > type; @@ -386,16 +414,17 @@ struct le_result4< true_,true_,F,L1,L2,L3,L4 > template< template< typename P1, typename P2, typename P3, typename P4 > class F , typename T1, typename T2, typename T3, typename T4 + , typename Tag , typename Protect > -struct lambda_impl< - F< T1,T2,T3,T4 >, Protect +struct lambda_impl< + F< T1,T2,T3,T4 >, Tag, Protect > { - typedef lambda_impl l1; - typedef lambda_impl l2; - typedef lambda_impl l3; - typedef lambda_impl l4; + typedef lambda_impl< T1,Tag > l1; + typedef lambda_impl< T2,Tag > l2; + typedef lambda_impl< T3,Tag > l3; + typedef lambda_impl< T4,Tag > l4; typedef aux::lambda_or< l1::is_le::value, l2::is_le::value, l3::is_le::value @@ -404,6 +433,7 @@ struct lambda_impl< typedef typename aux::le_result4< typename is_le::type + , Tag , Protect , F , l1, l2, l3, l4 @@ -412,11 +442,13 @@ struct lambda_impl< template< typename F, typename T1, typename T2, typename T3, typename T4 + , typename Tag , typename Protect > struct lambda_impl< bind4< F,T1,T2,T3,T4 > - , Protect + , Tag + , Protect > { typedef false_ is_le; @@ -433,16 +465,17 @@ template< > class F , typename T1, typename T2, typename T3, typename T4, typename T5 + , typename Tag > -struct lambda< F > - : lambda_impl< F,true_ > +struct lambda< F,Tag > + : lambda_impl< F,Tag,true_ > { }; namespace aux { template< - typename IsLE, typename Protect + typename IsLE, typename Tag, typename Protect , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F , typename L1, typename L2, typename L3, typename L4, typename L5 > @@ -460,12 +493,13 @@ template< , typename P5 > class F + , typename Tag , typename L1, typename L2, typename L3, typename L4, typename L5 > -struct le_result5< true_,false_,F,L1,L2,L3,L4,L5 > +struct le_result5< true_,Tag,false_,F,L1,L2,L3,L4,L5 > { typedef bind5< - quote5 + quote5< F,Tag > , typename L1::type, typename L2::type, typename L3::type , typename L4::type, typename L5::type > type; @@ -477,12 +511,13 @@ template< , typename P5 > class F + , typename Tag , typename L1, typename L2, typename L3, typename L4, typename L5 > -struct le_result5< true_,true_,F,L1,L2,L3,L4,L5 > +struct le_result5< true_,Tag,true_,F,L1,L2,L3,L4,L5 > { typedef protect< bind5< - quote5 + quote5< F,Tag > , typename L1::type, typename L2::type, typename L3::type , typename L4::type, typename L5::type > > type; @@ -497,17 +532,18 @@ template< > class F , typename T1, typename T2, typename T3, typename T4, typename T5 + , typename Tag , typename Protect > -struct lambda_impl< - F< T1,T2,T3,T4,T5 >, Protect +struct lambda_impl< + F< T1,T2,T3,T4,T5 >, Tag, Protect > { - typedef lambda_impl l1; - typedef lambda_impl l2; - typedef lambda_impl l3; - typedef lambda_impl l4; - typedef lambda_impl l5; + typedef lambda_impl< T1,Tag > l1; + typedef lambda_impl< T2,Tag > l2; + typedef lambda_impl< T3,Tag > l3; + typedef lambda_impl< T4,Tag > l4; + typedef lambda_impl< T5,Tag > l5; typedef aux::lambda_or< l1::is_le::value, l2::is_le::value, l3::is_le::value @@ -516,6 +552,7 @@ struct lambda_impl< typedef typename aux::le_result5< typename is_le::type + , Tag , Protect , F , l1, l2, l3, l4, l5 @@ -525,11 +562,13 @@ struct lambda_impl< template< typename F, typename T1, typename T2, typename T3, typename T4 , typename T5 + , typename Tag , typename Protect > struct lambda_impl< bind5< F,T1,T2,T3,T4,T5 > - , Protect + , Tag + , Protect > { typedef false_ is_le; @@ -540,23 +579,26 @@ struct lambda_impl< }; // special case for 'protect' -template< typename T, typename Protect > -struct lambda_impl< protect,Protect > +template< typename T, typename Tag, typename Protect > +struct lambda_impl< protect,Tag,Protect > { typedef false_ is_le; typedef protect type; }; // specializations for main 'bind', 'bind1st' and 'bind2nd' forms + template< typename F, typename T1, typename T2, typename T3, typename T4 , typename T5 + , typename Tag , typename Protect > struct lambda_impl< bind< F,T1,T2,T3,T4,T5 > - , Protect - + , Tag + , Protect + > { typedef false_ is_le; @@ -565,9 +607,10 @@ struct lambda_impl< template< typename F, typename T + , typename Tag , typename Protect > -struct lambda_impl< bind1st,Protect > +struct lambda_impl< bind1st,Tag,Protect > { typedef false_ is_le; typedef bind1st< F,T > type; @@ -575,9 +618,10 @@ struct lambda_impl< bind1st,Protect > template< typename F, typename T + , typename Tag , typename Protect > -struct lambda_impl< bind2nd,Protect > +struct lambda_impl< bind2nd,Tag,Protect > { typedef false_ is_le; typedef bind2nd< F,T > type; diff --git a/include/boost/mpl/aux_/preprocessed/msvc70/lambda_no_ctps.hpp b/include/boost/mpl/aux_/preprocessed/msvc70/lambda_no_ctps.hpp index 23d1969..5cb1956 100644 --- a/include/boost/mpl/aux_/preprocessed/msvc70/lambda_no_ctps.hpp +++ b/include/boost/mpl/aux_/preprocessed/msvc70/lambda_no_ctps.hpp @@ -1,4 +1,4 @@ -// preprocessed version of 'boost/mpl/lambda_no_ctps.hpp' header +// preprocessed version of 'boost/mpl/aux_/config/use_preprocessed.hpp' header // see the original for copyright information namespace boost { @@ -8,7 +8,7 @@ namespace aux { template< int arity_, bool Protect > struct lambda_impl { - template< typename T > struct result_ + template< typename T, typename Tag > struct result_ { typedef T type; }; @@ -16,142 +16,184 @@ template< int arity_, bool Protect > struct lambda_impl template<> struct lambda_impl<1, false> { - template< typename F > struct result_ + template< typename F, typename Tag > struct result_ { typedef typename F::rebind f_; + typedef typename lambda< typename F::arg1, Tag, false >::type arg1; typedef bind1< f_ - , typename lambda< typename F::arg1, false >::type + , arg1 > type; }; }; template<> struct lambda_impl<1, true> { - template< typename F > struct result_ + template< typename F, typename Tag > struct result_ { typedef typename F::rebind f_; + typedef typename lambda< typename F::arg1, Tag, false >::type arg1; typedef mpl::protect< bind1< f_ - , typename lambda< typename F::arg1, false >::type + , arg1 > > type; }; }; template<> struct lambda_impl<2, false> { - template< typename F > struct result_ + template< typename F, typename Tag > struct result_ { typedef typename F::rebind f_; + typedef typename lambda< typename F::arg1, Tag, false >::type arg1; + typedef typename lambda< typename F::arg2, Tag, false >::type arg2; + + typedef bind2< f_ - - ,typename lambda< typename F::arg1, false >::type, typename lambda< typename F::arg2, false >::type + , arg1, arg2 > type; }; }; template<> struct lambda_impl<2, true> { - template< typename F > struct result_ + template< typename F, typename Tag > struct result_ { typedef typename F::rebind f_; + typedef typename lambda< typename F::arg1, Tag, false >::type arg1; + typedef typename lambda< typename F::arg2, Tag, false >::type arg2; + + typedef mpl::protect< bind2< f_ - - ,typename lambda< typename F::arg1, false >::type, typename lambda< typename F::arg2, false >::type + , arg1, arg2 > > type; }; }; template<> struct lambda_impl<3, false> { - template< typename F > struct result_ + template< typename F, typename Tag > struct result_ { typedef typename F::rebind f_; + typedef typename lambda< typename F::arg1, Tag, false >::type arg1; + typedef typename lambda< typename F::arg2, Tag, false >::type arg2; + typedef typename lambda< typename F::arg3, Tag, false >::type arg3; + + typedef bind3< f_ - - ,typename lambda< typename F::arg1, false >::type, typename lambda< typename F::arg2, false >::type, typename lambda< typename F::arg3, false >::type + , arg1, arg2, arg3 > type; }; }; template<> struct lambda_impl<3, true> { - template< typename F > struct result_ + template< typename F, typename Tag > struct result_ { typedef typename F::rebind f_; + typedef typename lambda< typename F::arg1, Tag, false >::type arg1; + typedef typename lambda< typename F::arg2, Tag, false >::type arg2; + typedef typename lambda< typename F::arg3, Tag, false >::type arg3; + + typedef mpl::protect< bind3< f_ - - ,typename lambda< typename F::arg1, false >::type, typename lambda< typename F::arg2, false >::type, typename lambda< typename F::arg3, false >::type + , arg1, arg2, arg3 > > type; }; }; template<> struct lambda_impl<4, false> { - template< typename F > struct result_ + template< typename F, typename Tag > struct result_ { typedef typename F::rebind f_; + typedef typename lambda< typename F::arg1, Tag, false >::type arg1; + typedef typename lambda< typename F::arg2, Tag, false >::type arg2; + typedef typename lambda< typename F::arg3, Tag, false >::type arg3; + typedef typename lambda< typename F::arg4, Tag, false >::type arg4; + + typedef bind4< f_ - - ,typename lambda< typename F::arg1, false >::type, typename lambda< typename F::arg2, false >::type, typename lambda< typename F::arg3, false >::type, typename lambda< typename F::arg4, false >::type + , arg1, arg2, arg3, arg4 > type; }; }; template<> struct lambda_impl<4, true> { - template< typename F > struct result_ + template< typename F, typename Tag > struct result_ { typedef typename F::rebind f_; + typedef typename lambda< typename F::arg1, Tag, false >::type arg1; + typedef typename lambda< typename F::arg2, Tag, false >::type arg2; + typedef typename lambda< typename F::arg3, Tag, false >::type arg3; + typedef typename lambda< typename F::arg4, Tag, false >::type arg4; + + typedef mpl::protect< bind4< f_ - - ,typename lambda< typename F::arg1, false >::type, typename lambda< typename F::arg2, false >::type, typename lambda< typename F::arg3, false >::type, typename lambda< typename F::arg4, false >::type + , arg1, arg2, arg3, arg4 > > type; }; }; template<> struct lambda_impl<5, false> { - template< typename F > struct result_ + template< typename F, typename Tag > struct result_ { typedef typename F::rebind f_; + typedef typename lambda< typename F::arg1, Tag, false >::type arg1; + typedef typename lambda< typename F::arg2, Tag, false >::type arg2; + typedef typename lambda< typename F::arg3, Tag, false >::type arg3; + typedef typename lambda< typename F::arg4, Tag, false >::type arg4; + typedef typename lambda< typename F::arg5, Tag, false >::type arg5; + + typedef bind5< f_ - - ,typename lambda< typename F::arg1, false >::type, typename lambda< typename F::arg2, false >::type, typename lambda< typename F::arg3, false >::type, typename lambda< typename F::arg4, false >::type, typename lambda< typename F::arg5, false >::type + , arg1, arg2, arg3, arg4, arg5 > type; }; }; template<> struct lambda_impl<5, true> { - template< typename F > struct result_ + template< typename F, typename Tag > struct result_ { typedef typename F::rebind f_; + typedef typename lambda< typename F::arg1, Tag, false >::type arg1; + typedef typename lambda< typename F::arg2, Tag, false >::type arg2; + typedef typename lambda< typename F::arg3, Tag, false >::type arg3; + typedef typename lambda< typename F::arg4, Tag, false >::type arg4; + typedef typename lambda< typename F::arg5, Tag, false >::type arg5; + + typedef mpl::protect< bind5< f_ - - ,typename lambda< typename F::arg1, false >::type, typename lambda< typename F::arg2, false >::type, typename lambda< typename F::arg3, false >::type, typename lambda< typename F::arg4, false >::type, typename lambda< typename F::arg5, false >::type + , arg1, arg2, arg3, arg4, arg5 > > type; }; }; } // namespace aux -template< typename T, bool Protect = true > +template< + typename T + , typename Tag = void_ + , bool Protect = true + > struct lambda : aux::lambda_impl< ::boost::mpl::aux::template_arity::value , Protect - >::template result_ + >::template result_< T,Tag > { }; diff --git a/include/boost/mpl/aux_/preprocessed/msvc70/quote.hpp b/include/boost/mpl/aux_/preprocessed/msvc70/quote.hpp index 4a8a6cc..8bdbbd9 100644 --- a/include/boost/mpl/aux_/preprocessed/msvc70/quote.hpp +++ b/include/boost/mpl/aux_/preprocessed/msvc70/quote.hpp @@ -1,9 +1,8 @@ -// preprocessed version of 'boost/mpl/quote.hpp' header +// preprocessed version of 'boost/mpl/aux_/config/use_preprocessed.hpp' header // see the original for copyright information namespace boost { namespace mpl { - template< bool > struct quote_impl { template< typename T > struct result_ @@ -22,6 +21,7 @@ template<> struct quote_impl template< template< typename P1 > class F + , typename Tag = void_ > struct quote1 { @@ -36,6 +36,7 @@ struct quote1 template< template< typename P1, typename P2 > class F + , typename Tag = void_ > struct quote2 { @@ -50,6 +51,7 @@ struct quote2 template< template< typename P1, typename P2, typename P3 > class F + , typename Tag = void_ > struct quote3 { @@ -64,6 +66,7 @@ struct quote3 template< template< typename P1, typename P2, typename P3, typename P4 > class F + , typename Tag = void_ > struct quote4 { @@ -85,6 +88,7 @@ template< , typename P5 > class F + , typename Tag = void_ > struct quote5 { diff --git a/include/boost/mpl/aux_/preprocessed/mwcw/full_lambda.hpp b/include/boost/mpl/aux_/preprocessed/mwcw/full_lambda.hpp index 4eae84d..e46ce7a 100644 --- a/include/boost/mpl/aux_/preprocessed/mwcw/full_lambda.hpp +++ b/include/boost/mpl/aux_/preprocessed/mwcw/full_lambda.hpp @@ -1,4 +1,4 @@ -// preprocessed version of 'boost/mpl/aux_/full_lambda.hpp' header +// preprocessed version of 'boost/mpl/aux_/lambda_expr.hpp' header // see the original for copyright information namespace boost { @@ -6,8 +6,9 @@ namespace mpl { template< typename T + , typename Tag , typename Protect = false_ - + > struct lambda_impl { @@ -17,10 +18,11 @@ struct lambda_impl template< typename T - + , typename Tag = void_ + > struct lambda - : lambda_impl< T,false_ > + : lambda_impl< T,Tag,false_ > { }; @@ -43,8 +45,8 @@ struct lambda_or< false,false,false,false,false > } // namespace aux -template< int N, typename Protect > -struct lambda_impl< arg,Protect > +template< int N, typename Tag, typename Protect > +struct lambda_impl< arg,Tag,Protect > { typedef true_ is_le; typedef arg type; @@ -52,11 +54,13 @@ struct lambda_impl< arg,Protect > template< typename F + , typename Tag , typename Protect > struct lambda_impl< bind0 - , Protect + , Tag + , Protect > { typedef false_ is_le; @@ -68,16 +72,17 @@ struct lambda_impl< template< template< typename P1 > class F , typename T1 + , typename Tag > -struct lambda< F > - : lambda_impl< F,true_ > +struct lambda< F,Tag > + : lambda_impl< F,Tag,true_ > { }; namespace aux { template< - typename IsLE, typename Protect + typename IsLE, typename Tag, typename Protect , template< typename P1 > class F , typename L1 > @@ -90,24 +95,26 @@ struct le_result1 template< template< typename P1 > class F + , typename Tag , typename L1 > -struct le_result1< true_,false_,F,L1 > +struct le_result1< true_,Tag,false_,F,L1 > { typedef bind1< - quote1 + quote1< F,Tag > , typename L1::type > type; }; template< template< typename P1 > class F + , typename Tag , typename L1 > -struct le_result1< true_,true_,F,L1 > +struct le_result1< true_,Tag,true_,F,L1 > { typedef protect< bind1< - quote1 + quote1< F,Tag > , typename L1::type > > type; }; @@ -117,19 +124,21 @@ struct le_result1< true_,true_,F,L1 > template< template< typename P1 > class F , typename T1 + , typename Tag , typename Protect > -struct lambda_impl< - F, Protect +struct lambda_impl< + F, Tag, Protect > { - typedef lambda_impl l1; + typedef lambda_impl< T1,Tag > l1; typedef aux::lambda_or< l1::is_le::value > is_le; typedef typename aux::le_result1< typename is_le::type + , Tag , Protect , F , l1 @@ -138,11 +147,13 @@ struct lambda_impl< template< typename F, typename T1 + , typename Tag , typename Protect > struct lambda_impl< bind1< F,T1 > - , Protect + , Tag + , Protect > { typedef false_ is_le; @@ -155,16 +166,17 @@ struct lambda_impl< template< template< typename P1, typename P2 > class F , typename T1, typename T2 + , typename Tag > -struct lambda< F > - : lambda_impl< F,true_ > +struct lambda< F,Tag > + : lambda_impl< F,Tag,true_ > { }; namespace aux { template< - typename IsLE, typename Protect + typename IsLE, typename Tag, typename Protect , template< typename P1, typename P2 > class F , typename L1, typename L2 > @@ -177,24 +189,26 @@ struct le_result2 template< template< typename P1, typename P2 > class F + , typename Tag , typename L1, typename L2 > -struct le_result2< true_,false_,F,L1,L2 > +struct le_result2< true_,Tag,false_,F,L1,L2 > { typedef bind2< - quote2 + quote2< F,Tag > , typename L1::type, typename L2::type > type; }; template< template< typename P1, typename P2 > class F + , typename Tag , typename L1, typename L2 > -struct le_result2< true_,true_,F,L1,L2 > +struct le_result2< true_,Tag,true_,F,L1,L2 > { typedef protect< bind2< - quote2 + quote2< F,Tag > , typename L1::type, typename L2::type > > type; }; @@ -204,14 +218,15 @@ struct le_result2< true_,true_,F,L1,L2 > template< template< typename P1, typename P2 > class F , typename T1, typename T2 + , typename Tag , typename Protect > -struct lambda_impl< - F< T1,T2 >, Protect +struct lambda_impl< + F< T1,T2 >, Tag, Protect > { - typedef lambda_impl l1; - typedef lambda_impl l2; + typedef lambda_impl< T1,Tag > l1; + typedef lambda_impl< T2,Tag > l2; typedef aux::lambda_or< l1::is_le::value, l2::is_le::value @@ -219,6 +234,7 @@ struct lambda_impl< typedef typename aux::le_result2< typename is_le::type + , Tag , Protect , F , l1, l2 @@ -227,11 +243,13 @@ struct lambda_impl< template< typename F, typename T1, typename T2 + , typename Tag , typename Protect > struct lambda_impl< bind2< F,T1,T2 > - , Protect + , Tag + , Protect > { typedef false_ is_le; @@ -244,16 +262,17 @@ struct lambda_impl< template< template< typename P1, typename P2, typename P3 > class F , typename T1, typename T2, typename T3 + , typename Tag > -struct lambda< F > - : lambda_impl< F,true_ > +struct lambda< F,Tag > + : lambda_impl< F,Tag,true_ > { }; namespace aux { template< - typename IsLE, typename Protect + typename IsLE, typename Tag, typename Protect , template< typename P1, typename P2, typename P3 > class F , typename L1, typename L2, typename L3 > @@ -266,24 +285,26 @@ struct le_result3 template< template< typename P1, typename P2, typename P3 > class F + , typename Tag , typename L1, typename L2, typename L3 > -struct le_result3< true_,false_,F,L1,L2,L3 > +struct le_result3< true_,Tag,false_,F,L1,L2,L3 > { typedef bind3< - quote3 + quote3< F,Tag > , typename L1::type, typename L2::type, typename L3::type > type; }; template< template< typename P1, typename P2, typename P3 > class F + , typename Tag , typename L1, typename L2, typename L3 > -struct le_result3< true_,true_,F,L1,L2,L3 > +struct le_result3< true_,Tag,true_,F,L1,L2,L3 > { typedef protect< bind3< - quote3 + quote3< F,Tag > , typename L1::type, typename L2::type, typename L3::type > > type; }; @@ -293,15 +314,16 @@ struct le_result3< true_,true_,F,L1,L2,L3 > template< template< typename P1, typename P2, typename P3 > class F , typename T1, typename T2, typename T3 + , typename Tag , typename Protect > -struct lambda_impl< - F< T1,T2,T3 >, Protect +struct lambda_impl< + F< T1,T2,T3 >, Tag, Protect > { - typedef lambda_impl l1; - typedef lambda_impl l2; - typedef lambda_impl l3; + typedef lambda_impl< T1,Tag > l1; + typedef lambda_impl< T2,Tag > l2; + typedef lambda_impl< T3,Tag > l3; typedef aux::lambda_or< l1::is_le::value, l2::is_le::value, l3::is_le::value @@ -309,6 +331,7 @@ struct lambda_impl< typedef typename aux::le_result3< typename is_le::type + , Tag , Protect , F , l1, l2, l3 @@ -317,11 +340,13 @@ struct lambda_impl< template< typename F, typename T1, typename T2, typename T3 + , typename Tag , typename Protect > struct lambda_impl< bind3< F,T1,T2,T3 > - , Protect + , Tag + , Protect > { typedef false_ is_le; @@ -334,16 +359,17 @@ struct lambda_impl< template< template< typename P1, typename P2, typename P3, typename P4 > class F , typename T1, typename T2, typename T3, typename T4 + , typename Tag > -struct lambda< F > - : lambda_impl< F,true_ > +struct lambda< F,Tag > + : lambda_impl< F,Tag,true_ > { }; namespace aux { template< - typename IsLE, typename Protect + typename IsLE, typename Tag, typename Protect , template< typename P1, typename P2, typename P3, typename P4 > class F , typename L1, typename L2, typename L3, typename L4 > @@ -357,12 +383,13 @@ struct le_result4 template< template< typename P1, typename P2, typename P3, typename P4 > class F + , typename Tag , typename L1, typename L2, typename L3, typename L4 > -struct le_result4< true_,false_,F,L1,L2,L3,L4 > +struct le_result4< true_,Tag,false_,F,L1,L2,L3,L4 > { typedef bind4< - quote4 + quote4< F,Tag > , typename L1::type, typename L2::type, typename L3::type , typename L4::type > type; @@ -370,12 +397,13 @@ struct le_result4< true_,false_,F,L1,L2,L3,L4 > template< template< typename P1, typename P2, typename P3, typename P4 > class F + , typename Tag , typename L1, typename L2, typename L3, typename L4 > -struct le_result4< true_,true_,F,L1,L2,L3,L4 > +struct le_result4< true_,Tag,true_,F,L1,L2,L3,L4 > { typedef protect< bind4< - quote4 + quote4< F,Tag > , typename L1::type, typename L2::type, typename L3::type , typename L4::type > > type; @@ -386,16 +414,17 @@ struct le_result4< true_,true_,F,L1,L2,L3,L4 > template< template< typename P1, typename P2, typename P3, typename P4 > class F , typename T1, typename T2, typename T3, typename T4 + , typename Tag , typename Protect > -struct lambda_impl< - F< T1,T2,T3,T4 >, Protect +struct lambda_impl< + F< T1,T2,T3,T4 >, Tag, Protect > { - typedef lambda_impl l1; - typedef lambda_impl l2; - typedef lambda_impl l3; - typedef lambda_impl l4; + typedef lambda_impl< T1,Tag > l1; + typedef lambda_impl< T2,Tag > l2; + typedef lambda_impl< T3,Tag > l3; + typedef lambda_impl< T4,Tag > l4; typedef aux::lambda_or< l1::is_le::value, l2::is_le::value, l3::is_le::value @@ -404,6 +433,7 @@ struct lambda_impl< typedef typename aux::le_result4< typename is_le::type + , Tag , Protect , F , l1, l2, l3, l4 @@ -412,11 +442,13 @@ struct lambda_impl< template< typename F, typename T1, typename T2, typename T3, typename T4 + , typename Tag , typename Protect > struct lambda_impl< bind4< F,T1,T2,T3,T4 > - , Protect + , Tag + , Protect > { typedef false_ is_le; @@ -433,16 +465,17 @@ template< > class F , typename T1, typename T2, typename T3, typename T4, typename T5 + , typename Tag > -struct lambda< F > - : lambda_impl< F,true_ > +struct lambda< F,Tag > + : lambda_impl< F,Tag,true_ > { }; namespace aux { template< - typename IsLE, typename Protect + typename IsLE, typename Tag, typename Protect , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F , typename L1, typename L2, typename L3, typename L4, typename L5 > @@ -460,12 +493,13 @@ template< , typename P5 > class F + , typename Tag , typename L1, typename L2, typename L3, typename L4, typename L5 > -struct le_result5< true_,false_,F,L1,L2,L3,L4,L5 > +struct le_result5< true_,Tag,false_,F,L1,L2,L3,L4,L5 > { typedef bind5< - quote5 + quote5< F,Tag > , typename L1::type, typename L2::type, typename L3::type , typename L4::type, typename L5::type > type; @@ -477,12 +511,13 @@ template< , typename P5 > class F + , typename Tag , typename L1, typename L2, typename L3, typename L4, typename L5 > -struct le_result5< true_,true_,F,L1,L2,L3,L4,L5 > +struct le_result5< true_,Tag,true_,F,L1,L2,L3,L4,L5 > { typedef protect< bind5< - quote5 + quote5< F,Tag > , typename L1::type, typename L2::type, typename L3::type , typename L4::type, typename L5::type > > type; @@ -497,17 +532,18 @@ template< > class F , typename T1, typename T2, typename T3, typename T4, typename T5 + , typename Tag , typename Protect > -struct lambda_impl< - F< T1,T2,T3,T4,T5 >, Protect +struct lambda_impl< + F< T1,T2,T3,T4,T5 >, Tag, Protect > { - typedef lambda_impl l1; - typedef lambda_impl l2; - typedef lambda_impl l3; - typedef lambda_impl l4; - typedef lambda_impl l5; + typedef lambda_impl< T1,Tag > l1; + typedef lambda_impl< T2,Tag > l2; + typedef lambda_impl< T3,Tag > l3; + typedef lambda_impl< T4,Tag > l4; + typedef lambda_impl< T5,Tag > l5; typedef aux::lambda_or< l1::is_le::value, l2::is_le::value, l3::is_le::value @@ -516,6 +552,7 @@ struct lambda_impl< typedef typename aux::le_result5< typename is_le::type + , Tag , Protect , F , l1, l2, l3, l4, l5 @@ -525,11 +562,13 @@ struct lambda_impl< template< typename F, typename T1, typename T2, typename T3, typename T4 , typename T5 + , typename Tag , typename Protect > struct lambda_impl< bind5< F,T1,T2,T3,T4,T5 > - , Protect + , Tag + , Protect > { typedef false_ is_le; @@ -540,23 +579,26 @@ struct lambda_impl< }; // special case for 'protect' -template< typename T, typename Protect > -struct lambda_impl< protect,Protect > +template< typename T, typename Tag, typename Protect > +struct lambda_impl< protect,Tag,Protect > { typedef false_ is_le; typedef protect type; }; // specializations for main 'bind', 'bind1st' and 'bind2nd' forms + template< typename F, typename T1, typename T2, typename T3, typename T4 , typename T5 + , typename Tag , typename Protect > struct lambda_impl< bind< F,T1,T2,T3,T4,T5 > - , Protect - + , Tag + , Protect + > { typedef false_ is_le; @@ -565,9 +607,10 @@ struct lambda_impl< template< typename F, typename T + , typename Tag , typename Protect > -struct lambda_impl< bind1st,Protect > +struct lambda_impl< bind1st,Tag,Protect > { typedef false_ is_le; typedef bind1st< F,T > type; @@ -575,9 +618,10 @@ struct lambda_impl< bind1st,Protect > template< typename F, typename T + , typename Tag , typename Protect > -struct lambda_impl< bind2nd,Protect > +struct lambda_impl< bind2nd,Tag,Protect > { typedef false_ is_le; typedef bind2nd< F,T > type; diff --git a/include/boost/mpl/aux_/preprocessed/mwcw/lambda_no_ctps.hpp b/include/boost/mpl/aux_/preprocessed/mwcw/lambda_no_ctps.hpp index 23d1969..5cb1956 100644 --- a/include/boost/mpl/aux_/preprocessed/mwcw/lambda_no_ctps.hpp +++ b/include/boost/mpl/aux_/preprocessed/mwcw/lambda_no_ctps.hpp @@ -1,4 +1,4 @@ -// preprocessed version of 'boost/mpl/lambda_no_ctps.hpp' header +// preprocessed version of 'boost/mpl/aux_/config/use_preprocessed.hpp' header // see the original for copyright information namespace boost { @@ -8,7 +8,7 @@ namespace aux { template< int arity_, bool Protect > struct lambda_impl { - template< typename T > struct result_ + template< typename T, typename Tag > struct result_ { typedef T type; }; @@ -16,142 +16,184 @@ template< int arity_, bool Protect > struct lambda_impl template<> struct lambda_impl<1, false> { - template< typename F > struct result_ + template< typename F, typename Tag > struct result_ { typedef typename F::rebind f_; + typedef typename lambda< typename F::arg1, Tag, false >::type arg1; typedef bind1< f_ - , typename lambda< typename F::arg1, false >::type + , arg1 > type; }; }; template<> struct lambda_impl<1, true> { - template< typename F > struct result_ + template< typename F, typename Tag > struct result_ { typedef typename F::rebind f_; + typedef typename lambda< typename F::arg1, Tag, false >::type arg1; typedef mpl::protect< bind1< f_ - , typename lambda< typename F::arg1, false >::type + , arg1 > > type; }; }; template<> struct lambda_impl<2, false> { - template< typename F > struct result_ + template< typename F, typename Tag > struct result_ { typedef typename F::rebind f_; + typedef typename lambda< typename F::arg1, Tag, false >::type arg1; + typedef typename lambda< typename F::arg2, Tag, false >::type arg2; + + typedef bind2< f_ - - ,typename lambda< typename F::arg1, false >::type, typename lambda< typename F::arg2, false >::type + , arg1, arg2 > type; }; }; template<> struct lambda_impl<2, true> { - template< typename F > struct result_ + template< typename F, typename Tag > struct result_ { typedef typename F::rebind f_; + typedef typename lambda< typename F::arg1, Tag, false >::type arg1; + typedef typename lambda< typename F::arg2, Tag, false >::type arg2; + + typedef mpl::protect< bind2< f_ - - ,typename lambda< typename F::arg1, false >::type, typename lambda< typename F::arg2, false >::type + , arg1, arg2 > > type; }; }; template<> struct lambda_impl<3, false> { - template< typename F > struct result_ + template< typename F, typename Tag > struct result_ { typedef typename F::rebind f_; + typedef typename lambda< typename F::arg1, Tag, false >::type arg1; + typedef typename lambda< typename F::arg2, Tag, false >::type arg2; + typedef typename lambda< typename F::arg3, Tag, false >::type arg3; + + typedef bind3< f_ - - ,typename lambda< typename F::arg1, false >::type, typename lambda< typename F::arg2, false >::type, typename lambda< typename F::arg3, false >::type + , arg1, arg2, arg3 > type; }; }; template<> struct lambda_impl<3, true> { - template< typename F > struct result_ + template< typename F, typename Tag > struct result_ { typedef typename F::rebind f_; + typedef typename lambda< typename F::arg1, Tag, false >::type arg1; + typedef typename lambda< typename F::arg2, Tag, false >::type arg2; + typedef typename lambda< typename F::arg3, Tag, false >::type arg3; + + typedef mpl::protect< bind3< f_ - - ,typename lambda< typename F::arg1, false >::type, typename lambda< typename F::arg2, false >::type, typename lambda< typename F::arg3, false >::type + , arg1, arg2, arg3 > > type; }; }; template<> struct lambda_impl<4, false> { - template< typename F > struct result_ + template< typename F, typename Tag > struct result_ { typedef typename F::rebind f_; + typedef typename lambda< typename F::arg1, Tag, false >::type arg1; + typedef typename lambda< typename F::arg2, Tag, false >::type arg2; + typedef typename lambda< typename F::arg3, Tag, false >::type arg3; + typedef typename lambda< typename F::arg4, Tag, false >::type arg4; + + typedef bind4< f_ - - ,typename lambda< typename F::arg1, false >::type, typename lambda< typename F::arg2, false >::type, typename lambda< typename F::arg3, false >::type, typename lambda< typename F::arg4, false >::type + , arg1, arg2, arg3, arg4 > type; }; }; template<> struct lambda_impl<4, true> { - template< typename F > struct result_ + template< typename F, typename Tag > struct result_ { typedef typename F::rebind f_; + typedef typename lambda< typename F::arg1, Tag, false >::type arg1; + typedef typename lambda< typename F::arg2, Tag, false >::type arg2; + typedef typename lambda< typename F::arg3, Tag, false >::type arg3; + typedef typename lambda< typename F::arg4, Tag, false >::type arg4; + + typedef mpl::protect< bind4< f_ - - ,typename lambda< typename F::arg1, false >::type, typename lambda< typename F::arg2, false >::type, typename lambda< typename F::arg3, false >::type, typename lambda< typename F::arg4, false >::type + , arg1, arg2, arg3, arg4 > > type; }; }; template<> struct lambda_impl<5, false> { - template< typename F > struct result_ + template< typename F, typename Tag > struct result_ { typedef typename F::rebind f_; + typedef typename lambda< typename F::arg1, Tag, false >::type arg1; + typedef typename lambda< typename F::arg2, Tag, false >::type arg2; + typedef typename lambda< typename F::arg3, Tag, false >::type arg3; + typedef typename lambda< typename F::arg4, Tag, false >::type arg4; + typedef typename lambda< typename F::arg5, Tag, false >::type arg5; + + typedef bind5< f_ - - ,typename lambda< typename F::arg1, false >::type, typename lambda< typename F::arg2, false >::type, typename lambda< typename F::arg3, false >::type, typename lambda< typename F::arg4, false >::type, typename lambda< typename F::arg5, false >::type + , arg1, arg2, arg3, arg4, arg5 > type; }; }; template<> struct lambda_impl<5, true> { - template< typename F > struct result_ + template< typename F, typename Tag > struct result_ { typedef typename F::rebind f_; + typedef typename lambda< typename F::arg1, Tag, false >::type arg1; + typedef typename lambda< typename F::arg2, Tag, false >::type arg2; + typedef typename lambda< typename F::arg3, Tag, false >::type arg3; + typedef typename lambda< typename F::arg4, Tag, false >::type arg4; + typedef typename lambda< typename F::arg5, Tag, false >::type arg5; + + typedef mpl::protect< bind5< f_ - - ,typename lambda< typename F::arg1, false >::type, typename lambda< typename F::arg2, false >::type, typename lambda< typename F::arg3, false >::type, typename lambda< typename F::arg4, false >::type, typename lambda< typename F::arg5, false >::type + , arg1, arg2, arg3, arg4, arg5 > > type; }; }; } // namespace aux -template< typename T, bool Protect = true > +template< + typename T + , typename Tag = void_ + , bool Protect = true + > struct lambda : aux::lambda_impl< ::boost::mpl::aux::template_arity::value , Protect - >::template result_ + >::template result_< T,Tag > { }; diff --git a/include/boost/mpl/aux_/preprocessed/mwcw/quote.hpp b/include/boost/mpl/aux_/preprocessed/mwcw/quote.hpp index 0a8e644..363c114 100644 --- a/include/boost/mpl/aux_/preprocessed/mwcw/quote.hpp +++ b/include/boost/mpl/aux_/preprocessed/mwcw/quote.hpp @@ -1,4 +1,4 @@ -// preprocessed version of 'boost/mpl/quote.hpp' header +// preprocessed version of 'boost/mpl/aux_/config/use_preprocessed.hpp' header // see the original for copyright information namespace boost { @@ -19,6 +19,7 @@ struct quote_impl< T,false > template< template< typename P1 > class F + , typename Tag = void_ > struct quote1 { @@ -32,6 +33,7 @@ struct quote1 template< template< typename P1, typename P2 > class F + , typename Tag = void_ > struct quote2 { @@ -45,6 +47,7 @@ struct quote2 template< template< typename P1, typename P2, typename P3 > class F + , typename Tag = void_ > struct quote3 { @@ -58,6 +61,7 @@ struct quote3 template< template< typename P1, typename P2, typename P3, typename P4 > class F + , typename Tag = void_ > struct quote4 { @@ -78,6 +82,7 @@ template< , typename P5 > class F + , typename Tag = void_ > struct quote5 { diff --git a/include/boost/mpl/aux_/preprocessed/no_ctps/full_lambda.hpp b/include/boost/mpl/aux_/preprocessed/no_ctps/full_lambda.hpp index 4eae84d..e46ce7a 100644 --- a/include/boost/mpl/aux_/preprocessed/no_ctps/full_lambda.hpp +++ b/include/boost/mpl/aux_/preprocessed/no_ctps/full_lambda.hpp @@ -1,4 +1,4 @@ -// preprocessed version of 'boost/mpl/aux_/full_lambda.hpp' header +// preprocessed version of 'boost/mpl/aux_/lambda_expr.hpp' header // see the original for copyright information namespace boost { @@ -6,8 +6,9 @@ namespace mpl { template< typename T + , typename Tag , typename Protect = false_ - + > struct lambda_impl { @@ -17,10 +18,11 @@ struct lambda_impl template< typename T - + , typename Tag = void_ + > struct lambda - : lambda_impl< T,false_ > + : lambda_impl< T,Tag,false_ > { }; @@ -43,8 +45,8 @@ struct lambda_or< false,false,false,false,false > } // namespace aux -template< int N, typename Protect > -struct lambda_impl< arg,Protect > +template< int N, typename Tag, typename Protect > +struct lambda_impl< arg,Tag,Protect > { typedef true_ is_le; typedef arg type; @@ -52,11 +54,13 @@ struct lambda_impl< arg,Protect > template< typename F + , typename Tag , typename Protect > struct lambda_impl< bind0 - , Protect + , Tag + , Protect > { typedef false_ is_le; @@ -68,16 +72,17 @@ struct lambda_impl< template< template< typename P1 > class F , typename T1 + , typename Tag > -struct lambda< F > - : lambda_impl< F,true_ > +struct lambda< F,Tag > + : lambda_impl< F,Tag,true_ > { }; namespace aux { template< - typename IsLE, typename Protect + typename IsLE, typename Tag, typename Protect , template< typename P1 > class F , typename L1 > @@ -90,24 +95,26 @@ struct le_result1 template< template< typename P1 > class F + , typename Tag , typename L1 > -struct le_result1< true_,false_,F,L1 > +struct le_result1< true_,Tag,false_,F,L1 > { typedef bind1< - quote1 + quote1< F,Tag > , typename L1::type > type; }; template< template< typename P1 > class F + , typename Tag , typename L1 > -struct le_result1< true_,true_,F,L1 > +struct le_result1< true_,Tag,true_,F,L1 > { typedef protect< bind1< - quote1 + quote1< F,Tag > , typename L1::type > > type; }; @@ -117,19 +124,21 @@ struct le_result1< true_,true_,F,L1 > template< template< typename P1 > class F , typename T1 + , typename Tag , typename Protect > -struct lambda_impl< - F, Protect +struct lambda_impl< + F, Tag, Protect > { - typedef lambda_impl l1; + typedef lambda_impl< T1,Tag > l1; typedef aux::lambda_or< l1::is_le::value > is_le; typedef typename aux::le_result1< typename is_le::type + , Tag , Protect , F , l1 @@ -138,11 +147,13 @@ struct lambda_impl< template< typename F, typename T1 + , typename Tag , typename Protect > struct lambda_impl< bind1< F,T1 > - , Protect + , Tag + , Protect > { typedef false_ is_le; @@ -155,16 +166,17 @@ struct lambda_impl< template< template< typename P1, typename P2 > class F , typename T1, typename T2 + , typename Tag > -struct lambda< F > - : lambda_impl< F,true_ > +struct lambda< F,Tag > + : lambda_impl< F,Tag,true_ > { }; namespace aux { template< - typename IsLE, typename Protect + typename IsLE, typename Tag, typename Protect , template< typename P1, typename P2 > class F , typename L1, typename L2 > @@ -177,24 +189,26 @@ struct le_result2 template< template< typename P1, typename P2 > class F + , typename Tag , typename L1, typename L2 > -struct le_result2< true_,false_,F,L1,L2 > +struct le_result2< true_,Tag,false_,F,L1,L2 > { typedef bind2< - quote2 + quote2< F,Tag > , typename L1::type, typename L2::type > type; }; template< template< typename P1, typename P2 > class F + , typename Tag , typename L1, typename L2 > -struct le_result2< true_,true_,F,L1,L2 > +struct le_result2< true_,Tag,true_,F,L1,L2 > { typedef protect< bind2< - quote2 + quote2< F,Tag > , typename L1::type, typename L2::type > > type; }; @@ -204,14 +218,15 @@ struct le_result2< true_,true_,F,L1,L2 > template< template< typename P1, typename P2 > class F , typename T1, typename T2 + , typename Tag , typename Protect > -struct lambda_impl< - F< T1,T2 >, Protect +struct lambda_impl< + F< T1,T2 >, Tag, Protect > { - typedef lambda_impl l1; - typedef lambda_impl l2; + typedef lambda_impl< T1,Tag > l1; + typedef lambda_impl< T2,Tag > l2; typedef aux::lambda_or< l1::is_le::value, l2::is_le::value @@ -219,6 +234,7 @@ struct lambda_impl< typedef typename aux::le_result2< typename is_le::type + , Tag , Protect , F , l1, l2 @@ -227,11 +243,13 @@ struct lambda_impl< template< typename F, typename T1, typename T2 + , typename Tag , typename Protect > struct lambda_impl< bind2< F,T1,T2 > - , Protect + , Tag + , Protect > { typedef false_ is_le; @@ -244,16 +262,17 @@ struct lambda_impl< template< template< typename P1, typename P2, typename P3 > class F , typename T1, typename T2, typename T3 + , typename Tag > -struct lambda< F > - : lambda_impl< F,true_ > +struct lambda< F,Tag > + : lambda_impl< F,Tag,true_ > { }; namespace aux { template< - typename IsLE, typename Protect + typename IsLE, typename Tag, typename Protect , template< typename P1, typename P2, typename P3 > class F , typename L1, typename L2, typename L3 > @@ -266,24 +285,26 @@ struct le_result3 template< template< typename P1, typename P2, typename P3 > class F + , typename Tag , typename L1, typename L2, typename L3 > -struct le_result3< true_,false_,F,L1,L2,L3 > +struct le_result3< true_,Tag,false_,F,L1,L2,L3 > { typedef bind3< - quote3 + quote3< F,Tag > , typename L1::type, typename L2::type, typename L3::type > type; }; template< template< typename P1, typename P2, typename P3 > class F + , typename Tag , typename L1, typename L2, typename L3 > -struct le_result3< true_,true_,F,L1,L2,L3 > +struct le_result3< true_,Tag,true_,F,L1,L2,L3 > { typedef protect< bind3< - quote3 + quote3< F,Tag > , typename L1::type, typename L2::type, typename L3::type > > type; }; @@ -293,15 +314,16 @@ struct le_result3< true_,true_,F,L1,L2,L3 > template< template< typename P1, typename P2, typename P3 > class F , typename T1, typename T2, typename T3 + , typename Tag , typename Protect > -struct lambda_impl< - F< T1,T2,T3 >, Protect +struct lambda_impl< + F< T1,T2,T3 >, Tag, Protect > { - typedef lambda_impl l1; - typedef lambda_impl l2; - typedef lambda_impl l3; + typedef lambda_impl< T1,Tag > l1; + typedef lambda_impl< T2,Tag > l2; + typedef lambda_impl< T3,Tag > l3; typedef aux::lambda_or< l1::is_le::value, l2::is_le::value, l3::is_le::value @@ -309,6 +331,7 @@ struct lambda_impl< typedef typename aux::le_result3< typename is_le::type + , Tag , Protect , F , l1, l2, l3 @@ -317,11 +340,13 @@ struct lambda_impl< template< typename F, typename T1, typename T2, typename T3 + , typename Tag , typename Protect > struct lambda_impl< bind3< F,T1,T2,T3 > - , Protect + , Tag + , Protect > { typedef false_ is_le; @@ -334,16 +359,17 @@ struct lambda_impl< template< template< typename P1, typename P2, typename P3, typename P4 > class F , typename T1, typename T2, typename T3, typename T4 + , typename Tag > -struct lambda< F > - : lambda_impl< F,true_ > +struct lambda< F,Tag > + : lambda_impl< F,Tag,true_ > { }; namespace aux { template< - typename IsLE, typename Protect + typename IsLE, typename Tag, typename Protect , template< typename P1, typename P2, typename P3, typename P4 > class F , typename L1, typename L2, typename L3, typename L4 > @@ -357,12 +383,13 @@ struct le_result4 template< template< typename P1, typename P2, typename P3, typename P4 > class F + , typename Tag , typename L1, typename L2, typename L3, typename L4 > -struct le_result4< true_,false_,F,L1,L2,L3,L4 > +struct le_result4< true_,Tag,false_,F,L1,L2,L3,L4 > { typedef bind4< - quote4 + quote4< F,Tag > , typename L1::type, typename L2::type, typename L3::type , typename L4::type > type; @@ -370,12 +397,13 @@ struct le_result4< true_,false_,F,L1,L2,L3,L4 > template< template< typename P1, typename P2, typename P3, typename P4 > class F + , typename Tag , typename L1, typename L2, typename L3, typename L4 > -struct le_result4< true_,true_,F,L1,L2,L3,L4 > +struct le_result4< true_,Tag,true_,F,L1,L2,L3,L4 > { typedef protect< bind4< - quote4 + quote4< F,Tag > , typename L1::type, typename L2::type, typename L3::type , typename L4::type > > type; @@ -386,16 +414,17 @@ struct le_result4< true_,true_,F,L1,L2,L3,L4 > template< template< typename P1, typename P2, typename P3, typename P4 > class F , typename T1, typename T2, typename T3, typename T4 + , typename Tag , typename Protect > -struct lambda_impl< - F< T1,T2,T3,T4 >, Protect +struct lambda_impl< + F< T1,T2,T3,T4 >, Tag, Protect > { - typedef lambda_impl l1; - typedef lambda_impl l2; - typedef lambda_impl l3; - typedef lambda_impl l4; + typedef lambda_impl< T1,Tag > l1; + typedef lambda_impl< T2,Tag > l2; + typedef lambda_impl< T3,Tag > l3; + typedef lambda_impl< T4,Tag > l4; typedef aux::lambda_or< l1::is_le::value, l2::is_le::value, l3::is_le::value @@ -404,6 +433,7 @@ struct lambda_impl< typedef typename aux::le_result4< typename is_le::type + , Tag , Protect , F , l1, l2, l3, l4 @@ -412,11 +442,13 @@ struct lambda_impl< template< typename F, typename T1, typename T2, typename T3, typename T4 + , typename Tag , typename Protect > struct lambda_impl< bind4< F,T1,T2,T3,T4 > - , Protect + , Tag + , Protect > { typedef false_ is_le; @@ -433,16 +465,17 @@ template< > class F , typename T1, typename T2, typename T3, typename T4, typename T5 + , typename Tag > -struct lambda< F > - : lambda_impl< F,true_ > +struct lambda< F,Tag > + : lambda_impl< F,Tag,true_ > { }; namespace aux { template< - typename IsLE, typename Protect + typename IsLE, typename Tag, typename Protect , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F , typename L1, typename L2, typename L3, typename L4, typename L5 > @@ -460,12 +493,13 @@ template< , typename P5 > class F + , typename Tag , typename L1, typename L2, typename L3, typename L4, typename L5 > -struct le_result5< true_,false_,F,L1,L2,L3,L4,L5 > +struct le_result5< true_,Tag,false_,F,L1,L2,L3,L4,L5 > { typedef bind5< - quote5 + quote5< F,Tag > , typename L1::type, typename L2::type, typename L3::type , typename L4::type, typename L5::type > type; @@ -477,12 +511,13 @@ template< , typename P5 > class F + , typename Tag , typename L1, typename L2, typename L3, typename L4, typename L5 > -struct le_result5< true_,true_,F,L1,L2,L3,L4,L5 > +struct le_result5< true_,Tag,true_,F,L1,L2,L3,L4,L5 > { typedef protect< bind5< - quote5 + quote5< F,Tag > , typename L1::type, typename L2::type, typename L3::type , typename L4::type, typename L5::type > > type; @@ -497,17 +532,18 @@ template< > class F , typename T1, typename T2, typename T3, typename T4, typename T5 + , typename Tag , typename Protect > -struct lambda_impl< - F< T1,T2,T3,T4,T5 >, Protect +struct lambda_impl< + F< T1,T2,T3,T4,T5 >, Tag, Protect > { - typedef lambda_impl l1; - typedef lambda_impl l2; - typedef lambda_impl l3; - typedef lambda_impl l4; - typedef lambda_impl l5; + typedef lambda_impl< T1,Tag > l1; + typedef lambda_impl< T2,Tag > l2; + typedef lambda_impl< T3,Tag > l3; + typedef lambda_impl< T4,Tag > l4; + typedef lambda_impl< T5,Tag > l5; typedef aux::lambda_or< l1::is_le::value, l2::is_le::value, l3::is_le::value @@ -516,6 +552,7 @@ struct lambda_impl< typedef typename aux::le_result5< typename is_le::type + , Tag , Protect , F , l1, l2, l3, l4, l5 @@ -525,11 +562,13 @@ struct lambda_impl< template< typename F, typename T1, typename T2, typename T3, typename T4 , typename T5 + , typename Tag , typename Protect > struct lambda_impl< bind5< F,T1,T2,T3,T4,T5 > - , Protect + , Tag + , Protect > { typedef false_ is_le; @@ -540,23 +579,26 @@ struct lambda_impl< }; // special case for 'protect' -template< typename T, typename Protect > -struct lambda_impl< protect,Protect > +template< typename T, typename Tag, typename Protect > +struct lambda_impl< protect,Tag,Protect > { typedef false_ is_le; typedef protect type; }; // specializations for main 'bind', 'bind1st' and 'bind2nd' forms + template< typename F, typename T1, typename T2, typename T3, typename T4 , typename T5 + , typename Tag , typename Protect > struct lambda_impl< bind< F,T1,T2,T3,T4,T5 > - , Protect - + , Tag + , Protect + > { typedef false_ is_le; @@ -565,9 +607,10 @@ struct lambda_impl< template< typename F, typename T + , typename Tag , typename Protect > -struct lambda_impl< bind1st,Protect > +struct lambda_impl< bind1st,Tag,Protect > { typedef false_ is_le; typedef bind1st< F,T > type; @@ -575,9 +618,10 @@ struct lambda_impl< bind1st,Protect > template< typename F, typename T + , typename Tag , typename Protect > -struct lambda_impl< bind2nd,Protect > +struct lambda_impl< bind2nd,Tag,Protect > { typedef false_ is_le; typedef bind2nd< F,T > type; diff --git a/include/boost/mpl/aux_/preprocessed/no_ctps/lambda_no_ctps.hpp b/include/boost/mpl/aux_/preprocessed/no_ctps/lambda_no_ctps.hpp index 23d1969..5cb1956 100644 --- a/include/boost/mpl/aux_/preprocessed/no_ctps/lambda_no_ctps.hpp +++ b/include/boost/mpl/aux_/preprocessed/no_ctps/lambda_no_ctps.hpp @@ -1,4 +1,4 @@ -// preprocessed version of 'boost/mpl/lambda_no_ctps.hpp' header +// preprocessed version of 'boost/mpl/aux_/config/use_preprocessed.hpp' header // see the original for copyright information namespace boost { @@ -8,7 +8,7 @@ namespace aux { template< int arity_, bool Protect > struct lambda_impl { - template< typename T > struct result_ + template< typename T, typename Tag > struct result_ { typedef T type; }; @@ -16,142 +16,184 @@ template< int arity_, bool Protect > struct lambda_impl template<> struct lambda_impl<1, false> { - template< typename F > struct result_ + template< typename F, typename Tag > struct result_ { typedef typename F::rebind f_; + typedef typename lambda< typename F::arg1, Tag, false >::type arg1; typedef bind1< f_ - , typename lambda< typename F::arg1, false >::type + , arg1 > type; }; }; template<> struct lambda_impl<1, true> { - template< typename F > struct result_ + template< typename F, typename Tag > struct result_ { typedef typename F::rebind f_; + typedef typename lambda< typename F::arg1, Tag, false >::type arg1; typedef mpl::protect< bind1< f_ - , typename lambda< typename F::arg1, false >::type + , arg1 > > type; }; }; template<> struct lambda_impl<2, false> { - template< typename F > struct result_ + template< typename F, typename Tag > struct result_ { typedef typename F::rebind f_; + typedef typename lambda< typename F::arg1, Tag, false >::type arg1; + typedef typename lambda< typename F::arg2, Tag, false >::type arg2; + + typedef bind2< f_ - - ,typename lambda< typename F::arg1, false >::type, typename lambda< typename F::arg2, false >::type + , arg1, arg2 > type; }; }; template<> struct lambda_impl<2, true> { - template< typename F > struct result_ + template< typename F, typename Tag > struct result_ { typedef typename F::rebind f_; + typedef typename lambda< typename F::arg1, Tag, false >::type arg1; + typedef typename lambda< typename F::arg2, Tag, false >::type arg2; + + typedef mpl::protect< bind2< f_ - - ,typename lambda< typename F::arg1, false >::type, typename lambda< typename F::arg2, false >::type + , arg1, arg2 > > type; }; }; template<> struct lambda_impl<3, false> { - template< typename F > struct result_ + template< typename F, typename Tag > struct result_ { typedef typename F::rebind f_; + typedef typename lambda< typename F::arg1, Tag, false >::type arg1; + typedef typename lambda< typename F::arg2, Tag, false >::type arg2; + typedef typename lambda< typename F::arg3, Tag, false >::type arg3; + + typedef bind3< f_ - - ,typename lambda< typename F::arg1, false >::type, typename lambda< typename F::arg2, false >::type, typename lambda< typename F::arg3, false >::type + , arg1, arg2, arg3 > type; }; }; template<> struct lambda_impl<3, true> { - template< typename F > struct result_ + template< typename F, typename Tag > struct result_ { typedef typename F::rebind f_; + typedef typename lambda< typename F::arg1, Tag, false >::type arg1; + typedef typename lambda< typename F::arg2, Tag, false >::type arg2; + typedef typename lambda< typename F::arg3, Tag, false >::type arg3; + + typedef mpl::protect< bind3< f_ - - ,typename lambda< typename F::arg1, false >::type, typename lambda< typename F::arg2, false >::type, typename lambda< typename F::arg3, false >::type + , arg1, arg2, arg3 > > type; }; }; template<> struct lambda_impl<4, false> { - template< typename F > struct result_ + template< typename F, typename Tag > struct result_ { typedef typename F::rebind f_; + typedef typename lambda< typename F::arg1, Tag, false >::type arg1; + typedef typename lambda< typename F::arg2, Tag, false >::type arg2; + typedef typename lambda< typename F::arg3, Tag, false >::type arg3; + typedef typename lambda< typename F::arg4, Tag, false >::type arg4; + + typedef bind4< f_ - - ,typename lambda< typename F::arg1, false >::type, typename lambda< typename F::arg2, false >::type, typename lambda< typename F::arg3, false >::type, typename lambda< typename F::arg4, false >::type + , arg1, arg2, arg3, arg4 > type; }; }; template<> struct lambda_impl<4, true> { - template< typename F > struct result_ + template< typename F, typename Tag > struct result_ { typedef typename F::rebind f_; + typedef typename lambda< typename F::arg1, Tag, false >::type arg1; + typedef typename lambda< typename F::arg2, Tag, false >::type arg2; + typedef typename lambda< typename F::arg3, Tag, false >::type arg3; + typedef typename lambda< typename F::arg4, Tag, false >::type arg4; + + typedef mpl::protect< bind4< f_ - - ,typename lambda< typename F::arg1, false >::type, typename lambda< typename F::arg2, false >::type, typename lambda< typename F::arg3, false >::type, typename lambda< typename F::arg4, false >::type + , arg1, arg2, arg3, arg4 > > type; }; }; template<> struct lambda_impl<5, false> { - template< typename F > struct result_ + template< typename F, typename Tag > struct result_ { typedef typename F::rebind f_; + typedef typename lambda< typename F::arg1, Tag, false >::type arg1; + typedef typename lambda< typename F::arg2, Tag, false >::type arg2; + typedef typename lambda< typename F::arg3, Tag, false >::type arg3; + typedef typename lambda< typename F::arg4, Tag, false >::type arg4; + typedef typename lambda< typename F::arg5, Tag, false >::type arg5; + + typedef bind5< f_ - - ,typename lambda< typename F::arg1, false >::type, typename lambda< typename F::arg2, false >::type, typename lambda< typename F::arg3, false >::type, typename lambda< typename F::arg4, false >::type, typename lambda< typename F::arg5, false >::type + , arg1, arg2, arg3, arg4, arg5 > type; }; }; template<> struct lambda_impl<5, true> { - template< typename F > struct result_ + template< typename F, typename Tag > struct result_ { typedef typename F::rebind f_; + typedef typename lambda< typename F::arg1, Tag, false >::type arg1; + typedef typename lambda< typename F::arg2, Tag, false >::type arg2; + typedef typename lambda< typename F::arg3, Tag, false >::type arg3; + typedef typename lambda< typename F::arg4, Tag, false >::type arg4; + typedef typename lambda< typename F::arg5, Tag, false >::type arg5; + + typedef mpl::protect< bind5< f_ - - ,typename lambda< typename F::arg1, false >::type, typename lambda< typename F::arg2, false >::type, typename lambda< typename F::arg3, false >::type, typename lambda< typename F::arg4, false >::type, typename lambda< typename F::arg5, false >::type + , arg1, arg2, arg3, arg4, arg5 > > type; }; }; } // namespace aux -template< typename T, bool Protect = true > +template< + typename T + , typename Tag = void_ + , bool Protect = true + > struct lambda : aux::lambda_impl< ::boost::mpl::aux::template_arity::value , Protect - >::template result_ + >::template result_< T,Tag > { }; diff --git a/include/boost/mpl/aux_/preprocessed/no_ctps/quote.hpp b/include/boost/mpl/aux_/preprocessed/no_ctps/quote.hpp index 4a8a6cc..8bdbbd9 100644 --- a/include/boost/mpl/aux_/preprocessed/no_ctps/quote.hpp +++ b/include/boost/mpl/aux_/preprocessed/no_ctps/quote.hpp @@ -1,9 +1,8 @@ -// preprocessed version of 'boost/mpl/quote.hpp' header +// preprocessed version of 'boost/mpl/aux_/config/use_preprocessed.hpp' header // see the original for copyright information namespace boost { namespace mpl { - template< bool > struct quote_impl { template< typename T > struct result_ @@ -22,6 +21,7 @@ template<> struct quote_impl template< template< typename P1 > class F + , typename Tag = void_ > struct quote1 { @@ -36,6 +36,7 @@ struct quote1 template< template< typename P1, typename P2 > class F + , typename Tag = void_ > struct quote2 { @@ -50,6 +51,7 @@ struct quote2 template< template< typename P1, typename P2, typename P3 > class F + , typename Tag = void_ > struct quote3 { @@ -64,6 +66,7 @@ struct quote3 template< template< typename P1, typename P2, typename P3, typename P4 > class F + , typename Tag = void_ > struct quote4 { @@ -85,6 +88,7 @@ template< , typename P5 > class F + , typename Tag = void_ > struct quote5 { diff --git a/include/boost/mpl/aux_/preprocessed/plain/full_lambda.hpp b/include/boost/mpl/aux_/preprocessed/plain/full_lambda.hpp index 0c0c9ea..e46ce7a 100644 --- a/include/boost/mpl/aux_/preprocessed/plain/full_lambda.hpp +++ b/include/boost/mpl/aux_/preprocessed/plain/full_lambda.hpp @@ -1,4 +1,4 @@ -// preprocessed version of 'boost/mpl/aux_/full_lambda.hpp' header +// preprocessed version of 'boost/mpl/aux_/lambda_expr.hpp' header // see the original for copyright information namespace boost { @@ -6,6 +6,7 @@ namespace mpl { template< typename T + , typename Tag , typename Protect = false_ > @@ -17,10 +18,11 @@ struct lambda_impl template< typename T + , typename Tag = void_ > struct lambda - : lambda_impl< T,false_ > + : lambda_impl< T,Tag,false_ > { }; @@ -43,8 +45,8 @@ struct lambda_or< false,false,false,false,false > } // namespace aux -template< int N, typename Protect > -struct lambda_impl< arg,Protect > +template< int N, typename Tag, typename Protect > +struct lambda_impl< arg,Tag,Protect > { typedef true_ is_le; typedef arg type; @@ -52,10 +54,12 @@ struct lambda_impl< arg,Protect > template< typename F + , typename Tag , typename Protect > struct lambda_impl< bind0 + , Tag , Protect > { @@ -68,16 +72,17 @@ struct lambda_impl< template< template< typename P1 > class F , typename T1 + , typename Tag > -struct lambda< F > - : lambda_impl< F,true_ > +struct lambda< F,Tag > + : lambda_impl< F,Tag,true_ > { }; namespace aux { template< - typename IsLE, typename Protect + typename IsLE, typename Tag, typename Protect , template< typename P1 > class F , typename L1 > @@ -90,24 +95,26 @@ struct le_result1 template< template< typename P1 > class F + , typename Tag , typename L1 > -struct le_result1< true_,false_,F,L1 > +struct le_result1< true_,Tag,false_,F,L1 > { typedef bind1< - quote1 + quote1< F,Tag > , typename L1::type > type; }; template< template< typename P1 > class F + , typename Tag , typename L1 > -struct le_result1< true_,true_,F,L1 > +struct le_result1< true_,Tag,true_,F,L1 > { typedef protect< bind1< - quote1 + quote1< F,Tag > , typename L1::type > > type; }; @@ -117,19 +124,21 @@ struct le_result1< true_,true_,F,L1 > template< template< typename P1 > class F , typename T1 + , typename Tag , typename Protect > struct lambda_impl< - F, Protect + F, Tag, Protect > { - typedef lambda_impl l1; + typedef lambda_impl< T1,Tag > l1; typedef aux::lambda_or< l1::is_le::value > is_le; typedef typename aux::le_result1< typename is_le::type + , Tag , Protect , F , l1 @@ -138,10 +147,12 @@ struct lambda_impl< template< typename F, typename T1 + , typename Tag , typename Protect > struct lambda_impl< bind1< F,T1 > + , Tag , Protect > { @@ -155,16 +166,17 @@ struct lambda_impl< template< template< typename P1, typename P2 > class F , typename T1, typename T2 + , typename Tag > -struct lambda< F > - : lambda_impl< F,true_ > +struct lambda< F,Tag > + : lambda_impl< F,Tag,true_ > { }; namespace aux { template< - typename IsLE, typename Protect + typename IsLE, typename Tag, typename Protect , template< typename P1, typename P2 > class F , typename L1, typename L2 > @@ -177,24 +189,26 @@ struct le_result2 template< template< typename P1, typename P2 > class F + , typename Tag , typename L1, typename L2 > -struct le_result2< true_,false_,F,L1,L2 > +struct le_result2< true_,Tag,false_,F,L1,L2 > { typedef bind2< - quote2 + quote2< F,Tag > , typename L1::type, typename L2::type > type; }; template< template< typename P1, typename P2 > class F + , typename Tag , typename L1, typename L2 > -struct le_result2< true_,true_,F,L1,L2 > +struct le_result2< true_,Tag,true_,F,L1,L2 > { typedef protect< bind2< - quote2 + quote2< F,Tag > , typename L1::type, typename L2::type > > type; }; @@ -204,14 +218,15 @@ struct le_result2< true_,true_,F,L1,L2 > template< template< typename P1, typename P2 > class F , typename T1, typename T2 + , typename Tag , typename Protect > struct lambda_impl< - F< T1,T2 >, Protect + F< T1,T2 >, Tag, Protect > { - typedef lambda_impl l1; - typedef lambda_impl l2; + typedef lambda_impl< T1,Tag > l1; + typedef lambda_impl< T2,Tag > l2; typedef aux::lambda_or< l1::is_le::value, l2::is_le::value @@ -219,6 +234,7 @@ struct lambda_impl< typedef typename aux::le_result2< typename is_le::type + , Tag , Protect , F , l1, l2 @@ -227,10 +243,12 @@ struct lambda_impl< template< typename F, typename T1, typename T2 + , typename Tag , typename Protect > struct lambda_impl< bind2< F,T1,T2 > + , Tag , Protect > { @@ -244,16 +262,17 @@ struct lambda_impl< template< template< typename P1, typename P2, typename P3 > class F , typename T1, typename T2, typename T3 + , typename Tag > -struct lambda< F > - : lambda_impl< F,true_ > +struct lambda< F,Tag > + : lambda_impl< F,Tag,true_ > { }; namespace aux { template< - typename IsLE, typename Protect + typename IsLE, typename Tag, typename Protect , template< typename P1, typename P2, typename P3 > class F , typename L1, typename L2, typename L3 > @@ -266,24 +285,26 @@ struct le_result3 template< template< typename P1, typename P2, typename P3 > class F + , typename Tag , typename L1, typename L2, typename L3 > -struct le_result3< true_,false_,F,L1,L2,L3 > +struct le_result3< true_,Tag,false_,F,L1,L2,L3 > { typedef bind3< - quote3 + quote3< F,Tag > , typename L1::type, typename L2::type, typename L3::type > type; }; template< template< typename P1, typename P2, typename P3 > class F + , typename Tag , typename L1, typename L2, typename L3 > -struct le_result3< true_,true_,F,L1,L2,L3 > +struct le_result3< true_,Tag,true_,F,L1,L2,L3 > { typedef protect< bind3< - quote3 + quote3< F,Tag > , typename L1::type, typename L2::type, typename L3::type > > type; }; @@ -293,15 +314,16 @@ struct le_result3< true_,true_,F,L1,L2,L3 > template< template< typename P1, typename P2, typename P3 > class F , typename T1, typename T2, typename T3 + , typename Tag , typename Protect > struct lambda_impl< - F< T1,T2,T3 >, Protect + F< T1,T2,T3 >, Tag, Protect > { - typedef lambda_impl l1; - typedef lambda_impl l2; - typedef lambda_impl l3; + typedef lambda_impl< T1,Tag > l1; + typedef lambda_impl< T2,Tag > l2; + typedef lambda_impl< T3,Tag > l3; typedef aux::lambda_or< l1::is_le::value, l2::is_le::value, l3::is_le::value @@ -309,6 +331,7 @@ struct lambda_impl< typedef typename aux::le_result3< typename is_le::type + , Tag , Protect , F , l1, l2, l3 @@ -317,10 +340,12 @@ struct lambda_impl< template< typename F, typename T1, typename T2, typename T3 + , typename Tag , typename Protect > struct lambda_impl< bind3< F,T1,T2,T3 > + , Tag , Protect > { @@ -334,16 +359,17 @@ struct lambda_impl< template< template< typename P1, typename P2, typename P3, typename P4 > class F , typename T1, typename T2, typename T3, typename T4 + , typename Tag > -struct lambda< F > - : lambda_impl< F,true_ > +struct lambda< F,Tag > + : lambda_impl< F,Tag,true_ > { }; namespace aux { template< - typename IsLE, typename Protect + typename IsLE, typename Tag, typename Protect , template< typename P1, typename P2, typename P3, typename P4 > class F , typename L1, typename L2, typename L3, typename L4 > @@ -357,12 +383,13 @@ struct le_result4 template< template< typename P1, typename P2, typename P3, typename P4 > class F + , typename Tag , typename L1, typename L2, typename L3, typename L4 > -struct le_result4< true_,false_,F,L1,L2,L3,L4 > +struct le_result4< true_,Tag,false_,F,L1,L2,L3,L4 > { typedef bind4< - quote4 + quote4< F,Tag > , typename L1::type, typename L2::type, typename L3::type , typename L4::type > type; @@ -370,12 +397,13 @@ struct le_result4< true_,false_,F,L1,L2,L3,L4 > template< template< typename P1, typename P2, typename P3, typename P4 > class F + , typename Tag , typename L1, typename L2, typename L3, typename L4 > -struct le_result4< true_,true_,F,L1,L2,L3,L4 > +struct le_result4< true_,Tag,true_,F,L1,L2,L3,L4 > { typedef protect< bind4< - quote4 + quote4< F,Tag > , typename L1::type, typename L2::type, typename L3::type , typename L4::type > > type; @@ -386,16 +414,17 @@ struct le_result4< true_,true_,F,L1,L2,L3,L4 > template< template< typename P1, typename P2, typename P3, typename P4 > class F , typename T1, typename T2, typename T3, typename T4 + , typename Tag , typename Protect > struct lambda_impl< - F< T1,T2,T3,T4 >, Protect + F< T1,T2,T3,T4 >, Tag, Protect > { - typedef lambda_impl l1; - typedef lambda_impl l2; - typedef lambda_impl l3; - typedef lambda_impl l4; + typedef lambda_impl< T1,Tag > l1; + typedef lambda_impl< T2,Tag > l2; + typedef lambda_impl< T3,Tag > l3; + typedef lambda_impl< T4,Tag > l4; typedef aux::lambda_or< l1::is_le::value, l2::is_le::value, l3::is_le::value @@ -404,6 +433,7 @@ struct lambda_impl< typedef typename aux::le_result4< typename is_le::type + , Tag , Protect , F , l1, l2, l3, l4 @@ -412,10 +442,12 @@ struct lambda_impl< template< typename F, typename T1, typename T2, typename T3, typename T4 + , typename Tag , typename Protect > struct lambda_impl< bind4< F,T1,T2,T3,T4 > + , Tag , Protect > { @@ -433,16 +465,17 @@ template< > class F , typename T1, typename T2, typename T3, typename T4, typename T5 + , typename Tag > -struct lambda< F > - : lambda_impl< F,true_ > +struct lambda< F,Tag > + : lambda_impl< F,Tag,true_ > { }; namespace aux { template< - typename IsLE, typename Protect + typename IsLE, typename Tag, typename Protect , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F , typename L1, typename L2, typename L3, typename L4, typename L5 > @@ -460,12 +493,13 @@ template< , typename P5 > class F + , typename Tag , typename L1, typename L2, typename L3, typename L4, typename L5 > -struct le_result5< true_,false_,F,L1,L2,L3,L4,L5 > +struct le_result5< true_,Tag,false_,F,L1,L2,L3,L4,L5 > { typedef bind5< - quote5 + quote5< F,Tag > , typename L1::type, typename L2::type, typename L3::type , typename L4::type, typename L5::type > type; @@ -477,12 +511,13 @@ template< , typename P5 > class F + , typename Tag , typename L1, typename L2, typename L3, typename L4, typename L5 > -struct le_result5< true_,true_,F,L1,L2,L3,L4,L5 > +struct le_result5< true_,Tag,true_,F,L1,L2,L3,L4,L5 > { typedef protect< bind5< - quote5 + quote5< F,Tag > , typename L1::type, typename L2::type, typename L3::type , typename L4::type, typename L5::type > > type; @@ -497,17 +532,18 @@ template< > class F , typename T1, typename T2, typename T3, typename T4, typename T5 + , typename Tag , typename Protect > struct lambda_impl< - F< T1,T2,T3,T4,T5 >, Protect + F< T1,T2,T3,T4,T5 >, Tag, Protect > { - typedef lambda_impl l1; - typedef lambda_impl l2; - typedef lambda_impl l3; - typedef lambda_impl l4; - typedef lambda_impl l5; + typedef lambda_impl< T1,Tag > l1; + typedef lambda_impl< T2,Tag > l2; + typedef lambda_impl< T3,Tag > l3; + typedef lambda_impl< T4,Tag > l4; + typedef lambda_impl< T5,Tag > l5; typedef aux::lambda_or< l1::is_le::value, l2::is_le::value, l3::is_le::value @@ -516,6 +552,7 @@ struct lambda_impl< typedef typename aux::le_result5< typename is_le::type + , Tag , Protect , F , l1, l2, l3, l4, l5 @@ -525,10 +562,12 @@ struct lambda_impl< template< typename F, typename T1, typename T2, typename T3, typename T4 , typename T5 + , typename Tag , typename Protect > struct lambda_impl< bind5< F,T1,T2,T3,T4,T5 > + , Tag , Protect > { @@ -540,8 +579,8 @@ struct lambda_impl< }; // special case for 'protect' -template< typename T, typename Protect > -struct lambda_impl< protect,Protect > +template< typename T, typename Tag, typename Protect > +struct lambda_impl< protect,Tag,Protect > { typedef false_ is_le; typedef protect type; @@ -552,10 +591,12 @@ struct lambda_impl< protect,Protect > template< typename F, typename T1, typename T2, typename T3, typename T4 , typename T5 + , typename Tag , typename Protect > struct lambda_impl< bind< F,T1,T2,T3,T4,T5 > + , Tag , Protect > @@ -566,9 +607,10 @@ struct lambda_impl< template< typename F, typename T + , typename Tag , typename Protect > -struct lambda_impl< bind1st,Protect > +struct lambda_impl< bind1st,Tag,Protect > { typedef false_ is_le; typedef bind1st< F,T > type; @@ -576,9 +618,10 @@ struct lambda_impl< bind1st,Protect > template< typename F, typename T + , typename Tag , typename Protect > -struct lambda_impl< bind2nd,Protect > +struct lambda_impl< bind2nd,Tag,Protect > { typedef false_ is_le; typedef bind2nd< F,T > type; diff --git a/include/boost/mpl/aux_/preprocessed/plain/lambda_no_ctps.hpp b/include/boost/mpl/aux_/preprocessed/plain/lambda_no_ctps.hpp index 23d1969..5cb1956 100644 --- a/include/boost/mpl/aux_/preprocessed/plain/lambda_no_ctps.hpp +++ b/include/boost/mpl/aux_/preprocessed/plain/lambda_no_ctps.hpp @@ -1,4 +1,4 @@ -// preprocessed version of 'boost/mpl/lambda_no_ctps.hpp' header +// preprocessed version of 'boost/mpl/aux_/config/use_preprocessed.hpp' header // see the original for copyright information namespace boost { @@ -8,7 +8,7 @@ namespace aux { template< int arity_, bool Protect > struct lambda_impl { - template< typename T > struct result_ + template< typename T, typename Tag > struct result_ { typedef T type; }; @@ -16,142 +16,184 @@ template< int arity_, bool Protect > struct lambda_impl template<> struct lambda_impl<1, false> { - template< typename F > struct result_ + template< typename F, typename Tag > struct result_ { typedef typename F::rebind f_; + typedef typename lambda< typename F::arg1, Tag, false >::type arg1; typedef bind1< f_ - , typename lambda< typename F::arg1, false >::type + , arg1 > type; }; }; template<> struct lambda_impl<1, true> { - template< typename F > struct result_ + template< typename F, typename Tag > struct result_ { typedef typename F::rebind f_; + typedef typename lambda< typename F::arg1, Tag, false >::type arg1; typedef mpl::protect< bind1< f_ - , typename lambda< typename F::arg1, false >::type + , arg1 > > type; }; }; template<> struct lambda_impl<2, false> { - template< typename F > struct result_ + template< typename F, typename Tag > struct result_ { typedef typename F::rebind f_; + typedef typename lambda< typename F::arg1, Tag, false >::type arg1; + typedef typename lambda< typename F::arg2, Tag, false >::type arg2; + + typedef bind2< f_ - - ,typename lambda< typename F::arg1, false >::type, typename lambda< typename F::arg2, false >::type + , arg1, arg2 > type; }; }; template<> struct lambda_impl<2, true> { - template< typename F > struct result_ + template< typename F, typename Tag > struct result_ { typedef typename F::rebind f_; + typedef typename lambda< typename F::arg1, Tag, false >::type arg1; + typedef typename lambda< typename F::arg2, Tag, false >::type arg2; + + typedef mpl::protect< bind2< f_ - - ,typename lambda< typename F::arg1, false >::type, typename lambda< typename F::arg2, false >::type + , arg1, arg2 > > type; }; }; template<> struct lambda_impl<3, false> { - template< typename F > struct result_ + template< typename F, typename Tag > struct result_ { typedef typename F::rebind f_; + typedef typename lambda< typename F::arg1, Tag, false >::type arg1; + typedef typename lambda< typename F::arg2, Tag, false >::type arg2; + typedef typename lambda< typename F::arg3, Tag, false >::type arg3; + + typedef bind3< f_ - - ,typename lambda< typename F::arg1, false >::type, typename lambda< typename F::arg2, false >::type, typename lambda< typename F::arg3, false >::type + , arg1, arg2, arg3 > type; }; }; template<> struct lambda_impl<3, true> { - template< typename F > struct result_ + template< typename F, typename Tag > struct result_ { typedef typename F::rebind f_; + typedef typename lambda< typename F::arg1, Tag, false >::type arg1; + typedef typename lambda< typename F::arg2, Tag, false >::type arg2; + typedef typename lambda< typename F::arg3, Tag, false >::type arg3; + + typedef mpl::protect< bind3< f_ - - ,typename lambda< typename F::arg1, false >::type, typename lambda< typename F::arg2, false >::type, typename lambda< typename F::arg3, false >::type + , arg1, arg2, arg3 > > type; }; }; template<> struct lambda_impl<4, false> { - template< typename F > struct result_ + template< typename F, typename Tag > struct result_ { typedef typename F::rebind f_; + typedef typename lambda< typename F::arg1, Tag, false >::type arg1; + typedef typename lambda< typename F::arg2, Tag, false >::type arg2; + typedef typename lambda< typename F::arg3, Tag, false >::type arg3; + typedef typename lambda< typename F::arg4, Tag, false >::type arg4; + + typedef bind4< f_ - - ,typename lambda< typename F::arg1, false >::type, typename lambda< typename F::arg2, false >::type, typename lambda< typename F::arg3, false >::type, typename lambda< typename F::arg4, false >::type + , arg1, arg2, arg3, arg4 > type; }; }; template<> struct lambda_impl<4, true> { - template< typename F > struct result_ + template< typename F, typename Tag > struct result_ { typedef typename F::rebind f_; + typedef typename lambda< typename F::arg1, Tag, false >::type arg1; + typedef typename lambda< typename F::arg2, Tag, false >::type arg2; + typedef typename lambda< typename F::arg3, Tag, false >::type arg3; + typedef typename lambda< typename F::arg4, Tag, false >::type arg4; + + typedef mpl::protect< bind4< f_ - - ,typename lambda< typename F::arg1, false >::type, typename lambda< typename F::arg2, false >::type, typename lambda< typename F::arg3, false >::type, typename lambda< typename F::arg4, false >::type + , arg1, arg2, arg3, arg4 > > type; }; }; template<> struct lambda_impl<5, false> { - template< typename F > struct result_ + template< typename F, typename Tag > struct result_ { typedef typename F::rebind f_; + typedef typename lambda< typename F::arg1, Tag, false >::type arg1; + typedef typename lambda< typename F::arg2, Tag, false >::type arg2; + typedef typename lambda< typename F::arg3, Tag, false >::type arg3; + typedef typename lambda< typename F::arg4, Tag, false >::type arg4; + typedef typename lambda< typename F::arg5, Tag, false >::type arg5; + + typedef bind5< f_ - - ,typename lambda< typename F::arg1, false >::type, typename lambda< typename F::arg2, false >::type, typename lambda< typename F::arg3, false >::type, typename lambda< typename F::arg4, false >::type, typename lambda< typename F::arg5, false >::type + , arg1, arg2, arg3, arg4, arg5 > type; }; }; template<> struct lambda_impl<5, true> { - template< typename F > struct result_ + template< typename F, typename Tag > struct result_ { typedef typename F::rebind f_; + typedef typename lambda< typename F::arg1, Tag, false >::type arg1; + typedef typename lambda< typename F::arg2, Tag, false >::type arg2; + typedef typename lambda< typename F::arg3, Tag, false >::type arg3; + typedef typename lambda< typename F::arg4, Tag, false >::type arg4; + typedef typename lambda< typename F::arg5, Tag, false >::type arg5; + + typedef mpl::protect< bind5< f_ - - ,typename lambda< typename F::arg1, false >::type, typename lambda< typename F::arg2, false >::type, typename lambda< typename F::arg3, false >::type, typename lambda< typename F::arg4, false >::type, typename lambda< typename F::arg5, false >::type + , arg1, arg2, arg3, arg4, arg5 > > type; }; }; } // namespace aux -template< typename T, bool Protect = true > +template< + typename T + , typename Tag = void_ + , bool Protect = true + > struct lambda : aux::lambda_impl< ::boost::mpl::aux::template_arity::value , Protect - >::template result_ + >::template result_< T,Tag > { }; diff --git a/include/boost/mpl/aux_/preprocessed/plain/quote.hpp b/include/boost/mpl/aux_/preprocessed/plain/quote.hpp index 0a8e644..363c114 100644 --- a/include/boost/mpl/aux_/preprocessed/plain/quote.hpp +++ b/include/boost/mpl/aux_/preprocessed/plain/quote.hpp @@ -1,4 +1,4 @@ -// preprocessed version of 'boost/mpl/quote.hpp' header +// preprocessed version of 'boost/mpl/aux_/config/use_preprocessed.hpp' header // see the original for copyright information namespace boost { @@ -19,6 +19,7 @@ struct quote_impl< T,false > template< template< typename P1 > class F + , typename Tag = void_ > struct quote1 { @@ -32,6 +33,7 @@ struct quote1 template< template< typename P1, typename P2 > class F + , typename Tag = void_ > struct quote2 { @@ -45,6 +47,7 @@ struct quote2 template< template< typename P1, typename P2, typename P3 > class F + , typename Tag = void_ > struct quote3 { @@ -58,6 +61,7 @@ struct quote3 template< template< typename P1, typename P2, typename P3, typename P4 > class F + , typename Tag = void_ > struct quote4 { @@ -78,6 +82,7 @@ template< , typename P5 > class F + , typename Tag = void_ > struct quote5 { diff --git a/include/boost/mpl/aux_/void_spec.hpp b/include/boost/mpl/aux_/void_spec.hpp index 7363aa0..be850f4 100644 --- a/include/boost/mpl/aux_/void_spec.hpp +++ b/include/boost/mpl/aux_/void_spec.hpp @@ -78,6 +78,7 @@ struct name< BOOST_MPL_AUX_VOID_SPEC_PARAMS(i) > \ template<> \ struct lambda< \ name< BOOST_MPL_AUX_VOID_SPEC_PARAMS(i) > \ + , void_ \ , true \ > \ { \ @@ -89,6 +90,7 @@ struct lambda< \ template<> \ struct lambda< \ name< BOOST_MPL_AUX_VOID_SPEC_PARAMS(i) > \ + , void_ \ BOOST_MPL_AUX_LAMBDA_ARITY_PARAM(int_<-1>) \ > \ { \ diff --git a/include/boost/mpl/lambda_fwd.hpp b/include/boost/mpl/lambda_fwd.hpp index a4680b5..cb9f2b8 100644 --- a/include/boost/mpl/lambda_fwd.hpp +++ b/include/boost/mpl/lambda_fwd.hpp @@ -1,9 +1,11 @@ -//----------------------------------------------------------------------------- -// boost mpl/labmda_fwd.hpp header file -// See http://www.boost.org for updates, documentation, and revision history. -//----------------------------------------------------------------------------- -// -// Copyright (c) 2001-02 + +#ifndef BOOST_MPL_LAMBDA_FWD_HPP_INCLUDED +#define BOOST_MPL_LAMBDA_FWD_HPP_INCLUDED + +// + file: boost/mpl/labmda_fwd.hpp +// + last modified: 02/aug/03 + +// Copyright (c) 2001-03 // Aleksey Gurtovoy // // Permission to use, copy, modify, distribute and sell this software @@ -13,9 +15,8 @@ // supporting documentation. No representations are made about the // suitability of this software for any purpose. It is provided "as is" // without express or implied warranty. - -#ifndef BOOST_MPL_LAMBDA_FWD_HPP_INCLUDED -#define BOOST_MPL_LAMBDA_FWD_HPP_INCLUDED +// +// See http://www.boost.org/libs/mpl for documentation. #include "boost/mpl/aux_/lambda_arity_param.hpp" #include "boost/mpl/aux_/config/lambda.hpp" @@ -24,10 +25,23 @@ namespace boost { namespace mpl { #if !defined(BOOST_MPL_NO_FULL_LAMBDA_SUPPORT) -template< typename T BOOST_MPL_AUX_LAMBDA_ARITY_PARAM(typename Arity) > + +template< + typename T + , typename Tag + BOOST_MPL_AUX_LAMBDA_ARITY_PARAM(typename Arity) + > struct lambda; + #else -template< typename T, bool Protect > struct lambda; + +template< + typename T + , typename Tag + , bool Protect + > +struct lambda; + #endif } // namespace mpl diff --git a/include/boost/mpl/quote.hpp b/include/boost/mpl/quote.hpp index d6dd6c3..3b330c9 100644 --- a/include/boost/mpl/quote.hpp +++ b/include/boost/mpl/quote.hpp @@ -1,9 +1,15 @@ -//----------------------------------------------------------------------------- -// boost mpl/quote.hpp header file -// See http://www.boost.org for updates, documentation, and revision history. -//----------------------------------------------------------------------------- -// -// Copyright (c) 2000-02 + +#if !defined(BOOST_PP_IS_ITERATING) + +///// header body + +#ifndef BOOST_MPL_QUOTE_HPP_INCLUDED +#define BOOST_MPL_QUOTE_HPP_INCLUDED + +// + file: boost/mpl/quote.hpp +// + last modified: 02/aug/03 + +// Copyright (c) 2000-03 // Aleksey Gurtovoy // // Permission to use, copy, modify, distribute and sell this software @@ -13,15 +19,11 @@ // supporting documentation. No representations are made about the // suitability of this software for any purpose. It is provided "as is" // without express or implied warranty. - -#if !defined(BOOST_PP_IS_ITERATING) - -///// header body - -#ifndef BOOST_MPL_QUOTE_HPP_INCLUDED -#define BOOST_MPL_QUOTE_HPP_INCLUDED +// +// See http://www.boost.org/libs/mpl for documentation. #if !defined(BOOST_MPL_PREPROCESSING_MODE) +# include "boost/mpl/void.hpp" # include "boost/mpl/aux_/has_type.hpp" #endif @@ -39,6 +41,7 @@ # include "boost/mpl/aux_/preprocessor/params.hpp" # include "boost/mpl/aux_/config/ttp.hpp" # include "boost/mpl/aux_/config/ctps.hpp" +# include "boost/mpl/aux_/config/workaround.hpp" # include "boost/preprocessor/iterate.hpp" # include "boost/preprocessor/cat.hpp" @@ -52,7 +55,7 @@ namespace mpl { template< typename T, bool has_type_ = aux::has_type::value > struct quote_impl -#if !defined(__BORLANDC__) && (__BORLANDC__ <= 0x561 || !defined(BOOST_STRICT_CONFIG)) +#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x561)) : T { #else @@ -106,6 +109,7 @@ template<> struct quote_impl template< template< BOOST_MPL_PP_PARAMS(i, typename P) > class F + , typename Tag = void_ > struct BOOST_PP_CAT(quote,i) {