blob: 12328f7b1369fc71f15683c5063aa0a67535844e [file] [log] [blame]
Jeff Thompsona28eed82013-08-22 16:21:10 -07001
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 "ndnboost/mpl/inherit.hpp" header
10// -- DO NOT modify by hand!
11
12namespace ndnboost { namespace mpl {
13
14namespace aux {
15
16template< bool C1, bool C2 >
17struct inherit2_impl
18{
19 template< typename Derived, typename T1, typename T2 > struct result_
20 : T1, T2
21 {
22 typedef Derived type_;
23 };
24};
25
26template<>
27struct 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
36template<>
37struct 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
46template<>
47struct 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
57template<
58 typename BOOST_MPL_AUX_NA_PARAM(T1)
59 , typename BOOST_MPL_AUX_NA_PARAM(T2)
60 >
61struct 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
71BOOST_MPL_AUX_NA_SPEC(2, inherit2)
72
73template<
74 typename T1 = na, typename T2 = na, typename T3 = na
75 >
76struct 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
91BOOST_MPL_AUX_NA_SPEC(3, inherit3)
92
93template<
94 typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na
95 >
96struct 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
111BOOST_MPL_AUX_NA_SPEC(4, inherit4)
112
113template<
114 typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na
115 , typename T5 = na
116 >
117struct 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
132BOOST_MPL_AUX_NA_SPEC(5, inherit5)
133
134/// primary template
135
136template<
137 typename T1 = empty_base, typename T2 = empty_base
138 , typename T3 = empty_base, typename T4 = empty_base
139 , typename T5 = empty_base
140 >
141struct inherit
142 : inherit5< T1,T2,T3,T4,T5 >
143{
144};
145
146template<>
147struct 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
162BOOST_MPL_AUX_NA_SPEC_LAMBDA(5, inherit)
163BOOST_MPL_AUX_NA_SPEC_ARITY(5, inherit)
164BOOST_MPL_AUX_NA_SPEC_TEMPLATE_ARITY(5, 5, inherit)
165}}
166