]> git.donarmstrong.com Git - rsem.git/blob - boost/mpl/aux_/preprocessed/bcc/lambda_no_ctps.hpp
RSEM Source Codes
[rsem.git] / boost / mpl / aux_ / preprocessed / bcc / lambda_no_ctps.hpp
1
2 // Copyright Aleksey Gurtovoy 2000-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 "lambda_no_ctps.hpp" header
10 // -- DO NOT modify by hand!
11
12 namespace boost { namespace mpl {
13
14 namespace aux {
15
16 template<
17       bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false
18     , bool C5 = false
19     >
20 struct lambda_or
21     : true_
22 {
23 };
24
25 template<>
26 struct lambda_or< false,false,false,false,false >
27     : false_
28 {
29 };
30
31 template< typename Arity > struct lambda_impl
32 {
33     template< typename T, typename Tag, typename Protect > struct result_
34     {
35         typedef T type;
36         typedef is_placeholder<T> is_le;
37     };
38 };
39
40 template<> struct lambda_impl< int_<1> >
41 {
42     template< typename F, typename Tag, typename Protect > struct result_
43     {
44         typedef lambda< typename F::arg1, Tag, false_ > l1;
45         typedef typename l1::is_le is_le1;
46         typedef aux::lambda_or<
47               BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value
48             > is_le;
49
50         typedef bind1<
51               typename F::rebind
52             , typename l1::type
53             > bind_;
54
55         typedef typename if_<
56               is_le
57             , if_< Protect, mpl::protect<bind_>, bind_ >
58             , identity<F>
59             >::type type_;
60
61         typedef typename type_::type type;
62     };
63 };
64
65 template<> struct lambda_impl< int_<2> >
66 {
67     template< typename F, typename Tag, typename Protect > struct result_
68     {
69         typedef lambda< typename F::arg1, Tag, false_ > l1;
70         typedef lambda< typename F::arg2, Tag, false_ > l2;
71         
72         typedef typename l1::is_le is_le1;
73         typedef typename l2::is_le is_le2;
74         
75
76         typedef aux::lambda_or<
77               BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value
78             > is_le;
79
80         typedef bind2<
81               typename F::rebind
82             , typename l1::type, typename l2::type
83             > bind_;
84
85         typedef typename if_<
86               is_le
87             , if_< Protect, mpl::protect<bind_>, bind_ >
88             , identity<F>
89             >::type type_;
90
91         typedef typename type_::type type;
92     };
93 };
94
95 template<> struct lambda_impl< int_<3> >
96 {
97     template< typename F, typename Tag, typename Protect > struct result_
98     {
99         typedef lambda< typename F::arg1, Tag, false_ > l1;
100         typedef lambda< typename F::arg2, Tag, false_ > l2;
101         typedef lambda< typename F::arg3, Tag, false_ > l3;
102         
103         typedef typename l1::is_le is_le1;
104         typedef typename l2::is_le is_le2;
105         typedef typename l3::is_le is_le3;
106         
107
108         typedef aux::lambda_or<
109               BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value
110             > is_le;
111
112         typedef bind3<
113               typename F::rebind
114             , typename l1::type, typename l2::type, typename l3::type
115             > bind_;
116
117         typedef typename if_<
118               is_le
119             , if_< Protect, mpl::protect<bind_>, bind_ >
120             , identity<F>
121             >::type type_;
122
123         typedef typename type_::type type;
124     };
125 };
126
127 template<> struct lambda_impl< int_<4> >
128 {
129     template< typename F, typename Tag, typename Protect > struct result_
130     {
131         typedef lambda< typename F::arg1, Tag, false_ > l1;
132         typedef lambda< typename F::arg2, Tag, false_ > l2;
133         typedef lambda< typename F::arg3, Tag, false_ > l3;
134         typedef lambda< typename F::arg4, Tag, false_ > l4;
135         
136         typedef typename l1::is_le is_le1;
137         typedef typename l2::is_le is_le2;
138         typedef typename l3::is_le is_le3;
139         typedef typename l4::is_le is_le4;
140         
141
142         typedef aux::lambda_or<
143               BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value
144             > is_le;
145
146         typedef bind4<
147               typename F::rebind
148             , typename l1::type, typename l2::type, typename l3::type
149             , typename l4::type
150             > bind_;
151
152         typedef typename if_<
153               is_le
154             , if_< Protect, mpl::protect<bind_>, bind_ >
155             , identity<F>
156             >::type type_;
157
158         typedef typename type_::type type;
159     };
160 };
161
162 template<> struct lambda_impl< int_<5> >
163 {
164     template< typename F, typename Tag, typename Protect > struct result_
165     {
166         typedef lambda< typename F::arg1, Tag, false_ > l1;
167         typedef lambda< typename F::arg2, Tag, false_ > l2;
168         typedef lambda< typename F::arg3, Tag, false_ > l3;
169         typedef lambda< typename F::arg4, Tag, false_ > l4;
170         typedef lambda< typename F::arg5, Tag, false_ > l5;
171         
172         typedef typename l1::is_le is_le1;
173         typedef typename l2::is_le is_le2;
174         typedef typename l3::is_le is_le3;
175         typedef typename l4::is_le is_le4;
176         typedef typename l5::is_le is_le5;
177         
178
179         typedef aux::lambda_or<
180               BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le5)::value
181             > is_le;
182
183         typedef bind5<
184               typename F::rebind
185             , typename l1::type, typename l2::type, typename l3::type
186             , typename l4::type, typename l5::type
187             > bind_;
188
189         typedef typename if_<
190               is_le
191             , if_< Protect, mpl::protect<bind_>, bind_ >
192             , identity<F>
193             >::type type_;
194
195         typedef typename type_::type type;
196     };
197 };
198
199 } // namespace aux
200
201 template<
202       typename T
203     , typename Tag
204     , typename Protect
205     >
206 struct lambda
207 {
208     /// Metafunction forwarding confuses MSVC 6.x
209     typedef typename aux::template_arity<T>::type arity_;
210     typedef typename aux::lambda_impl<arity_>
211         ::template result_< T,Tag,Protect > l_;
212
213     typedef typename l_::type type;
214     typedef typename l_::is_le is_le;
215     BOOST_MPL_AUX_LAMBDA_SUPPORT(3, lambda, (T, Tag, Protect))
216 };
217
218 BOOST_MPL_AUX_NA_SPEC2(1, 3, lambda)
219
220 template<
221       typename T
222     >
223 struct is_lambda_expression
224     : lambda<T>::is_le
225 {
226 };
227
228 }}
229