More boost dependencies.
[dyninst.git] / external / boost / mpl / aux_ / preprocessed / msvc60 / inherit.hpp
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