1 2 // Copyright Aleksey Gurtovoy 2000-2004 3 // Copyright Jaap Suter 2003 4 // 5 // Distributed under the Boost Software License, Version 1.0. 6 // (See accompanying file LICENSE_1_0.txt or copy at 7 // http://www.boost.org/LICENSE_1_0.txt) 8 // 9 10 // *Preprocessed* version of the main "bitand.hpp" header 11 // -- DO NOT modify by hand! 12 13 namespace boost { namespace mpl { 14 15 template< 16 typename Tag1 17 , typename Tag2 18 > 19 struct bitand_impl 20 : if_c< 21 ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) 22 > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) 23 ) 24 25 , aux::cast2nd_impl< bitand_impl< Tag1,Tag1 >,Tag1, Tag2 > 26 , aux::cast1st_impl< bitand_impl< Tag2,Tag2 >,Tag1, Tag2 > 27 >::type 28 { 29 }; 30 31 /// for Digital Mars C++/compilers with no CTPS/TTP support 32 template<> struct bitand_impl< na,na > 33 { 34 template< typename U1, typename U2 > struct apply 35 { 36 typedef apply type; 37 BOOST_STATIC_CONSTANT(int, value = 0); 38 }; 39 }; 40 41 template< typename Tag > struct bitand_impl< na,Tag > 42 { 43 template< typename U1, typename U2 > struct apply 44 { 45 typedef apply type; 46 BOOST_STATIC_CONSTANT(int, value = 0); 47 }; 48 }; 49 50 template< typename Tag > struct bitand_impl< Tag,na > 51 { 52 template< typename U1, typename U2 > struct apply 53 { 54 typedef apply type; 55 BOOST_STATIC_CONSTANT(int, value = 0); 56 }; 57 }; 58 59 template< typename T > struct bitand_tag 60 { 61 typedef typename T::tag type; 62 }; 63 64 template< 65 typename BOOST_MPL_AUX_NA_PARAM(N1) 66 , typename BOOST_MPL_AUX_NA_PARAM(N2) 67 , typename N3 = na, typename N4 = na, typename N5 = na 68 > 69 struct bitand_ 70 : bitand_< bitand_< bitand_< bitand_< N1,N2 >, N3>, N4>, N5> 71 { 72 BOOST_MPL_AUX_LAMBDA_SUPPORT( 73 5 74 , bitand_ 75 , ( N1, N2, N3, N4, N5 ) 76 ) 77 }; 78 79 template< 80 typename N1, typename N2, typename N3, typename N4 81 > 82 struct bitand_< N1,N2,N3,N4,na > 83 84 : bitand_< bitand_< bitand_< N1,N2 >, N3>, N4> 85 { 86 BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( 87 5 88 , bitand_ 89 , ( N1, N2, N3, N4, na ) 90 ) 91 }; 92 93 template< 94 typename N1, typename N2, typename N3 95 > 96 struct bitand_< N1,N2,N3,na,na > 97 98 : bitand_< bitand_< N1,N2 >, N3> 99 { 100 BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( 101 5 102 , bitand_ 103 , ( N1, N2, N3, na, na ) 104 ) 105 }; 106 107 template< 108 typename N1, typename N2 109 > 110 struct bitand_< N1,N2,na,na,na > 111 : bitand_impl< 112 typename bitand_tag<N1>::type 113 , typename bitand_tag<N2>::type 114 >::template apply< N1,N2 >::type 115 { 116 BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( 117 5 118 , bitand_ 119 , ( N1, N2, na, na, na ) 120 ) 121 122 }; 123 124 BOOST_MPL_AUX_NA_SPEC2(2, 5, bitand_) 125 126 }} 127 128 namespace boost { namespace mpl { 129 template<> 130 struct bitand_impl< integral_c_tag,integral_c_tag > 131 { 132 template< typename N1, typename N2 > struct apply 133 134 : integral_c< 135 typename aux::largest_int< 136 typename N1::value_type 137 , typename N2::value_type 138 >::type 139 , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value 140 & BOOST_MPL_AUX_VALUE_WKND(N2)::value 141 ) 142 > 143 { 144 }; 145 }; 146 147 }} 148