From abc3e73052a099ba2c02ff378e21aa477ab299f0 Mon Sep 17 00:00:00 2001 From: Aleksey Gurtovoy Date: Fri, 17 Dec 2004 17:49:06 +0000 Subject: [PATCH] support for N-ary numeric metafunctions for no-CTPS compilers [SVN r26546] --- include/boost/mpl/aux_/numeric_op.hpp | 73 +++++++++++++++---- .../mpl/aux_/preprocessed/bcc/equal_to.hpp | 1 + .../mpl/aux_/preprocessed/bcc/greater.hpp | 1 + .../aux_/preprocessed/bcc/greater_equal.hpp | 1 + .../boost/mpl/aux_/preprocessed/bcc/less.hpp | 1 + .../mpl/aux_/preprocessed/bcc/less_equal.hpp | 1 + .../mpl/aux_/preprocessed/bcc/modulus.hpp | 1 + .../aux_/preprocessed/bcc/not_equal_to.hpp | 1 + .../mpl/aux_/preprocessed/bcc/shift_left.hpp | 1 + .../mpl/aux_/preprocessed/bcc/shift_right.hpp | 1 + .../mpl/aux_/preprocessed/bcc551/equal_to.hpp | 1 + .../mpl/aux_/preprocessed/bcc551/greater.hpp | 1 + .../preprocessed/bcc551/greater_equal.hpp | 1 + .../mpl/aux_/preprocessed/bcc551/less.hpp | 1 + .../aux_/preprocessed/bcc551/less_equal.hpp | 1 + .../mpl/aux_/preprocessed/bcc551/modulus.hpp | 1 + .../aux_/preprocessed/bcc551/not_equal_to.hpp | 1 + .../aux_/preprocessed/bcc551/shift_left.hpp | 1 + .../aux_/preprocessed/bcc551/shift_right.hpp | 1 + .../mpl/aux_/preprocessed/dmc/equal_to.hpp | 1 + .../mpl/aux_/preprocessed/dmc/greater.hpp | 1 + .../aux_/preprocessed/dmc/greater_equal.hpp | 1 + .../boost/mpl/aux_/preprocessed/dmc/less.hpp | 1 + .../mpl/aux_/preprocessed/dmc/less_equal.hpp | 1 + .../mpl/aux_/preprocessed/dmc/modulus.hpp | 1 + .../aux_/preprocessed/dmc/not_equal_to.hpp | 1 + .../mpl/aux_/preprocessed/dmc/shift_left.hpp | 1 + .../mpl/aux_/preprocessed/dmc/shift_right.hpp | 1 + .../mpl/aux_/preprocessed/gcc/equal_to.hpp | 1 + .../mpl/aux_/preprocessed/gcc/greater.hpp | 1 + .../aux_/preprocessed/gcc/greater_equal.hpp | 1 + .../boost/mpl/aux_/preprocessed/gcc/less.hpp | 1 + .../mpl/aux_/preprocessed/gcc/less_equal.hpp | 1 + .../mpl/aux_/preprocessed/gcc/modulus.hpp | 1 + .../aux_/preprocessed/gcc/not_equal_to.hpp | 1 + .../mpl/aux_/preprocessed/gcc/shift_left.hpp | 1 + .../mpl/aux_/preprocessed/gcc/shift_right.hpp | 1 + .../mpl/aux_/preprocessed/msvc60/bitand.hpp | 38 +++++++++- .../mpl/aux_/preprocessed/msvc60/bitor.hpp | 38 +++++++++- .../mpl/aux_/preprocessed/msvc60/bitxor.hpp | 38 +++++++++- .../mpl/aux_/preprocessed/msvc60/divides.hpp | 38 +++++++++- .../mpl/aux_/preprocessed/msvc60/minus.hpp | 38 +++++++++- .../mpl/aux_/preprocessed/msvc60/plus.hpp | 38 +++++++++- .../mpl/aux_/preprocessed/msvc60/times.hpp | 38 +++++++++- .../mpl/aux_/preprocessed/msvc70/bitand.hpp | 38 +++++++++- .../mpl/aux_/preprocessed/msvc70/bitor.hpp | 38 +++++++++- .../mpl/aux_/preprocessed/msvc70/bitxor.hpp | 38 +++++++++- .../mpl/aux_/preprocessed/msvc70/divides.hpp | 38 +++++++++- .../mpl/aux_/preprocessed/msvc70/minus.hpp | 38 +++++++++- .../mpl/aux_/preprocessed/msvc70/plus.hpp | 38 +++++++++- .../mpl/aux_/preprocessed/msvc70/times.hpp | 38 +++++++++- .../mpl/aux_/preprocessed/mwcw/equal_to.hpp | 1 + .../mpl/aux_/preprocessed/mwcw/greater.hpp | 1 + .../aux_/preprocessed/mwcw/greater_equal.hpp | 1 + .../boost/mpl/aux_/preprocessed/mwcw/less.hpp | 1 + .../mpl/aux_/preprocessed/mwcw/less_equal.hpp | 1 + .../mpl/aux_/preprocessed/mwcw/modulus.hpp | 1 + .../aux_/preprocessed/mwcw/not_equal_to.hpp | 1 + .../mpl/aux_/preprocessed/mwcw/shift_left.hpp | 1 + .../aux_/preprocessed/mwcw/shift_right.hpp | 1 + .../mpl/aux_/preprocessed/no_ctps/bitand.hpp | 38 +++++++++- .../mpl/aux_/preprocessed/no_ctps/bitor.hpp | 38 +++++++++- .../mpl/aux_/preprocessed/no_ctps/bitxor.hpp | 38 +++++++++- .../mpl/aux_/preprocessed/no_ctps/divides.hpp | 38 +++++++++- .../aux_/preprocessed/no_ctps/equal_to.hpp | 1 + .../mpl/aux_/preprocessed/no_ctps/greater.hpp | 1 + .../preprocessed/no_ctps/greater_equal.hpp | 1 + .../mpl/aux_/preprocessed/no_ctps/less.hpp | 1 + .../aux_/preprocessed/no_ctps/less_equal.hpp | 1 + .../mpl/aux_/preprocessed/no_ctps/minus.hpp | 38 +++++++++- .../mpl/aux_/preprocessed/no_ctps/modulus.hpp | 1 + .../preprocessed/no_ctps/not_equal_to.hpp | 1 + .../mpl/aux_/preprocessed/no_ctps/plus.hpp | 38 +++++++++- .../aux_/preprocessed/no_ctps/shift_left.hpp | 1 + .../aux_/preprocessed/no_ctps/shift_right.hpp | 1 + .../mpl/aux_/preprocessed/no_ctps/times.hpp | 38 +++++++++- .../mpl/aux_/preprocessed/no_ttp/equal_to.hpp | 1 + .../mpl/aux_/preprocessed/no_ttp/greater.hpp | 1 + .../preprocessed/no_ttp/greater_equal.hpp | 1 + .../mpl/aux_/preprocessed/no_ttp/less.hpp | 1 + .../aux_/preprocessed/no_ttp/less_equal.hpp | 1 + .../mpl/aux_/preprocessed/no_ttp/modulus.hpp | 1 + .../aux_/preprocessed/no_ttp/not_equal_to.hpp | 1 + .../aux_/preprocessed/no_ttp/shift_left.hpp | 1 + .../aux_/preprocessed/no_ttp/shift_right.hpp | 1 + .../mpl/aux_/preprocessed/plain/equal_to.hpp | 1 + .../mpl/aux_/preprocessed/plain/greater.hpp | 1 + .../aux_/preprocessed/plain/greater_equal.hpp | 1 + .../mpl/aux_/preprocessed/plain/less.hpp | 1 + .../aux_/preprocessed/plain/less_equal.hpp | 1 + .../mpl/aux_/preprocessed/plain/modulus.hpp | 1 + .../aux_/preprocessed/plain/not_equal_to.hpp | 1 + .../aux_/preprocessed/plain/shift_left.hpp | 1 + .../aux_/preprocessed/plain/shift_right.hpp | 1 + 94 files changed, 885 insertions(+), 58 deletions(-) diff --git a/include/boost/mpl/aux_/numeric_op.hpp b/include/boost/mpl/aux_/numeric_op.hpp index 6415aa0..92f2622 100644 --- a/include/boost/mpl/aux_/numeric_op.hpp +++ b/include/boost/mpl/aux_/numeric_op.hpp @@ -20,7 +20,7 @@ #if !defined(BOOST_MPL_PREPROCESSING_MODE) # include # include -# include +# include # include # include # include @@ -41,6 +41,7 @@ # include # include # include +# include # include # include # include @@ -51,16 +52,13 @@ # include # include +# include # include # include #if !defined(AUX778076_OP_ARITY) -# if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) -# define AUX778076_OP_ARITY BOOST_MPL_LIMIT_METAFUNCTION_ARITY -# else -# define AUX778076_OP_ARITY 2 -# endif +# define AUX778076_OP_ARITY BOOST_MPL_LIMIT_METAFUNCTION_ARITY #endif #if !defined(AUX778076_OP_IMPL_NAME) @@ -81,12 +79,12 @@ template< , BOOST_MPL_AUX_NTTP_DECL(int, tag2_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value > struct AUX778076_OP_IMPL_NAME - : eval_if_c< + : if_c< ( tag1_ > tag2_ ) #else > struct AUX778076_OP_IMPL_NAME - : eval_if_c< + : if_c< ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) ) @@ -160,13 +158,9 @@ template< typename T > struct AUX778076_OP_TAG_NAME #endif -#if AUX778076_OP_ARITY == 2 -template< - typename BOOST_MPL_AUX_NA_PARAM(N1) - , typename BOOST_MPL_AUX_NA_PARAM(N2) - > -struct AUX778076_OP_NAME -#else +#if AUX778076_OP_ARITY != 2 + +# if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) # define AUX778076_OP_RIGHT_OPERAND(unused, i, N) , BOOST_PP_CAT(N, BOOST_MPL_PP_ADD(i, 2))> # define AUX778076_OP_N_CALLS(i, N) \ @@ -196,7 +190,54 @@ struct AUX778076_OP_NAME # undef AUX778076_OP_N_CALLS # undef AUX778076_OP_RIGHT_OPERAND -#endif // AUX778076_OP_ARITY == 2 +# else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION + +/// forward declaration +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct BOOST_PP_CAT(AUX778076_OP_NAME,2); + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + BOOST_MPL_PP_DEF_PARAMS_TAIL(2, typename N, na) + > +struct AUX778076_OP_NAME + : if_< + is_na + , BOOST_PP_CAT(AUX778076_OP_NAME,2) + , AUX778076_OP_NAME< + BOOST_PP_CAT(AUX778076_OP_NAME,2) + , BOOST_MPL_PP_EXT_PARAMS(3, BOOST_PP_INC(AUX778076_OP_ARITY), N) + > + >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + AUX778076_OP_ARITY + , AUX778076_OP_NAME + , ( BOOST_MPL_PP_PARAMS(AUX778076_OP_ARITY, N) ) + ) +}; + +template< + typename N1 + , typename N2 + > +struct BOOST_PP_CAT(AUX778076_OP_NAME,2) + +#endif + +#else // AUX778076_OP_ARITY == 2 + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + > +struct AUX778076_OP_NAME + +#endif #if !defined(BOOST_MPL_CFG_MSVC_ETI_BUG) : AUX778076_OP_IMPL_NAME< diff --git a/include/boost/mpl/aux_/preprocessed/bcc/equal_to.hpp b/include/boost/mpl/aux_/preprocessed/bcc/equal_to.hpp index 4d9db27..62c9945 100644 --- a/include/boost/mpl/aux_/preprocessed/bcc/equal_to.hpp +++ b/include/boost/mpl/aux_/preprocessed/bcc/equal_to.hpp @@ -65,6 +65,7 @@ template< , typename BOOST_MPL_AUX_NA_PARAM(N2) > struct equal_to + : equal_to_impl< typename equal_to_tag::type , typename equal_to_tag::type diff --git a/include/boost/mpl/aux_/preprocessed/bcc/greater.hpp b/include/boost/mpl/aux_/preprocessed/bcc/greater.hpp index ddbb9f8..14d8e08 100644 --- a/include/boost/mpl/aux_/preprocessed/bcc/greater.hpp +++ b/include/boost/mpl/aux_/preprocessed/bcc/greater.hpp @@ -65,6 +65,7 @@ template< , typename BOOST_MPL_AUX_NA_PARAM(N2) > struct greater + : greater_impl< typename greater_tag::type , typename greater_tag::type diff --git a/include/boost/mpl/aux_/preprocessed/bcc/greater_equal.hpp b/include/boost/mpl/aux_/preprocessed/bcc/greater_equal.hpp index 0444043..2603f91 100644 --- a/include/boost/mpl/aux_/preprocessed/bcc/greater_equal.hpp +++ b/include/boost/mpl/aux_/preprocessed/bcc/greater_equal.hpp @@ -65,6 +65,7 @@ template< , typename BOOST_MPL_AUX_NA_PARAM(N2) > struct greater_equal + : greater_equal_impl< typename greater_equal_tag::type , typename greater_equal_tag::type diff --git a/include/boost/mpl/aux_/preprocessed/bcc/less.hpp b/include/boost/mpl/aux_/preprocessed/bcc/less.hpp index 8c04934..4fe3cd1 100644 --- a/include/boost/mpl/aux_/preprocessed/bcc/less.hpp +++ b/include/boost/mpl/aux_/preprocessed/bcc/less.hpp @@ -65,6 +65,7 @@ template< , typename BOOST_MPL_AUX_NA_PARAM(N2) > struct less + : less_impl< typename less_tag::type , typename less_tag::type diff --git a/include/boost/mpl/aux_/preprocessed/bcc/less_equal.hpp b/include/boost/mpl/aux_/preprocessed/bcc/less_equal.hpp index 0dff11e..ca2894f 100644 --- a/include/boost/mpl/aux_/preprocessed/bcc/less_equal.hpp +++ b/include/boost/mpl/aux_/preprocessed/bcc/less_equal.hpp @@ -65,6 +65,7 @@ template< , typename BOOST_MPL_AUX_NA_PARAM(N2) > struct less_equal + : less_equal_impl< typename less_equal_tag::type , typename less_equal_tag::type diff --git a/include/boost/mpl/aux_/preprocessed/bcc/modulus.hpp b/include/boost/mpl/aux_/preprocessed/bcc/modulus.hpp index 5822434..224b349 100644 --- a/include/boost/mpl/aux_/preprocessed/bcc/modulus.hpp +++ b/include/boost/mpl/aux_/preprocessed/bcc/modulus.hpp @@ -65,6 +65,7 @@ template< , typename BOOST_MPL_AUX_NA_PARAM(N2) > struct modulus + : modulus_impl< typename modulus_tag::type , typename modulus_tag::type diff --git a/include/boost/mpl/aux_/preprocessed/bcc/not_equal_to.hpp b/include/boost/mpl/aux_/preprocessed/bcc/not_equal_to.hpp index 037842e..98b21b1 100644 --- a/include/boost/mpl/aux_/preprocessed/bcc/not_equal_to.hpp +++ b/include/boost/mpl/aux_/preprocessed/bcc/not_equal_to.hpp @@ -65,6 +65,7 @@ template< , typename BOOST_MPL_AUX_NA_PARAM(N2) > struct not_equal_to + : not_equal_to_impl< typename not_equal_to_tag::type , typename not_equal_to_tag::type diff --git a/include/boost/mpl/aux_/preprocessed/bcc/shift_left.hpp b/include/boost/mpl/aux_/preprocessed/bcc/shift_left.hpp index de85b3b..b5b181c 100644 --- a/include/boost/mpl/aux_/preprocessed/bcc/shift_left.hpp +++ b/include/boost/mpl/aux_/preprocessed/bcc/shift_left.hpp @@ -66,6 +66,7 @@ template< , typename BOOST_MPL_AUX_NA_PARAM(N2) > struct shift_left + : shift_left_impl< typename shift_left_tag::type , typename shift_left_tag::type diff --git a/include/boost/mpl/aux_/preprocessed/bcc/shift_right.hpp b/include/boost/mpl/aux_/preprocessed/bcc/shift_right.hpp index e73bb4a..f7a342e 100644 --- a/include/boost/mpl/aux_/preprocessed/bcc/shift_right.hpp +++ b/include/boost/mpl/aux_/preprocessed/bcc/shift_right.hpp @@ -66,6 +66,7 @@ template< , typename BOOST_MPL_AUX_NA_PARAM(N2) > struct shift_right + : shift_right_impl< typename shift_right_tag::type , typename shift_right_tag::type diff --git a/include/boost/mpl/aux_/preprocessed/bcc551/equal_to.hpp b/include/boost/mpl/aux_/preprocessed/bcc551/equal_to.hpp index 4d9db27..62c9945 100644 --- a/include/boost/mpl/aux_/preprocessed/bcc551/equal_to.hpp +++ b/include/boost/mpl/aux_/preprocessed/bcc551/equal_to.hpp @@ -65,6 +65,7 @@ template< , typename BOOST_MPL_AUX_NA_PARAM(N2) > struct equal_to + : equal_to_impl< typename equal_to_tag::type , typename equal_to_tag::type diff --git a/include/boost/mpl/aux_/preprocessed/bcc551/greater.hpp b/include/boost/mpl/aux_/preprocessed/bcc551/greater.hpp index ddbb9f8..14d8e08 100644 --- a/include/boost/mpl/aux_/preprocessed/bcc551/greater.hpp +++ b/include/boost/mpl/aux_/preprocessed/bcc551/greater.hpp @@ -65,6 +65,7 @@ template< , typename BOOST_MPL_AUX_NA_PARAM(N2) > struct greater + : greater_impl< typename greater_tag::type , typename greater_tag::type diff --git a/include/boost/mpl/aux_/preprocessed/bcc551/greater_equal.hpp b/include/boost/mpl/aux_/preprocessed/bcc551/greater_equal.hpp index 0444043..2603f91 100644 --- a/include/boost/mpl/aux_/preprocessed/bcc551/greater_equal.hpp +++ b/include/boost/mpl/aux_/preprocessed/bcc551/greater_equal.hpp @@ -65,6 +65,7 @@ template< , typename BOOST_MPL_AUX_NA_PARAM(N2) > struct greater_equal + : greater_equal_impl< typename greater_equal_tag::type , typename greater_equal_tag::type diff --git a/include/boost/mpl/aux_/preprocessed/bcc551/less.hpp b/include/boost/mpl/aux_/preprocessed/bcc551/less.hpp index 8c04934..4fe3cd1 100644 --- a/include/boost/mpl/aux_/preprocessed/bcc551/less.hpp +++ b/include/boost/mpl/aux_/preprocessed/bcc551/less.hpp @@ -65,6 +65,7 @@ template< , typename BOOST_MPL_AUX_NA_PARAM(N2) > struct less + : less_impl< typename less_tag::type , typename less_tag::type diff --git a/include/boost/mpl/aux_/preprocessed/bcc551/less_equal.hpp b/include/boost/mpl/aux_/preprocessed/bcc551/less_equal.hpp index 0dff11e..ca2894f 100644 --- a/include/boost/mpl/aux_/preprocessed/bcc551/less_equal.hpp +++ b/include/boost/mpl/aux_/preprocessed/bcc551/less_equal.hpp @@ -65,6 +65,7 @@ template< , typename BOOST_MPL_AUX_NA_PARAM(N2) > struct less_equal + : less_equal_impl< typename less_equal_tag::type , typename less_equal_tag::type diff --git a/include/boost/mpl/aux_/preprocessed/bcc551/modulus.hpp b/include/boost/mpl/aux_/preprocessed/bcc551/modulus.hpp index 5822434..224b349 100644 --- a/include/boost/mpl/aux_/preprocessed/bcc551/modulus.hpp +++ b/include/boost/mpl/aux_/preprocessed/bcc551/modulus.hpp @@ -65,6 +65,7 @@ template< , typename BOOST_MPL_AUX_NA_PARAM(N2) > struct modulus + : modulus_impl< typename modulus_tag::type , typename modulus_tag::type diff --git a/include/boost/mpl/aux_/preprocessed/bcc551/not_equal_to.hpp b/include/boost/mpl/aux_/preprocessed/bcc551/not_equal_to.hpp index 037842e..98b21b1 100644 --- a/include/boost/mpl/aux_/preprocessed/bcc551/not_equal_to.hpp +++ b/include/boost/mpl/aux_/preprocessed/bcc551/not_equal_to.hpp @@ -65,6 +65,7 @@ template< , typename BOOST_MPL_AUX_NA_PARAM(N2) > struct not_equal_to + : not_equal_to_impl< typename not_equal_to_tag::type , typename not_equal_to_tag::type diff --git a/include/boost/mpl/aux_/preprocessed/bcc551/shift_left.hpp b/include/boost/mpl/aux_/preprocessed/bcc551/shift_left.hpp index de85b3b..b5b181c 100644 --- a/include/boost/mpl/aux_/preprocessed/bcc551/shift_left.hpp +++ b/include/boost/mpl/aux_/preprocessed/bcc551/shift_left.hpp @@ -66,6 +66,7 @@ template< , typename BOOST_MPL_AUX_NA_PARAM(N2) > struct shift_left + : shift_left_impl< typename shift_left_tag::type , typename shift_left_tag::type diff --git a/include/boost/mpl/aux_/preprocessed/bcc551/shift_right.hpp b/include/boost/mpl/aux_/preprocessed/bcc551/shift_right.hpp index e73bb4a..f7a342e 100644 --- a/include/boost/mpl/aux_/preprocessed/bcc551/shift_right.hpp +++ b/include/boost/mpl/aux_/preprocessed/bcc551/shift_right.hpp @@ -66,6 +66,7 @@ template< , typename BOOST_MPL_AUX_NA_PARAM(N2) > struct shift_right + : shift_right_impl< typename shift_right_tag::type , typename shift_right_tag::type diff --git a/include/boost/mpl/aux_/preprocessed/dmc/equal_to.hpp b/include/boost/mpl/aux_/preprocessed/dmc/equal_to.hpp index 4d9db27..62c9945 100644 --- a/include/boost/mpl/aux_/preprocessed/dmc/equal_to.hpp +++ b/include/boost/mpl/aux_/preprocessed/dmc/equal_to.hpp @@ -65,6 +65,7 @@ template< , typename BOOST_MPL_AUX_NA_PARAM(N2) > struct equal_to + : equal_to_impl< typename equal_to_tag::type , typename equal_to_tag::type diff --git a/include/boost/mpl/aux_/preprocessed/dmc/greater.hpp b/include/boost/mpl/aux_/preprocessed/dmc/greater.hpp index ddbb9f8..14d8e08 100644 --- a/include/boost/mpl/aux_/preprocessed/dmc/greater.hpp +++ b/include/boost/mpl/aux_/preprocessed/dmc/greater.hpp @@ -65,6 +65,7 @@ template< , typename BOOST_MPL_AUX_NA_PARAM(N2) > struct greater + : greater_impl< typename greater_tag::type , typename greater_tag::type diff --git a/include/boost/mpl/aux_/preprocessed/dmc/greater_equal.hpp b/include/boost/mpl/aux_/preprocessed/dmc/greater_equal.hpp index 0444043..2603f91 100644 --- a/include/boost/mpl/aux_/preprocessed/dmc/greater_equal.hpp +++ b/include/boost/mpl/aux_/preprocessed/dmc/greater_equal.hpp @@ -65,6 +65,7 @@ template< , typename BOOST_MPL_AUX_NA_PARAM(N2) > struct greater_equal + : greater_equal_impl< typename greater_equal_tag::type , typename greater_equal_tag::type diff --git a/include/boost/mpl/aux_/preprocessed/dmc/less.hpp b/include/boost/mpl/aux_/preprocessed/dmc/less.hpp index 8c04934..4fe3cd1 100644 --- a/include/boost/mpl/aux_/preprocessed/dmc/less.hpp +++ b/include/boost/mpl/aux_/preprocessed/dmc/less.hpp @@ -65,6 +65,7 @@ template< , typename BOOST_MPL_AUX_NA_PARAM(N2) > struct less + : less_impl< typename less_tag::type , typename less_tag::type diff --git a/include/boost/mpl/aux_/preprocessed/dmc/less_equal.hpp b/include/boost/mpl/aux_/preprocessed/dmc/less_equal.hpp index 0dff11e..ca2894f 100644 --- a/include/boost/mpl/aux_/preprocessed/dmc/less_equal.hpp +++ b/include/boost/mpl/aux_/preprocessed/dmc/less_equal.hpp @@ -65,6 +65,7 @@ template< , typename BOOST_MPL_AUX_NA_PARAM(N2) > struct less_equal + : less_equal_impl< typename less_equal_tag::type , typename less_equal_tag::type diff --git a/include/boost/mpl/aux_/preprocessed/dmc/modulus.hpp b/include/boost/mpl/aux_/preprocessed/dmc/modulus.hpp index 5822434..224b349 100644 --- a/include/boost/mpl/aux_/preprocessed/dmc/modulus.hpp +++ b/include/boost/mpl/aux_/preprocessed/dmc/modulus.hpp @@ -65,6 +65,7 @@ template< , typename BOOST_MPL_AUX_NA_PARAM(N2) > struct modulus + : modulus_impl< typename modulus_tag::type , typename modulus_tag::type diff --git a/include/boost/mpl/aux_/preprocessed/dmc/not_equal_to.hpp b/include/boost/mpl/aux_/preprocessed/dmc/not_equal_to.hpp index 037842e..98b21b1 100644 --- a/include/boost/mpl/aux_/preprocessed/dmc/not_equal_to.hpp +++ b/include/boost/mpl/aux_/preprocessed/dmc/not_equal_to.hpp @@ -65,6 +65,7 @@ template< , typename BOOST_MPL_AUX_NA_PARAM(N2) > struct not_equal_to + : not_equal_to_impl< typename not_equal_to_tag::type , typename not_equal_to_tag::type diff --git a/include/boost/mpl/aux_/preprocessed/dmc/shift_left.hpp b/include/boost/mpl/aux_/preprocessed/dmc/shift_left.hpp index de85b3b..b5b181c 100644 --- a/include/boost/mpl/aux_/preprocessed/dmc/shift_left.hpp +++ b/include/boost/mpl/aux_/preprocessed/dmc/shift_left.hpp @@ -66,6 +66,7 @@ template< , typename BOOST_MPL_AUX_NA_PARAM(N2) > struct shift_left + : shift_left_impl< typename shift_left_tag::type , typename shift_left_tag::type diff --git a/include/boost/mpl/aux_/preprocessed/dmc/shift_right.hpp b/include/boost/mpl/aux_/preprocessed/dmc/shift_right.hpp index e73bb4a..f7a342e 100644 --- a/include/boost/mpl/aux_/preprocessed/dmc/shift_right.hpp +++ b/include/boost/mpl/aux_/preprocessed/dmc/shift_right.hpp @@ -66,6 +66,7 @@ template< , typename BOOST_MPL_AUX_NA_PARAM(N2) > struct shift_right + : shift_right_impl< typename shift_right_tag::type , typename shift_right_tag::type diff --git a/include/boost/mpl/aux_/preprocessed/gcc/equal_to.hpp b/include/boost/mpl/aux_/preprocessed/gcc/equal_to.hpp index 4d9db27..62c9945 100644 --- a/include/boost/mpl/aux_/preprocessed/gcc/equal_to.hpp +++ b/include/boost/mpl/aux_/preprocessed/gcc/equal_to.hpp @@ -65,6 +65,7 @@ template< , typename BOOST_MPL_AUX_NA_PARAM(N2) > struct equal_to + : equal_to_impl< typename equal_to_tag::type , typename equal_to_tag::type diff --git a/include/boost/mpl/aux_/preprocessed/gcc/greater.hpp b/include/boost/mpl/aux_/preprocessed/gcc/greater.hpp index ddbb9f8..14d8e08 100644 --- a/include/boost/mpl/aux_/preprocessed/gcc/greater.hpp +++ b/include/boost/mpl/aux_/preprocessed/gcc/greater.hpp @@ -65,6 +65,7 @@ template< , typename BOOST_MPL_AUX_NA_PARAM(N2) > struct greater + : greater_impl< typename greater_tag::type , typename greater_tag::type diff --git a/include/boost/mpl/aux_/preprocessed/gcc/greater_equal.hpp b/include/boost/mpl/aux_/preprocessed/gcc/greater_equal.hpp index 0444043..2603f91 100644 --- a/include/boost/mpl/aux_/preprocessed/gcc/greater_equal.hpp +++ b/include/boost/mpl/aux_/preprocessed/gcc/greater_equal.hpp @@ -65,6 +65,7 @@ template< , typename BOOST_MPL_AUX_NA_PARAM(N2) > struct greater_equal + : greater_equal_impl< typename greater_equal_tag::type , typename greater_equal_tag::type diff --git a/include/boost/mpl/aux_/preprocessed/gcc/less.hpp b/include/boost/mpl/aux_/preprocessed/gcc/less.hpp index 8c04934..4fe3cd1 100644 --- a/include/boost/mpl/aux_/preprocessed/gcc/less.hpp +++ b/include/boost/mpl/aux_/preprocessed/gcc/less.hpp @@ -65,6 +65,7 @@ template< , typename BOOST_MPL_AUX_NA_PARAM(N2) > struct less + : less_impl< typename less_tag::type , typename less_tag::type diff --git a/include/boost/mpl/aux_/preprocessed/gcc/less_equal.hpp b/include/boost/mpl/aux_/preprocessed/gcc/less_equal.hpp index 0dff11e..ca2894f 100644 --- a/include/boost/mpl/aux_/preprocessed/gcc/less_equal.hpp +++ b/include/boost/mpl/aux_/preprocessed/gcc/less_equal.hpp @@ -65,6 +65,7 @@ template< , typename BOOST_MPL_AUX_NA_PARAM(N2) > struct less_equal + : less_equal_impl< typename less_equal_tag::type , typename less_equal_tag::type diff --git a/include/boost/mpl/aux_/preprocessed/gcc/modulus.hpp b/include/boost/mpl/aux_/preprocessed/gcc/modulus.hpp index 5822434..224b349 100644 --- a/include/boost/mpl/aux_/preprocessed/gcc/modulus.hpp +++ b/include/boost/mpl/aux_/preprocessed/gcc/modulus.hpp @@ -65,6 +65,7 @@ template< , typename BOOST_MPL_AUX_NA_PARAM(N2) > struct modulus + : modulus_impl< typename modulus_tag::type , typename modulus_tag::type diff --git a/include/boost/mpl/aux_/preprocessed/gcc/not_equal_to.hpp b/include/boost/mpl/aux_/preprocessed/gcc/not_equal_to.hpp index 037842e..98b21b1 100644 --- a/include/boost/mpl/aux_/preprocessed/gcc/not_equal_to.hpp +++ b/include/boost/mpl/aux_/preprocessed/gcc/not_equal_to.hpp @@ -65,6 +65,7 @@ template< , typename BOOST_MPL_AUX_NA_PARAM(N2) > struct not_equal_to + : not_equal_to_impl< typename not_equal_to_tag::type , typename not_equal_to_tag::type diff --git a/include/boost/mpl/aux_/preprocessed/gcc/shift_left.hpp b/include/boost/mpl/aux_/preprocessed/gcc/shift_left.hpp index de85b3b..b5b181c 100644 --- a/include/boost/mpl/aux_/preprocessed/gcc/shift_left.hpp +++ b/include/boost/mpl/aux_/preprocessed/gcc/shift_left.hpp @@ -66,6 +66,7 @@ template< , typename BOOST_MPL_AUX_NA_PARAM(N2) > struct shift_left + : shift_left_impl< typename shift_left_tag::type , typename shift_left_tag::type diff --git a/include/boost/mpl/aux_/preprocessed/gcc/shift_right.hpp b/include/boost/mpl/aux_/preprocessed/gcc/shift_right.hpp index e73bb4a..f7a342e 100644 --- a/include/boost/mpl/aux_/preprocessed/gcc/shift_right.hpp +++ b/include/boost/mpl/aux_/preprocessed/gcc/shift_right.hpp @@ -66,6 +66,7 @@ template< , typename BOOST_MPL_AUX_NA_PARAM(N2) > struct shift_right + : shift_right_impl< typename shift_right_tag::type , typename shift_right_tag::type diff --git a/include/boost/mpl/aux_/preprocessed/msvc60/bitand.hpp b/include/boost/mpl/aux_/preprocessed/msvc60/bitand.hpp index 373708a..194e7f8 100644 --- a/include/boost/mpl/aux_/preprocessed/msvc60/bitand.hpp +++ b/include/boost/mpl/aux_/preprocessed/msvc60/bitand.hpp @@ -61,11 +61,41 @@ template< typename T > struct bitand_tag typedef typename T::tag type; }; +/// forward declaration + template< typename BOOST_MPL_AUX_NA_PARAM(N1) , typename BOOST_MPL_AUX_NA_PARAM(N2) > +struct bitand_2; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > struct bitand_ + : if_< + is_na + , bitand_2< N1,N2 > + , bitand_< + bitand_2< N1,N2 > + , N3, N4, N5 + > + >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , bitand_ + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1 + , typename N2 + > +struct bitand_2 : aux::msvc_eti_base< typename apply_wrap2< bitand_impl< typename bitand_tag::type @@ -76,11 +106,15 @@ struct bitand_ >::type >::type { - BOOST_MPL_AUX_LAMBDA_SUPPORT(2, bitand_, (N1, N2)) + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , bitand_ + , ( N1, N2, na, na, na ) + ) }; -BOOST_MPL_AUX_NA_SPEC2(2, 2, bitand_) +BOOST_MPL_AUX_NA_SPEC2(2, 5, bitand_) }} diff --git a/include/boost/mpl/aux_/preprocessed/msvc60/bitor.hpp b/include/boost/mpl/aux_/preprocessed/msvc60/bitor.hpp index afc07ef..509a1a6 100644 --- a/include/boost/mpl/aux_/preprocessed/msvc60/bitor.hpp +++ b/include/boost/mpl/aux_/preprocessed/msvc60/bitor.hpp @@ -61,11 +61,41 @@ template< typename T > struct bitor_tag typedef typename T::tag type; }; +/// forward declaration + template< typename BOOST_MPL_AUX_NA_PARAM(N1) , typename BOOST_MPL_AUX_NA_PARAM(N2) > +struct bitor_2; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > struct bitor_ + : if_< + is_na + , bitor_2< N1,N2 > + , bitor_< + bitor_2< N1,N2 > + , N3, N4, N5 + > + >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , bitor_ + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1 + , typename N2 + > +struct bitor_2 : aux::msvc_eti_base< typename apply_wrap2< bitor_impl< typename bitor_tag::type @@ -76,11 +106,15 @@ struct bitor_ >::type >::type { - BOOST_MPL_AUX_LAMBDA_SUPPORT(2, bitor_, (N1, N2)) + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , bitor_ + , ( N1, N2, na, na, na ) + ) }; -BOOST_MPL_AUX_NA_SPEC2(2, 2, bitor_) +BOOST_MPL_AUX_NA_SPEC2(2, 5, bitor_) }} diff --git a/include/boost/mpl/aux_/preprocessed/msvc60/bitxor.hpp b/include/boost/mpl/aux_/preprocessed/msvc60/bitxor.hpp index 79675b4..b42e16d 100644 --- a/include/boost/mpl/aux_/preprocessed/msvc60/bitxor.hpp +++ b/include/boost/mpl/aux_/preprocessed/msvc60/bitxor.hpp @@ -61,11 +61,41 @@ template< typename T > struct bitxor_tag typedef typename T::tag type; }; +/// forward declaration + template< typename BOOST_MPL_AUX_NA_PARAM(N1) , typename BOOST_MPL_AUX_NA_PARAM(N2) > +struct bitxor_2; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > struct bitxor_ + : if_< + is_na + , bitxor_2< N1,N2 > + , bitxor_< + bitxor_2< N1,N2 > + , N3, N4, N5 + > + >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , bitxor_ + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1 + , typename N2 + > +struct bitxor_2 : aux::msvc_eti_base< typename apply_wrap2< bitxor_impl< typename bitxor_tag::type @@ -76,11 +106,15 @@ struct bitxor_ >::type >::type { - BOOST_MPL_AUX_LAMBDA_SUPPORT(2, bitxor_, (N1, N2)) + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , bitxor_ + , ( N1, N2, na, na, na ) + ) }; -BOOST_MPL_AUX_NA_SPEC2(2, 2, bitxor_) +BOOST_MPL_AUX_NA_SPEC2(2, 5, bitxor_) }} diff --git a/include/boost/mpl/aux_/preprocessed/msvc60/divides.hpp b/include/boost/mpl/aux_/preprocessed/msvc60/divides.hpp index fd517a7..6fc1834 100644 --- a/include/boost/mpl/aux_/preprocessed/msvc60/divides.hpp +++ b/include/boost/mpl/aux_/preprocessed/msvc60/divides.hpp @@ -60,11 +60,41 @@ template< typename T > struct divides_tag typedef typename T::tag type; }; +/// forward declaration + template< typename BOOST_MPL_AUX_NA_PARAM(N1) , typename BOOST_MPL_AUX_NA_PARAM(N2) > +struct divides2; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > struct divides + : if_< + is_na + , divides2< N1,N2 > + , divides< + divides2< N1,N2 > + , N3, N4, N5 + > + >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , divides + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1 + , typename N2 + > +struct divides2 : aux::msvc_eti_base< typename apply_wrap2< divides_impl< typename divides_tag::type @@ -75,11 +105,15 @@ struct divides >::type >::type { - BOOST_MPL_AUX_LAMBDA_SUPPORT(2, divides, (N1, N2)) + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , divides + , ( N1, N2, na, na, na ) + ) }; -BOOST_MPL_AUX_NA_SPEC2(2, 2, divides) +BOOST_MPL_AUX_NA_SPEC2(2, 5, divides) }} diff --git a/include/boost/mpl/aux_/preprocessed/msvc60/minus.hpp b/include/boost/mpl/aux_/preprocessed/msvc60/minus.hpp index 7ea3c6d..635af42 100644 --- a/include/boost/mpl/aux_/preprocessed/msvc60/minus.hpp +++ b/include/boost/mpl/aux_/preprocessed/msvc60/minus.hpp @@ -60,11 +60,41 @@ template< typename T > struct minus_tag typedef typename T::tag type; }; +/// forward declaration + template< typename BOOST_MPL_AUX_NA_PARAM(N1) , typename BOOST_MPL_AUX_NA_PARAM(N2) > +struct minus2; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > struct minus + : if_< + is_na + , minus2< N1,N2 > + , minus< + minus2< N1,N2 > + , N3, N4, N5 + > + >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , minus + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1 + , typename N2 + > +struct minus2 : aux::msvc_eti_base< typename apply_wrap2< minus_impl< typename minus_tag::type @@ -75,11 +105,15 @@ struct minus >::type >::type { - BOOST_MPL_AUX_LAMBDA_SUPPORT(2, minus, (N1, N2)) + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , minus + , ( N1, N2, na, na, na ) + ) }; -BOOST_MPL_AUX_NA_SPEC2(2, 2, minus) +BOOST_MPL_AUX_NA_SPEC2(2, 5, minus) }} diff --git a/include/boost/mpl/aux_/preprocessed/msvc60/plus.hpp b/include/boost/mpl/aux_/preprocessed/msvc60/plus.hpp index 0e49519..794a54c 100644 --- a/include/boost/mpl/aux_/preprocessed/msvc60/plus.hpp +++ b/include/boost/mpl/aux_/preprocessed/msvc60/plus.hpp @@ -60,11 +60,41 @@ template< typename T > struct plus_tag typedef typename T::tag type; }; +/// forward declaration + template< typename BOOST_MPL_AUX_NA_PARAM(N1) , typename BOOST_MPL_AUX_NA_PARAM(N2) > +struct plus2; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > struct plus + : if_< + is_na + , plus2< N1,N2 > + , plus< + plus2< N1,N2 > + , N3, N4, N5 + > + >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , plus + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1 + , typename N2 + > +struct plus2 : aux::msvc_eti_base< typename apply_wrap2< plus_impl< typename plus_tag::type @@ -75,11 +105,15 @@ struct plus >::type >::type { - BOOST_MPL_AUX_LAMBDA_SUPPORT(2, plus, (N1, N2)) + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , plus + , ( N1, N2, na, na, na ) + ) }; -BOOST_MPL_AUX_NA_SPEC2(2, 2, plus) +BOOST_MPL_AUX_NA_SPEC2(2, 5, plus) }} diff --git a/include/boost/mpl/aux_/preprocessed/msvc60/times.hpp b/include/boost/mpl/aux_/preprocessed/msvc60/times.hpp index 4289742..cece499 100644 --- a/include/boost/mpl/aux_/preprocessed/msvc60/times.hpp +++ b/include/boost/mpl/aux_/preprocessed/msvc60/times.hpp @@ -60,11 +60,41 @@ template< typename T > struct times_tag typedef typename T::tag type; }; +/// forward declaration + template< typename BOOST_MPL_AUX_NA_PARAM(N1) , typename BOOST_MPL_AUX_NA_PARAM(N2) > +struct times2; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > struct times + : if_< + is_na + , times2< N1,N2 > + , times< + times2< N1,N2 > + , N3, N4, N5 + > + >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , times + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1 + , typename N2 + > +struct times2 : aux::msvc_eti_base< typename apply_wrap2< times_impl< typename times_tag::type @@ -75,11 +105,15 @@ struct times >::type >::type { - BOOST_MPL_AUX_LAMBDA_SUPPORT(2, times, (N1, N2)) + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , times + , ( N1, N2, na, na, na ) + ) }; -BOOST_MPL_AUX_NA_SPEC2(2, 2, times) +BOOST_MPL_AUX_NA_SPEC2(2, 5, times) }} diff --git a/include/boost/mpl/aux_/preprocessed/msvc70/bitand.hpp b/include/boost/mpl/aux_/preprocessed/msvc70/bitand.hpp index 9774d44..f6b066d 100644 --- a/include/boost/mpl/aux_/preprocessed/msvc70/bitand.hpp +++ b/include/boost/mpl/aux_/preprocessed/msvc70/bitand.hpp @@ -61,11 +61,41 @@ template< typename T > struct bitand_tag { }; +/// forward declaration + template< typename BOOST_MPL_AUX_NA_PARAM(N1) , typename BOOST_MPL_AUX_NA_PARAM(N2) > +struct bitand_2; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > struct bitand_ + : if_< + is_na + , bitand_2< N1,N2 > + , bitand_< + bitand_2< N1,N2 > + , N3, N4, N5 + > + >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , bitand_ + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1 + , typename N2 + > +struct bitand_2 : aux::msvc_eti_base< typename apply_wrap2< bitand_impl< typename bitand_tag::type @@ -76,11 +106,15 @@ struct bitand_ >::type >::type { - BOOST_MPL_AUX_LAMBDA_SUPPORT(2, bitand_, (N1, N2)) + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , bitand_ + , ( N1, N2, na, na, na ) + ) }; -BOOST_MPL_AUX_NA_SPEC2(2, 2, bitand_) +BOOST_MPL_AUX_NA_SPEC2(2, 5, bitand_) }} diff --git a/include/boost/mpl/aux_/preprocessed/msvc70/bitor.hpp b/include/boost/mpl/aux_/preprocessed/msvc70/bitor.hpp index 705267f..16daa9c 100644 --- a/include/boost/mpl/aux_/preprocessed/msvc70/bitor.hpp +++ b/include/boost/mpl/aux_/preprocessed/msvc70/bitor.hpp @@ -61,11 +61,41 @@ template< typename T > struct bitor_tag { }; +/// forward declaration + template< typename BOOST_MPL_AUX_NA_PARAM(N1) , typename BOOST_MPL_AUX_NA_PARAM(N2) > +struct bitor_2; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > struct bitor_ + : if_< + is_na + , bitor_2< N1,N2 > + , bitor_< + bitor_2< N1,N2 > + , N3, N4, N5 + > + >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , bitor_ + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1 + , typename N2 + > +struct bitor_2 : aux::msvc_eti_base< typename apply_wrap2< bitor_impl< typename bitor_tag::type @@ -76,11 +106,15 @@ struct bitor_ >::type >::type { - BOOST_MPL_AUX_LAMBDA_SUPPORT(2, bitor_, (N1, N2)) + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , bitor_ + , ( N1, N2, na, na, na ) + ) }; -BOOST_MPL_AUX_NA_SPEC2(2, 2, bitor_) +BOOST_MPL_AUX_NA_SPEC2(2, 5, bitor_) }} diff --git a/include/boost/mpl/aux_/preprocessed/msvc70/bitxor.hpp b/include/boost/mpl/aux_/preprocessed/msvc70/bitxor.hpp index fd0e4dd..247e50f 100644 --- a/include/boost/mpl/aux_/preprocessed/msvc70/bitxor.hpp +++ b/include/boost/mpl/aux_/preprocessed/msvc70/bitxor.hpp @@ -61,11 +61,41 @@ template< typename T > struct bitxor_tag { }; +/// forward declaration + template< typename BOOST_MPL_AUX_NA_PARAM(N1) , typename BOOST_MPL_AUX_NA_PARAM(N2) > +struct bitxor_2; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > struct bitxor_ + : if_< + is_na + , bitxor_2< N1,N2 > + , bitxor_< + bitxor_2< N1,N2 > + , N3, N4, N5 + > + >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , bitxor_ + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1 + , typename N2 + > +struct bitxor_2 : aux::msvc_eti_base< typename apply_wrap2< bitxor_impl< typename bitxor_tag::type @@ -76,11 +106,15 @@ struct bitxor_ >::type >::type { - BOOST_MPL_AUX_LAMBDA_SUPPORT(2, bitxor_, (N1, N2)) + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , bitxor_ + , ( N1, N2, na, na, na ) + ) }; -BOOST_MPL_AUX_NA_SPEC2(2, 2, bitxor_) +BOOST_MPL_AUX_NA_SPEC2(2, 5, bitxor_) }} diff --git a/include/boost/mpl/aux_/preprocessed/msvc70/divides.hpp b/include/boost/mpl/aux_/preprocessed/msvc70/divides.hpp index eb89b77..27d4e2b 100644 --- a/include/boost/mpl/aux_/preprocessed/msvc70/divides.hpp +++ b/include/boost/mpl/aux_/preprocessed/msvc70/divides.hpp @@ -60,11 +60,41 @@ template< typename T > struct divides_tag { }; +/// forward declaration + template< typename BOOST_MPL_AUX_NA_PARAM(N1) , typename BOOST_MPL_AUX_NA_PARAM(N2) > +struct divides2; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > struct divides + : if_< + is_na + , divides2< N1,N2 > + , divides< + divides2< N1,N2 > + , N3, N4, N5 + > + >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , divides + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1 + , typename N2 + > +struct divides2 : aux::msvc_eti_base< typename apply_wrap2< divides_impl< typename divides_tag::type @@ -75,11 +105,15 @@ struct divides >::type >::type { - BOOST_MPL_AUX_LAMBDA_SUPPORT(2, divides, (N1, N2)) + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , divides + , ( N1, N2, na, na, na ) + ) }; -BOOST_MPL_AUX_NA_SPEC2(2, 2, divides) +BOOST_MPL_AUX_NA_SPEC2(2, 5, divides) }} diff --git a/include/boost/mpl/aux_/preprocessed/msvc70/minus.hpp b/include/boost/mpl/aux_/preprocessed/msvc70/minus.hpp index a65ee05..955248c 100644 --- a/include/boost/mpl/aux_/preprocessed/msvc70/minus.hpp +++ b/include/boost/mpl/aux_/preprocessed/msvc70/minus.hpp @@ -60,11 +60,41 @@ template< typename T > struct minus_tag { }; +/// forward declaration + template< typename BOOST_MPL_AUX_NA_PARAM(N1) , typename BOOST_MPL_AUX_NA_PARAM(N2) > +struct minus2; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > struct minus + : if_< + is_na + , minus2< N1,N2 > + , minus< + minus2< N1,N2 > + , N3, N4, N5 + > + >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , minus + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1 + , typename N2 + > +struct minus2 : aux::msvc_eti_base< typename apply_wrap2< minus_impl< typename minus_tag::type @@ -75,11 +105,15 @@ struct minus >::type >::type { - BOOST_MPL_AUX_LAMBDA_SUPPORT(2, minus, (N1, N2)) + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , minus + , ( N1, N2, na, na, na ) + ) }; -BOOST_MPL_AUX_NA_SPEC2(2, 2, minus) +BOOST_MPL_AUX_NA_SPEC2(2, 5, minus) }} diff --git a/include/boost/mpl/aux_/preprocessed/msvc70/plus.hpp b/include/boost/mpl/aux_/preprocessed/msvc70/plus.hpp index 3655a61..0a8ad51 100644 --- a/include/boost/mpl/aux_/preprocessed/msvc70/plus.hpp +++ b/include/boost/mpl/aux_/preprocessed/msvc70/plus.hpp @@ -60,11 +60,41 @@ template< typename T > struct plus_tag { }; +/// forward declaration + template< typename BOOST_MPL_AUX_NA_PARAM(N1) , typename BOOST_MPL_AUX_NA_PARAM(N2) > +struct plus2; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > struct plus + : if_< + is_na + , plus2< N1,N2 > + , plus< + plus2< N1,N2 > + , N3, N4, N5 + > + >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , plus + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1 + , typename N2 + > +struct plus2 : aux::msvc_eti_base< typename apply_wrap2< plus_impl< typename plus_tag::type @@ -75,11 +105,15 @@ struct plus >::type >::type { - BOOST_MPL_AUX_LAMBDA_SUPPORT(2, plus, (N1, N2)) + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , plus + , ( N1, N2, na, na, na ) + ) }; -BOOST_MPL_AUX_NA_SPEC2(2, 2, plus) +BOOST_MPL_AUX_NA_SPEC2(2, 5, plus) }} diff --git a/include/boost/mpl/aux_/preprocessed/msvc70/times.hpp b/include/boost/mpl/aux_/preprocessed/msvc70/times.hpp index ded65aa..063de6f 100644 --- a/include/boost/mpl/aux_/preprocessed/msvc70/times.hpp +++ b/include/boost/mpl/aux_/preprocessed/msvc70/times.hpp @@ -60,11 +60,41 @@ template< typename T > struct times_tag { }; +/// forward declaration + template< typename BOOST_MPL_AUX_NA_PARAM(N1) , typename BOOST_MPL_AUX_NA_PARAM(N2) > +struct times2; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > struct times + : if_< + is_na + , times2< N1,N2 > + , times< + times2< N1,N2 > + , N3, N4, N5 + > + >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , times + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1 + , typename N2 + > +struct times2 : aux::msvc_eti_base< typename apply_wrap2< times_impl< typename times_tag::type @@ -75,11 +105,15 @@ struct times >::type >::type { - BOOST_MPL_AUX_LAMBDA_SUPPORT(2, times, (N1, N2)) + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , times + , ( N1, N2, na, na, na ) + ) }; -BOOST_MPL_AUX_NA_SPEC2(2, 2, times) +BOOST_MPL_AUX_NA_SPEC2(2, 5, times) }} diff --git a/include/boost/mpl/aux_/preprocessed/mwcw/equal_to.hpp b/include/boost/mpl/aux_/preprocessed/mwcw/equal_to.hpp index 4d9db27..62c9945 100644 --- a/include/boost/mpl/aux_/preprocessed/mwcw/equal_to.hpp +++ b/include/boost/mpl/aux_/preprocessed/mwcw/equal_to.hpp @@ -65,6 +65,7 @@ template< , typename BOOST_MPL_AUX_NA_PARAM(N2) > struct equal_to + : equal_to_impl< typename equal_to_tag::type , typename equal_to_tag::type diff --git a/include/boost/mpl/aux_/preprocessed/mwcw/greater.hpp b/include/boost/mpl/aux_/preprocessed/mwcw/greater.hpp index ddbb9f8..14d8e08 100644 --- a/include/boost/mpl/aux_/preprocessed/mwcw/greater.hpp +++ b/include/boost/mpl/aux_/preprocessed/mwcw/greater.hpp @@ -65,6 +65,7 @@ template< , typename BOOST_MPL_AUX_NA_PARAM(N2) > struct greater + : greater_impl< typename greater_tag::type , typename greater_tag::type diff --git a/include/boost/mpl/aux_/preprocessed/mwcw/greater_equal.hpp b/include/boost/mpl/aux_/preprocessed/mwcw/greater_equal.hpp index 0444043..2603f91 100644 --- a/include/boost/mpl/aux_/preprocessed/mwcw/greater_equal.hpp +++ b/include/boost/mpl/aux_/preprocessed/mwcw/greater_equal.hpp @@ -65,6 +65,7 @@ template< , typename BOOST_MPL_AUX_NA_PARAM(N2) > struct greater_equal + : greater_equal_impl< typename greater_equal_tag::type , typename greater_equal_tag::type diff --git a/include/boost/mpl/aux_/preprocessed/mwcw/less.hpp b/include/boost/mpl/aux_/preprocessed/mwcw/less.hpp index 8c04934..4fe3cd1 100644 --- a/include/boost/mpl/aux_/preprocessed/mwcw/less.hpp +++ b/include/boost/mpl/aux_/preprocessed/mwcw/less.hpp @@ -65,6 +65,7 @@ template< , typename BOOST_MPL_AUX_NA_PARAM(N2) > struct less + : less_impl< typename less_tag::type , typename less_tag::type diff --git a/include/boost/mpl/aux_/preprocessed/mwcw/less_equal.hpp b/include/boost/mpl/aux_/preprocessed/mwcw/less_equal.hpp index 0dff11e..ca2894f 100644 --- a/include/boost/mpl/aux_/preprocessed/mwcw/less_equal.hpp +++ b/include/boost/mpl/aux_/preprocessed/mwcw/less_equal.hpp @@ -65,6 +65,7 @@ template< , typename BOOST_MPL_AUX_NA_PARAM(N2) > struct less_equal + : less_equal_impl< typename less_equal_tag::type , typename less_equal_tag::type diff --git a/include/boost/mpl/aux_/preprocessed/mwcw/modulus.hpp b/include/boost/mpl/aux_/preprocessed/mwcw/modulus.hpp index 5822434..224b349 100644 --- a/include/boost/mpl/aux_/preprocessed/mwcw/modulus.hpp +++ b/include/boost/mpl/aux_/preprocessed/mwcw/modulus.hpp @@ -65,6 +65,7 @@ template< , typename BOOST_MPL_AUX_NA_PARAM(N2) > struct modulus + : modulus_impl< typename modulus_tag::type , typename modulus_tag::type diff --git a/include/boost/mpl/aux_/preprocessed/mwcw/not_equal_to.hpp b/include/boost/mpl/aux_/preprocessed/mwcw/not_equal_to.hpp index 037842e..98b21b1 100644 --- a/include/boost/mpl/aux_/preprocessed/mwcw/not_equal_to.hpp +++ b/include/boost/mpl/aux_/preprocessed/mwcw/not_equal_to.hpp @@ -65,6 +65,7 @@ template< , typename BOOST_MPL_AUX_NA_PARAM(N2) > struct not_equal_to + : not_equal_to_impl< typename not_equal_to_tag::type , typename not_equal_to_tag::type diff --git a/include/boost/mpl/aux_/preprocessed/mwcw/shift_left.hpp b/include/boost/mpl/aux_/preprocessed/mwcw/shift_left.hpp index de85b3b..b5b181c 100644 --- a/include/boost/mpl/aux_/preprocessed/mwcw/shift_left.hpp +++ b/include/boost/mpl/aux_/preprocessed/mwcw/shift_left.hpp @@ -66,6 +66,7 @@ template< , typename BOOST_MPL_AUX_NA_PARAM(N2) > struct shift_left + : shift_left_impl< typename shift_left_tag::type , typename shift_left_tag::type diff --git a/include/boost/mpl/aux_/preprocessed/mwcw/shift_right.hpp b/include/boost/mpl/aux_/preprocessed/mwcw/shift_right.hpp index e73bb4a..f7a342e 100644 --- a/include/boost/mpl/aux_/preprocessed/mwcw/shift_right.hpp +++ b/include/boost/mpl/aux_/preprocessed/mwcw/shift_right.hpp @@ -66,6 +66,7 @@ template< , typename BOOST_MPL_AUX_NA_PARAM(N2) > struct shift_right + : shift_right_impl< typename shift_right_tag::type , typename shift_right_tag::type diff --git a/include/boost/mpl/aux_/preprocessed/no_ctps/bitand.hpp b/include/boost/mpl/aux_/preprocessed/no_ctps/bitand.hpp index 8fcdf12..47898ea 100644 --- a/include/boost/mpl/aux_/preprocessed/no_ctps/bitand.hpp +++ b/include/boost/mpl/aux_/preprocessed/no_ctps/bitand.hpp @@ -61,21 +61,55 @@ template< typename T > struct bitand_tag typedef typename T::tag type; }; +/// forward declaration + template< typename BOOST_MPL_AUX_NA_PARAM(N1) , typename BOOST_MPL_AUX_NA_PARAM(N2) > +struct bitand_2; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > struct bitand_ + : if_< + is_na + , bitand_2< N1,N2 > + , bitand_< + bitand_2< N1,N2 > + , N3, N4, N5 + > + >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , bitand_ + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1 + , typename N2 + > +struct bitand_2 : bitand_impl< typename bitand_tag::type , typename bitand_tag::type >::template apply< N1,N2 >::type { - BOOST_MPL_AUX_LAMBDA_SUPPORT(2, bitand_, (N1, N2)) + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , bitand_ + , ( N1, N2, na, na, na ) + ) }; -BOOST_MPL_AUX_NA_SPEC2(2, 2, bitand_) +BOOST_MPL_AUX_NA_SPEC2(2, 5, bitand_) }} diff --git a/include/boost/mpl/aux_/preprocessed/no_ctps/bitor.hpp b/include/boost/mpl/aux_/preprocessed/no_ctps/bitor.hpp index 9479a46..a3f4a41 100644 --- a/include/boost/mpl/aux_/preprocessed/no_ctps/bitor.hpp +++ b/include/boost/mpl/aux_/preprocessed/no_ctps/bitor.hpp @@ -61,21 +61,55 @@ template< typename T > struct bitor_tag typedef typename T::tag type; }; +/// forward declaration + template< typename BOOST_MPL_AUX_NA_PARAM(N1) , typename BOOST_MPL_AUX_NA_PARAM(N2) > +struct bitor_2; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > struct bitor_ + : if_< + is_na + , bitor_2< N1,N2 > + , bitor_< + bitor_2< N1,N2 > + , N3, N4, N5 + > + >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , bitor_ + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1 + , typename N2 + > +struct bitor_2 : bitor_impl< typename bitor_tag::type , typename bitor_tag::type >::template apply< N1,N2 >::type { - BOOST_MPL_AUX_LAMBDA_SUPPORT(2, bitor_, (N1, N2)) + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , bitor_ + , ( N1, N2, na, na, na ) + ) }; -BOOST_MPL_AUX_NA_SPEC2(2, 2, bitor_) +BOOST_MPL_AUX_NA_SPEC2(2, 5, bitor_) }} diff --git a/include/boost/mpl/aux_/preprocessed/no_ctps/bitxor.hpp b/include/boost/mpl/aux_/preprocessed/no_ctps/bitxor.hpp index cbe1c05..077cff0 100644 --- a/include/boost/mpl/aux_/preprocessed/no_ctps/bitxor.hpp +++ b/include/boost/mpl/aux_/preprocessed/no_ctps/bitxor.hpp @@ -61,21 +61,55 @@ template< typename T > struct bitxor_tag typedef typename T::tag type; }; +/// forward declaration + template< typename BOOST_MPL_AUX_NA_PARAM(N1) , typename BOOST_MPL_AUX_NA_PARAM(N2) > +struct bitxor_2; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > struct bitxor_ + : if_< + is_na + , bitxor_2< N1,N2 > + , bitxor_< + bitxor_2< N1,N2 > + , N3, N4, N5 + > + >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , bitxor_ + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1 + , typename N2 + > +struct bitxor_2 : bitxor_impl< typename bitxor_tag::type , typename bitxor_tag::type >::template apply< N1,N2 >::type { - BOOST_MPL_AUX_LAMBDA_SUPPORT(2, bitxor_, (N1, N2)) + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , bitxor_ + , ( N1, N2, na, na, na ) + ) }; -BOOST_MPL_AUX_NA_SPEC2(2, 2, bitxor_) +BOOST_MPL_AUX_NA_SPEC2(2, 5, bitxor_) }} diff --git a/include/boost/mpl/aux_/preprocessed/no_ctps/divides.hpp b/include/boost/mpl/aux_/preprocessed/no_ctps/divides.hpp index e89b9c3..2fd3fc5 100644 --- a/include/boost/mpl/aux_/preprocessed/no_ctps/divides.hpp +++ b/include/boost/mpl/aux_/preprocessed/no_ctps/divides.hpp @@ -60,21 +60,55 @@ template< typename T > struct divides_tag typedef typename T::tag type; }; +/// forward declaration + template< typename BOOST_MPL_AUX_NA_PARAM(N1) , typename BOOST_MPL_AUX_NA_PARAM(N2) > +struct divides2; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > struct divides + : if_< + is_na + , divides2< N1,N2 > + , divides< + divides2< N1,N2 > + , N3, N4, N5 + > + >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , divides + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1 + , typename N2 + > +struct divides2 : divides_impl< typename divides_tag::type , typename divides_tag::type >::template apply< N1,N2 >::type { - BOOST_MPL_AUX_LAMBDA_SUPPORT(2, divides, (N1, N2)) + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , divides + , ( N1, N2, na, na, na ) + ) }; -BOOST_MPL_AUX_NA_SPEC2(2, 2, divides) +BOOST_MPL_AUX_NA_SPEC2(2, 5, divides) }} diff --git a/include/boost/mpl/aux_/preprocessed/no_ctps/equal_to.hpp b/include/boost/mpl/aux_/preprocessed/no_ctps/equal_to.hpp index 5018a52..b14cdda 100644 --- a/include/boost/mpl/aux_/preprocessed/no_ctps/equal_to.hpp +++ b/include/boost/mpl/aux_/preprocessed/no_ctps/equal_to.hpp @@ -65,6 +65,7 @@ template< , typename BOOST_MPL_AUX_NA_PARAM(N2) > struct equal_to + : equal_to_impl< typename equal_to_tag::type , typename equal_to_tag::type diff --git a/include/boost/mpl/aux_/preprocessed/no_ctps/greater.hpp b/include/boost/mpl/aux_/preprocessed/no_ctps/greater.hpp index ea36845..6fdf8ba 100644 --- a/include/boost/mpl/aux_/preprocessed/no_ctps/greater.hpp +++ b/include/boost/mpl/aux_/preprocessed/no_ctps/greater.hpp @@ -65,6 +65,7 @@ template< , typename BOOST_MPL_AUX_NA_PARAM(N2) > struct greater + : greater_impl< typename greater_tag::type , typename greater_tag::type diff --git a/include/boost/mpl/aux_/preprocessed/no_ctps/greater_equal.hpp b/include/boost/mpl/aux_/preprocessed/no_ctps/greater_equal.hpp index e90699d..f848eef 100644 --- a/include/boost/mpl/aux_/preprocessed/no_ctps/greater_equal.hpp +++ b/include/boost/mpl/aux_/preprocessed/no_ctps/greater_equal.hpp @@ -65,6 +65,7 @@ template< , typename BOOST_MPL_AUX_NA_PARAM(N2) > struct greater_equal + : greater_equal_impl< typename greater_equal_tag::type , typename greater_equal_tag::type diff --git a/include/boost/mpl/aux_/preprocessed/no_ctps/less.hpp b/include/boost/mpl/aux_/preprocessed/no_ctps/less.hpp index 62b264f..7fb35e1 100644 --- a/include/boost/mpl/aux_/preprocessed/no_ctps/less.hpp +++ b/include/boost/mpl/aux_/preprocessed/no_ctps/less.hpp @@ -65,6 +65,7 @@ template< , typename BOOST_MPL_AUX_NA_PARAM(N2) > struct less + : less_impl< typename less_tag::type , typename less_tag::type diff --git a/include/boost/mpl/aux_/preprocessed/no_ctps/less_equal.hpp b/include/boost/mpl/aux_/preprocessed/no_ctps/less_equal.hpp index 0b137cf..206ecdc 100644 --- a/include/boost/mpl/aux_/preprocessed/no_ctps/less_equal.hpp +++ b/include/boost/mpl/aux_/preprocessed/no_ctps/less_equal.hpp @@ -65,6 +65,7 @@ template< , typename BOOST_MPL_AUX_NA_PARAM(N2) > struct less_equal + : less_equal_impl< typename less_equal_tag::type , typename less_equal_tag::type diff --git a/include/boost/mpl/aux_/preprocessed/no_ctps/minus.hpp b/include/boost/mpl/aux_/preprocessed/no_ctps/minus.hpp index 44f5cb4..9d32b48 100644 --- a/include/boost/mpl/aux_/preprocessed/no_ctps/minus.hpp +++ b/include/boost/mpl/aux_/preprocessed/no_ctps/minus.hpp @@ -60,21 +60,55 @@ template< typename T > struct minus_tag typedef typename T::tag type; }; +/// forward declaration + template< typename BOOST_MPL_AUX_NA_PARAM(N1) , typename BOOST_MPL_AUX_NA_PARAM(N2) > +struct minus2; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > struct minus + : if_< + is_na + , minus2< N1,N2 > + , minus< + minus2< N1,N2 > + , N3, N4, N5 + > + >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , minus + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1 + , typename N2 + > +struct minus2 : minus_impl< typename minus_tag::type , typename minus_tag::type >::template apply< N1,N2 >::type { - BOOST_MPL_AUX_LAMBDA_SUPPORT(2, minus, (N1, N2)) + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , minus + , ( N1, N2, na, na, na ) + ) }; -BOOST_MPL_AUX_NA_SPEC2(2, 2, minus) +BOOST_MPL_AUX_NA_SPEC2(2, 5, minus) }} diff --git a/include/boost/mpl/aux_/preprocessed/no_ctps/modulus.hpp b/include/boost/mpl/aux_/preprocessed/no_ctps/modulus.hpp index c2d5e74..8badbab 100644 --- a/include/boost/mpl/aux_/preprocessed/no_ctps/modulus.hpp +++ b/include/boost/mpl/aux_/preprocessed/no_ctps/modulus.hpp @@ -65,6 +65,7 @@ template< , typename BOOST_MPL_AUX_NA_PARAM(N2) > struct modulus + : modulus_impl< typename modulus_tag::type , typename modulus_tag::type diff --git a/include/boost/mpl/aux_/preprocessed/no_ctps/not_equal_to.hpp b/include/boost/mpl/aux_/preprocessed/no_ctps/not_equal_to.hpp index bef66cd..d87d8cd 100644 --- a/include/boost/mpl/aux_/preprocessed/no_ctps/not_equal_to.hpp +++ b/include/boost/mpl/aux_/preprocessed/no_ctps/not_equal_to.hpp @@ -65,6 +65,7 @@ template< , typename BOOST_MPL_AUX_NA_PARAM(N2) > struct not_equal_to + : not_equal_to_impl< typename not_equal_to_tag::type , typename not_equal_to_tag::type diff --git a/include/boost/mpl/aux_/preprocessed/no_ctps/plus.hpp b/include/boost/mpl/aux_/preprocessed/no_ctps/plus.hpp index 97bf3a5..37268be 100644 --- a/include/boost/mpl/aux_/preprocessed/no_ctps/plus.hpp +++ b/include/boost/mpl/aux_/preprocessed/no_ctps/plus.hpp @@ -60,21 +60,55 @@ template< typename T > struct plus_tag typedef typename T::tag type; }; +/// forward declaration + template< typename BOOST_MPL_AUX_NA_PARAM(N1) , typename BOOST_MPL_AUX_NA_PARAM(N2) > +struct plus2; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > struct plus + : if_< + is_na + , plus2< N1,N2 > + , plus< + plus2< N1,N2 > + , N3, N4, N5 + > + >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , plus + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1 + , typename N2 + > +struct plus2 : plus_impl< typename plus_tag::type , typename plus_tag::type >::template apply< N1,N2 >::type { - BOOST_MPL_AUX_LAMBDA_SUPPORT(2, plus, (N1, N2)) + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , plus + , ( N1, N2, na, na, na ) + ) }; -BOOST_MPL_AUX_NA_SPEC2(2, 2, plus) +BOOST_MPL_AUX_NA_SPEC2(2, 5, plus) }} diff --git a/include/boost/mpl/aux_/preprocessed/no_ctps/shift_left.hpp b/include/boost/mpl/aux_/preprocessed/no_ctps/shift_left.hpp index ddeaa09..d14a5e4 100644 --- a/include/boost/mpl/aux_/preprocessed/no_ctps/shift_left.hpp +++ b/include/boost/mpl/aux_/preprocessed/no_ctps/shift_left.hpp @@ -66,6 +66,7 @@ template< , typename BOOST_MPL_AUX_NA_PARAM(N2) > struct shift_left + : shift_left_impl< typename shift_left_tag::type , typename shift_left_tag::type diff --git a/include/boost/mpl/aux_/preprocessed/no_ctps/shift_right.hpp b/include/boost/mpl/aux_/preprocessed/no_ctps/shift_right.hpp index 683c5cf..08c4915 100644 --- a/include/boost/mpl/aux_/preprocessed/no_ctps/shift_right.hpp +++ b/include/boost/mpl/aux_/preprocessed/no_ctps/shift_right.hpp @@ -66,6 +66,7 @@ template< , typename BOOST_MPL_AUX_NA_PARAM(N2) > struct shift_right + : shift_right_impl< typename shift_right_tag::type , typename shift_right_tag::type diff --git a/include/boost/mpl/aux_/preprocessed/no_ctps/times.hpp b/include/boost/mpl/aux_/preprocessed/no_ctps/times.hpp index 5203fcc..08ac200 100644 --- a/include/boost/mpl/aux_/preprocessed/no_ctps/times.hpp +++ b/include/boost/mpl/aux_/preprocessed/no_ctps/times.hpp @@ -60,21 +60,55 @@ template< typename T > struct times_tag typedef typename T::tag type; }; +/// forward declaration + template< typename BOOST_MPL_AUX_NA_PARAM(N1) , typename BOOST_MPL_AUX_NA_PARAM(N2) > +struct times2; + +template< + typename BOOST_MPL_AUX_NA_PARAM(N1) + , typename BOOST_MPL_AUX_NA_PARAM(N2) + , typename N3 = na, typename N4 = na, typename N5 = na + > struct times + : if_< + is_na + , times2< N1,N2 > + , times< + times2< N1,N2 > + , N3, N4, N5 + > + >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT( + 5 + , times + , ( N1, N2, N3, N4, N5 ) + ) +}; + +template< + typename N1 + , typename N2 + > +struct times2 : times_impl< typename times_tag::type , typename times_tag::type >::template apply< N1,N2 >::type { - BOOST_MPL_AUX_LAMBDA_SUPPORT(2, times, (N1, N2)) + BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( + 5 + , times + , ( N1, N2, na, na, na ) + ) }; -BOOST_MPL_AUX_NA_SPEC2(2, 2, times) +BOOST_MPL_AUX_NA_SPEC2(2, 5, times) }} diff --git a/include/boost/mpl/aux_/preprocessed/no_ttp/equal_to.hpp b/include/boost/mpl/aux_/preprocessed/no_ttp/equal_to.hpp index 25ae689..fa2dc4a 100644 --- a/include/boost/mpl/aux_/preprocessed/no_ttp/equal_to.hpp +++ b/include/boost/mpl/aux_/preprocessed/no_ttp/equal_to.hpp @@ -65,6 +65,7 @@ template< , typename BOOST_MPL_AUX_NA_PARAM(N2) > struct equal_to + : equal_to_impl< typename equal_to_tag::type , typename equal_to_tag::type diff --git a/include/boost/mpl/aux_/preprocessed/no_ttp/greater.hpp b/include/boost/mpl/aux_/preprocessed/no_ttp/greater.hpp index 6c4173c..faa3f2b 100644 --- a/include/boost/mpl/aux_/preprocessed/no_ttp/greater.hpp +++ b/include/boost/mpl/aux_/preprocessed/no_ttp/greater.hpp @@ -65,6 +65,7 @@ template< , typename BOOST_MPL_AUX_NA_PARAM(N2) > struct greater + : greater_impl< typename greater_tag::type , typename greater_tag::type diff --git a/include/boost/mpl/aux_/preprocessed/no_ttp/greater_equal.hpp b/include/boost/mpl/aux_/preprocessed/no_ttp/greater_equal.hpp index e7f5a34..392d142 100644 --- a/include/boost/mpl/aux_/preprocessed/no_ttp/greater_equal.hpp +++ b/include/boost/mpl/aux_/preprocessed/no_ttp/greater_equal.hpp @@ -65,6 +65,7 @@ template< , typename BOOST_MPL_AUX_NA_PARAM(N2) > struct greater_equal + : greater_equal_impl< typename greater_equal_tag::type , typename greater_equal_tag::type diff --git a/include/boost/mpl/aux_/preprocessed/no_ttp/less.hpp b/include/boost/mpl/aux_/preprocessed/no_ttp/less.hpp index fd485fd..6451680 100644 --- a/include/boost/mpl/aux_/preprocessed/no_ttp/less.hpp +++ b/include/boost/mpl/aux_/preprocessed/no_ttp/less.hpp @@ -65,6 +65,7 @@ template< , typename BOOST_MPL_AUX_NA_PARAM(N2) > struct less + : less_impl< typename less_tag::type , typename less_tag::type diff --git a/include/boost/mpl/aux_/preprocessed/no_ttp/less_equal.hpp b/include/boost/mpl/aux_/preprocessed/no_ttp/less_equal.hpp index 013ceac..00ae0d3 100644 --- a/include/boost/mpl/aux_/preprocessed/no_ttp/less_equal.hpp +++ b/include/boost/mpl/aux_/preprocessed/no_ttp/less_equal.hpp @@ -65,6 +65,7 @@ template< , typename BOOST_MPL_AUX_NA_PARAM(N2) > struct less_equal + : less_equal_impl< typename less_equal_tag::type , typename less_equal_tag::type diff --git a/include/boost/mpl/aux_/preprocessed/no_ttp/modulus.hpp b/include/boost/mpl/aux_/preprocessed/no_ttp/modulus.hpp index 0b41dde..6fd0cab 100644 --- a/include/boost/mpl/aux_/preprocessed/no_ttp/modulus.hpp +++ b/include/boost/mpl/aux_/preprocessed/no_ttp/modulus.hpp @@ -65,6 +65,7 @@ template< , typename BOOST_MPL_AUX_NA_PARAM(N2) > struct modulus + : modulus_impl< typename modulus_tag::type , typename modulus_tag::type diff --git a/include/boost/mpl/aux_/preprocessed/no_ttp/not_equal_to.hpp b/include/boost/mpl/aux_/preprocessed/no_ttp/not_equal_to.hpp index 96a06eb..7c940a5 100644 --- a/include/boost/mpl/aux_/preprocessed/no_ttp/not_equal_to.hpp +++ b/include/boost/mpl/aux_/preprocessed/no_ttp/not_equal_to.hpp @@ -65,6 +65,7 @@ template< , typename BOOST_MPL_AUX_NA_PARAM(N2) > struct not_equal_to + : not_equal_to_impl< typename not_equal_to_tag::type , typename not_equal_to_tag::type diff --git a/include/boost/mpl/aux_/preprocessed/no_ttp/shift_left.hpp b/include/boost/mpl/aux_/preprocessed/no_ttp/shift_left.hpp index daffe17..7ef4672 100644 --- a/include/boost/mpl/aux_/preprocessed/no_ttp/shift_left.hpp +++ b/include/boost/mpl/aux_/preprocessed/no_ttp/shift_left.hpp @@ -66,6 +66,7 @@ template< , typename BOOST_MPL_AUX_NA_PARAM(N2) > struct shift_left + : shift_left_impl< typename shift_left_tag::type , typename shift_left_tag::type diff --git a/include/boost/mpl/aux_/preprocessed/no_ttp/shift_right.hpp b/include/boost/mpl/aux_/preprocessed/no_ttp/shift_right.hpp index a564f35..91a98f7 100644 --- a/include/boost/mpl/aux_/preprocessed/no_ttp/shift_right.hpp +++ b/include/boost/mpl/aux_/preprocessed/no_ttp/shift_right.hpp @@ -66,6 +66,7 @@ template< , typename BOOST_MPL_AUX_NA_PARAM(N2) > struct shift_right + : shift_right_impl< typename shift_right_tag::type , typename shift_right_tag::type diff --git a/include/boost/mpl/aux_/preprocessed/plain/equal_to.hpp b/include/boost/mpl/aux_/preprocessed/plain/equal_to.hpp index 8a47494..bbc6bf0 100644 --- a/include/boost/mpl/aux_/preprocessed/plain/equal_to.hpp +++ b/include/boost/mpl/aux_/preprocessed/plain/equal_to.hpp @@ -65,6 +65,7 @@ template< , typename BOOST_MPL_AUX_NA_PARAM(N2) > struct equal_to + : equal_to_impl< typename equal_to_tag::type , typename equal_to_tag::type diff --git a/include/boost/mpl/aux_/preprocessed/plain/greater.hpp b/include/boost/mpl/aux_/preprocessed/plain/greater.hpp index 94f44c0..38c8bb3 100644 --- a/include/boost/mpl/aux_/preprocessed/plain/greater.hpp +++ b/include/boost/mpl/aux_/preprocessed/plain/greater.hpp @@ -65,6 +65,7 @@ template< , typename BOOST_MPL_AUX_NA_PARAM(N2) > struct greater + : greater_impl< typename greater_tag::type , typename greater_tag::type diff --git a/include/boost/mpl/aux_/preprocessed/plain/greater_equal.hpp b/include/boost/mpl/aux_/preprocessed/plain/greater_equal.hpp index f33ecf5..2aa8370 100644 --- a/include/boost/mpl/aux_/preprocessed/plain/greater_equal.hpp +++ b/include/boost/mpl/aux_/preprocessed/plain/greater_equal.hpp @@ -65,6 +65,7 @@ template< , typename BOOST_MPL_AUX_NA_PARAM(N2) > struct greater_equal + : greater_equal_impl< typename greater_equal_tag::type , typename greater_equal_tag::type diff --git a/include/boost/mpl/aux_/preprocessed/plain/less.hpp b/include/boost/mpl/aux_/preprocessed/plain/less.hpp index 291ae10..928d0e3 100644 --- a/include/boost/mpl/aux_/preprocessed/plain/less.hpp +++ b/include/boost/mpl/aux_/preprocessed/plain/less.hpp @@ -65,6 +65,7 @@ template< , typename BOOST_MPL_AUX_NA_PARAM(N2) > struct less + : less_impl< typename less_tag::type , typename less_tag::type diff --git a/include/boost/mpl/aux_/preprocessed/plain/less_equal.hpp b/include/boost/mpl/aux_/preprocessed/plain/less_equal.hpp index 24ac64e..364cd96 100644 --- a/include/boost/mpl/aux_/preprocessed/plain/less_equal.hpp +++ b/include/boost/mpl/aux_/preprocessed/plain/less_equal.hpp @@ -65,6 +65,7 @@ template< , typename BOOST_MPL_AUX_NA_PARAM(N2) > struct less_equal + : less_equal_impl< typename less_equal_tag::type , typename less_equal_tag::type diff --git a/include/boost/mpl/aux_/preprocessed/plain/modulus.hpp b/include/boost/mpl/aux_/preprocessed/plain/modulus.hpp index cb651b6..6a64e49 100644 --- a/include/boost/mpl/aux_/preprocessed/plain/modulus.hpp +++ b/include/boost/mpl/aux_/preprocessed/plain/modulus.hpp @@ -65,6 +65,7 @@ template< , typename BOOST_MPL_AUX_NA_PARAM(N2) > struct modulus + : modulus_impl< typename modulus_tag::type , typename modulus_tag::type diff --git a/include/boost/mpl/aux_/preprocessed/plain/not_equal_to.hpp b/include/boost/mpl/aux_/preprocessed/plain/not_equal_to.hpp index 4991367..c08d7f0 100644 --- a/include/boost/mpl/aux_/preprocessed/plain/not_equal_to.hpp +++ b/include/boost/mpl/aux_/preprocessed/plain/not_equal_to.hpp @@ -65,6 +65,7 @@ template< , typename BOOST_MPL_AUX_NA_PARAM(N2) > struct not_equal_to + : not_equal_to_impl< typename not_equal_to_tag::type , typename not_equal_to_tag::type diff --git a/include/boost/mpl/aux_/preprocessed/plain/shift_left.hpp b/include/boost/mpl/aux_/preprocessed/plain/shift_left.hpp index 7c65b63..cf9c837 100644 --- a/include/boost/mpl/aux_/preprocessed/plain/shift_left.hpp +++ b/include/boost/mpl/aux_/preprocessed/plain/shift_left.hpp @@ -66,6 +66,7 @@ template< , typename BOOST_MPL_AUX_NA_PARAM(N2) > struct shift_left + : shift_left_impl< typename shift_left_tag::type , typename shift_left_tag::type diff --git a/include/boost/mpl/aux_/preprocessed/plain/shift_right.hpp b/include/boost/mpl/aux_/preprocessed/plain/shift_right.hpp index 0caabeb..477229f 100644 --- a/include/boost/mpl/aux_/preprocessed/plain/shift_right.hpp +++ b/include/boost/mpl/aux_/preprocessed/plain/shift_right.hpp @@ -66,6 +66,7 @@ template< , typename BOOST_MPL_AUX_NA_PARAM(N2) > struct shift_right + : shift_right_impl< typename shift_right_tag::type , typename shift_right_tag::type