]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
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 "boost/mpl/aux_/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 |