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