1 2 // Copyright Aleksey Gurtovoy 2001-2004 3 // 4 // Distributed under the Boost Software License, Version 1.0. 5 // (See accompanying file LICENSE_1_0.txt or copy at 6 // http://www.boost.org/LICENSE_1_0.txt) 7 // 8 9 // Preprocessed version of "boost/mpl/inherit.hpp" header 10 // -- DO NOT modify by hand! 11 12 namespace boost { namespace mpl { 13 14 namespace aux { 15 16 template< bool C1, bool C2 > 17 struct inherit2_impl 18 { 19 template< typename Derived, typename T1, typename T2 > struct result_ 20 : T1, T2 21 { 22 typedef Derived type_; 23 }; 24 }; 25 26 template<> 27 struct inherit2_impl< false,true > 28 { 29 template< typename Derived, typename T1, typename T2 > struct result_ 30 : T1 31 { 32 typedef T1 type_; 33 }; 34 }; 35 36 template<> 37 struct inherit2_impl< true,false > 38 { 39 template< typename Derived, typename T1, typename T2 > struct result_ 40 : T2 41 { 42 typedef T2 type_; 43 }; 44 }; 45 46 template<> 47 struct inherit2_impl< true,true > 48 { 49 template< typename Derived, typename T1, typename T2 > struct result_ 50 { 51 typedef T1 type_; 52 }; 53 }; 54 55 } // namespace aux 56 57 template< 58 typename BOOST_MPL_AUX_NA_PARAM(T1) 59 , typename BOOST_MPL_AUX_NA_PARAM(T2) 60 > 61 struct inherit2 62 : aux::inherit2_impl< 63 is_empty_base<T1>::value 64 , is_empty_base<T2>::value 65 >::template result_< inherit2< T1,T2 >,T1, T2 > 66 { 67 typedef typename inherit2::type_ type; 68 BOOST_MPL_AUX_LAMBDA_SUPPORT(2, inherit2, (T1, T2)) 69 }; 70 71 BOOST_MPL_AUX_NA_SPEC(2, inherit2) 72 73 template< 74 typename T1 = na, typename T2 = na, typename T3 = na 75 > 76 struct inherit3 77 : inherit2< 78 typename inherit2< 79 T1, T2 80 >::type 81 , T3 82 > 83 { 84 BOOST_MPL_AUX_LAMBDA_SUPPORT( 85 3 86 , inherit3 87 , ( T1, T2, T3) 88 ) 89 }; 90 91 BOOST_MPL_AUX_NA_SPEC(3, inherit3) 92 93 template< 94 typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na 95 > 96 struct inherit4 97 : inherit2< 98 typename inherit3< 99 T1, T2, T3 100 >::type 101 , T4 102 > 103 { 104 BOOST_MPL_AUX_LAMBDA_SUPPORT( 105 4 106 , inherit4 107 , ( T1, T2, T3, T4) 108 ) 109 }; 110 111 BOOST_MPL_AUX_NA_SPEC(4, inherit4) 112 113 template< 114 typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na 115 , typename T5 = na 116 > 117 struct inherit5 118 : inherit2< 119 typename inherit4< 120 T1, T2, T3, T4 121 >::type 122 , T5 123 > 124 { 125 BOOST_MPL_AUX_LAMBDA_SUPPORT( 126 5 127 , inherit5 128 , ( T1, T2, T3, T4, T5) 129 ) 130 }; 131 132 BOOST_MPL_AUX_NA_SPEC(5, inherit5) 133 134 /// primary template 135 136 template< 137 typename T1 = empty_base, typename T2 = empty_base 138 , typename T3 = empty_base, typename T4 = empty_base 139 , typename T5 = empty_base 140 > 141 struct inherit 142 : inherit5< T1,T2,T3,T4,T5 > 143 { 144 }; 145 146 template<> 147 struct inherit< na,na,na,na,na > 148 { 149 template< 150 151 typename T1 = empty_base, typename T2 = empty_base 152 , typename T3 = empty_base, typename T4 = empty_base 153 , typename T5 = empty_base 154 155 > 156 struct apply 157 : inherit< T1,T2,T3,T4,T5 > 158 { 159 }; 160 }; 161 162 BOOST_MPL_AUX_NA_SPEC_LAMBDA(5, inherit) 163 BOOST_MPL_AUX_NA_SPEC_ARITY(5, inherit) 164 BOOST_MPL_AUX_NA_SPEC_TEMPLATE_ARITY(5, 5, inherit) 165 }} 166 167