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 the main "inherit.hpp" header 10 // -- DO NOT modify by hand! 11 12 namespace boost { namespace mpl { 13 14 template< 15 typename BOOST_MPL_AUX_NA_PARAM(T1) 16 , typename BOOST_MPL_AUX_NA_PARAM(T2) 17 > 18 struct inherit2 19 : T1, T2 20 { 21 typedef inherit2 type; 22 BOOST_MPL_AUX_LAMBDA_SUPPORT(2, inherit2, (T1, T2)) 23 }; 24 25 template< typename T1 > 26 struct inherit2< T1,empty_base > 27 { 28 typedef T1 type; 29 BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (T1, empty_base)) 30 }; 31 32 template< typename T2 > 33 struct inherit2< empty_base,T2 > 34 { 35 typedef T2 type; 36 BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (empty_base, T2)) 37 }; 38 39 template<> 40 struct inherit2< empty_base,empty_base > 41 { 42 typedef empty_base type; 43 BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (empty_base, empty_base)) 44 }; 45 46 BOOST_MPL_AUX_NA_SPEC(2, inherit2) 47 48 template< 49 typename T1 = na, typename T2 = na, typename T3 = na 50 > 51 struct inherit3 52 : inherit2< 53 typename inherit2< 54 T1, T2 55 >::type 56 , T3 57 > 58 { 59 BOOST_MPL_AUX_LAMBDA_SUPPORT( 60 3 61 , inherit3 62 , ( T1, T2, T3) 63 ) 64 }; 65 66 BOOST_MPL_AUX_NA_SPEC(3, inherit3) 67 68 template< 69 typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na 70 > 71 struct inherit4 72 : inherit2< 73 typename inherit3< 74 T1, T2, T3 75 >::type 76 , T4 77 > 78 { 79 BOOST_MPL_AUX_LAMBDA_SUPPORT( 80 4 81 , inherit4 82 , ( T1, T2, T3, T4) 83 ) 84 }; 85 86 BOOST_MPL_AUX_NA_SPEC(4, inherit4) 87 88 template< 89 typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na 90 , typename T5 = na 91 > 92 struct inherit5 93 : inherit2< 94 typename inherit4< 95 T1, T2, T3, T4 96 >::type 97 , T5 98 > 99 { 100 BOOST_MPL_AUX_LAMBDA_SUPPORT( 101 5 102 , inherit5 103 , ( T1, T2, T3, T4, T5) 104 ) 105 }; 106 107 BOOST_MPL_AUX_NA_SPEC(5, inherit5) 108 109 /// primary template 110 111 template< 112 typename T1 = empty_base, typename T2 = empty_base 113 , typename T3 = empty_base, typename T4 = empty_base 114 , typename T5 = empty_base 115 > 116 struct inherit 117 : inherit5< T1,T2,T3,T4,T5 > 118 { 119 }; 120 121 template<> 122 struct inherit< na,na,na,na,na > 123 { 124 template< 125 126 typename T1, typename T2, typename T3, typename T4, typename T5 127 128 > 129 struct apply 130 : inherit< T1,T2,T3,T4,T5 > 131 { 132 }; 133 }; 134 135 BOOST_MPL_AUX_NA_SPEC_LAMBDA(5, inherit) 136 BOOST_MPL_AUX_NA_SPEC_ARITY(5, inherit) 137 BOOST_MPL_AUX_NA_SPEC_TEMPLATE_ARITY(5, 5, inherit) 138 }} 139 140