File indexing completed on 2025-01-18 09:41:22
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012 namespace boost { namespace mpl {
0013
0014 template<
0015 typename Tag1
0016 , typename Tag2
0017
0018 , BOOST_MPL_AUX_NTTP_DECL(int, tag1_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value
0019 , BOOST_MPL_AUX_NTTP_DECL(int, tag2_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value
0020 >
0021 struct plus_impl
0022 : if_c<
0023 ( tag1_ > tag2_ )
0024 , aux::cast2nd_impl< plus_impl< Tag1,Tag1 >,Tag1, Tag2 >
0025 , aux::cast1st_impl< plus_impl< Tag2,Tag2 >,Tag1, Tag2 >
0026 >::type
0027 {
0028 };
0029
0030
0031 template<> struct plus_impl< na,na >
0032 {
0033 template< typename U1, typename U2 > struct apply
0034 {
0035 typedef apply type;
0036 BOOST_STATIC_CONSTANT(int, value = 0);
0037 };
0038 };
0039
0040 template<> struct plus_impl< na,integral_c_tag >
0041 {
0042 template< typename U1, typename U2 > struct apply
0043 {
0044 typedef apply type;
0045 BOOST_STATIC_CONSTANT(int, value = 0);
0046 };
0047 };
0048
0049 template<> struct plus_impl< integral_c_tag,na >
0050 {
0051 template< typename U1, typename U2 > struct apply
0052 {
0053 typedef apply type;
0054 BOOST_STATIC_CONSTANT(int, value = 0);
0055 };
0056 };
0057
0058 template< typename T > struct plus_tag
0059 : tag< T,na >
0060 {
0061 };
0062
0063
0064
0065 template<
0066 typename BOOST_MPL_AUX_NA_PARAM(N1)
0067 , typename BOOST_MPL_AUX_NA_PARAM(N2)
0068 >
0069 struct plus2;
0070
0071 template<
0072 typename BOOST_MPL_AUX_NA_PARAM(N1)
0073 , typename BOOST_MPL_AUX_NA_PARAM(N2)
0074 , typename N3 = na, typename N4 = na, typename N5 = na
0075 >
0076 struct plus
0077
0078 : aux::msvc_eti_base< typename if_<
0079
0080 is_na<N3>
0081 , plus2< N1,N2 >
0082 , plus<
0083 plus2< N1,N2 >
0084 , N3, N4, N5
0085 >
0086 >::type
0087
0088 >
0089
0090 {
0091 BOOST_MPL_AUX_LAMBDA_SUPPORT(
0092 5
0093 , plus
0094 , ( N1, N2, N3, N4, N5 )
0095 )
0096 };
0097
0098 template<
0099 typename N1
0100 , typename N2
0101 >
0102 struct plus2
0103 : aux::msvc_eti_base< typename apply_wrap2<
0104 plus_impl<
0105 typename plus_tag<N1>::type
0106 , typename plus_tag<N2>::type
0107 >
0108 , N1
0109 , N2
0110 >::type >::type
0111
0112 {
0113 BOOST_MPL_AUX_LAMBDA_SUPPORT(2, plus2, (N1, N2))
0114
0115 };
0116
0117 BOOST_MPL_AUX_NA_SPEC2(2, 5, plus)
0118
0119 }}
0120
0121 namespace boost { namespace mpl {
0122
0123 namespace aux {
0124 template< typename T, T n1, T n2 >
0125 struct plus_wknd
0126 {
0127 BOOST_STATIC_CONSTANT(T, value = (n1 + n2));
0128 typedef integral_c< T,value > type;
0129 };
0130
0131 }
0132
0133 template<>
0134 struct plus_impl< integral_c_tag,integral_c_tag >
0135 {
0136 template< typename N1, typename N2 > struct apply
0137 : aux::plus_wknd<
0138 typename aux::largest_int<
0139 typename N1::value_type
0140 , typename N2::value_type
0141 >::type
0142 , N1::value
0143 , N2::value
0144 >::type
0145
0146 {
0147 };
0148 };
0149
0150 }}