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 "boost/mpl/bitxor.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 bitxor_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< bitxor_impl< Tag1,Tag1 >,Tag1, Tag2 > 26 , aux::cast1st_impl< bitxor_impl< Tag2,Tag2 >,Tag1, Tag2 > 27 >::type 28 { 29 }; 30 31 /// for Digital Mars C++/compilers with no CTPS/TTP support 32 template<> struct bitxor_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<> struct bitxor_impl< na,integral_c_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<> struct bitxor_impl< integral_c_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 bitxor_tag 60 { 61 typedef typename T::tag type; 62 }; 63 64 /// forward declaration 65 66 template< 67 typename BOOST_MPL_AUX_NA_PARAM(N1) 68 , typename BOOST_MPL_AUX_NA_PARAM(N2) 69 > 70 struct bitxor_2; 71 72 template< 73 typename BOOST_MPL_AUX_NA_PARAM(N1) 74 , typename BOOST_MPL_AUX_NA_PARAM(N2) 75 , typename N3 = na, typename N4 = na, typename N5 = na 76 > 77 struct bitxor_ 78 79 : if_< 80 81 is_na<N3> 82 , bitxor_2< N1,N2 > 83 , bitxor_< 84 bitxor_2< N1,N2 > 85 , N3, N4, N5 86 > 87 >::type 88 89 { 90 BOOST_MPL_AUX_LAMBDA_SUPPORT( 91 5 92 , bitxor_ 93 , ( N1, N2, N3, N4, N5 ) 94 ) 95 }; 96 97 template< 98 typename N1 99 , typename N2 100 > 101 struct bitxor_2 102 : bitxor_impl< 103 typename bitxor_tag<N1>::type 104 , typename bitxor_tag<N2>::type 105 >::template apply< N1,N2 >::type 106 { 107 BOOST_MPL_AUX_LAMBDA_SUPPORT(2, bitxor_2, (N1, N2)) 108 109 }; 110 111 BOOST_MPL_AUX_NA_SPEC2(2, 5, bitxor_) 112 113 }} 114 115 namespace boost { namespace mpl { 116 template<> 117 struct bitxor_impl< integral_c_tag,integral_c_tag > 118 { 119 template< typename N1, typename N2 > struct apply 120 121 : integral_c< 122 typename aux::largest_int< 123 typename N1::value_type 124 , typename N2::value_type 125 >::type 126 , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value 127 ^ BOOST_MPL_AUX_VALUE_WKND(N2)::value 128 ) 129 > 130 { 131 }; 132 }; 133 134 }} 135