2 // Copyright Aleksey Gurtovoy 2001-2004
\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
9 // Preprocessed version of "boost/mpl/aux_/full_lambda.hpp" header
\r
10 // -- DO NOT modify by hand!
\r
12 namespace boost { namespace mpl {
\r
17 bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false
\r
26 struct lambda_or< false,false,false,false,false >
\r
40 typedef false_ is_le;
\r
48 struct is_lambda_expression
\r
53 template< int N, typename Tag >
\r
54 struct lambda< arg<N>, Tag >
\r
56 typedef true_ is_le;
\r
57 typedef mpl::arg<N> result_; // qualified for the sake of MIPSpro 7.41
\r
58 typedef mpl::protect<result_> type;
\r
71 typedef false_ is_le;
\r
76 typedef result_ type;
\r
82 typename IsLE, typename Tag
\r
83 , template< typename P1 > class F
\r
92 typedef result_ type;
\r
97 , template< typename P1 > class F
\r
100 struct le_result1< true_,Tag,F,L1 >
\r
104 , typename L1::result_
\r
107 typedef mpl::protect<result_> type;
\r
113 template< typename P1 > class F
\r
123 typedef lambda< T1,Tag > l1;
\r
124 typedef typename l1::is_le is_le1;
\r
125 typedef typename aux::lambda_or<
\r
129 typedef aux::le_result1<
\r
133 typedef typename le_result_::result_ result_;
\r
134 typedef typename le_result_::type type;
\r
138 typename F, typename T1
\r
147 typedef false_ is_le;
\r
153 typedef result_ type;
\r
159 typename IsLE, typename Tag
\r
160 , template< typename P1, typename P2 > class F
\r
161 , typename L1, typename L2
\r
166 typename L1::type, typename L2::type
\r
169 typedef result_ type;
\r
174 , template< typename P1, typename P2 > class F
\r
175 , typename L1, typename L2
\r
177 struct le_result2< true_,Tag,F,L1,L2 >
\r
181 , typename L1::result_, typename L2::result_
\r
184 typedef mpl::protect<result_> type;
\r
190 template< typename P1, typename P2 > class F
\r
191 , typename T1, typename T2
\r
200 typedef lambda< T1,Tag > l1;
\r
201 typedef lambda< T2,Tag > l2;
\r
203 typedef typename l1::is_le is_le1;
\r
204 typedef typename l2::is_le is_le2;
\r
207 typedef typename aux::lambda_or<
\r
208 is_le1::value, is_le2::value
\r
211 typedef aux::le_result2<
\r
212 is_le, Tag, F, l1, l2
\r
215 typedef typename le_result_::result_ result_;
\r
216 typedef typename le_result_::type type;
\r
220 typename F, typename T1, typename T2
\r
229 typedef false_ is_le;
\r
235 typedef result_ type;
\r
241 typename IsLE, typename Tag
\r
242 , template< typename P1, typename P2, typename P3 > class F
\r
243 , typename L1, typename L2, typename L3
\r
248 typename L1::type, typename L2::type, typename L3::type
\r
251 typedef result_ type;
\r
256 , template< typename P1, typename P2, typename P3 > class F
\r
257 , typename L1, typename L2, typename L3
\r
259 struct le_result3< true_,Tag,F,L1,L2,L3 >
\r
263 , typename L1::result_, typename L2::result_, typename L3::result_
\r
266 typedef mpl::protect<result_> type;
\r
272 template< typename P1, typename P2, typename P3 > class F
\r
273 , typename T1, typename T2, typename T3
\r
282 typedef lambda< T1,Tag > l1;
\r
283 typedef lambda< T2,Tag > l2;
\r
284 typedef lambda< T3,Tag > l3;
\r
286 typedef typename l1::is_le is_le1;
\r
287 typedef typename l2::is_le is_le2;
\r
288 typedef typename l3::is_le is_le3;
\r
291 typedef typename aux::lambda_or<
\r
292 is_le1::value, is_le2::value, is_le3::value
\r
295 typedef aux::le_result3<
\r
296 is_le, Tag, F, l1, l2, l3
\r
299 typedef typename le_result_::result_ result_;
\r
300 typedef typename le_result_::type type;
\r
304 typename F, typename T1, typename T2, typename T3
\r
308 bind3< F,T1,T2,T3 >
\r
313 typedef false_ is_le;
\r
319 typedef result_ type;
\r
325 typename IsLE, typename Tag
\r
326 , template< typename P1, typename P2, typename P3, typename P4 > class F
\r
327 , typename L1, typename L2, typename L3, typename L4
\r
332 typename L1::type, typename L2::type, typename L3::type
\r
333 , typename L4::type
\r
336 typedef result_ type;
\r
341 , template< typename P1, typename P2, typename P3, typename P4 > class F
\r
342 , typename L1, typename L2, typename L3, typename L4
\r
344 struct le_result4< true_,Tag,F,L1,L2,L3,L4 >
\r
348 , typename L1::result_, typename L2::result_, typename L3::result_
\r
349 , typename L4::result_
\r
352 typedef mpl::protect<result_> type;
\r
358 template< typename P1, typename P2, typename P3, typename P4 > class F
\r
359 , typename T1, typename T2, typename T3, typename T4
\r
368 typedef lambda< T1,Tag > l1;
\r
369 typedef lambda< T2,Tag > l2;
\r
370 typedef lambda< T3,Tag > l3;
\r
371 typedef lambda< T4,Tag > l4;
\r
373 typedef typename l1::is_le is_le1;
\r
374 typedef typename l2::is_le is_le2;
\r
375 typedef typename l3::is_le is_le3;
\r
376 typedef typename l4::is_le is_le4;
\r
379 typedef typename aux::lambda_or<
\r
380 is_le1::value, is_le2::value, is_le3::value, is_le4::value
\r
383 typedef aux::le_result4<
\r
384 is_le, Tag, F, l1, l2, l3, l4
\r
387 typedef typename le_result_::result_ result_;
\r
388 typedef typename le_result_::type type;
\r
392 typename F, typename T1, typename T2, typename T3, typename T4
\r
396 bind4< F,T1,T2,T3,T4 >
\r
401 typedef false_ is_le;
\r
407 typedef result_ type;
\r
413 typename IsLE, typename Tag
\r
414 , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F
\r
415 , typename L1, typename L2, typename L3, typename L4, typename L5
\r
420 typename L1::type, typename L2::type, typename L3::type
\r
421 , typename L4::type, typename L5::type
\r
424 typedef result_ type;
\r
429 , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F
\r
430 , typename L1, typename L2, typename L3, typename L4, typename L5
\r
432 struct le_result5< true_,Tag,F,L1,L2,L3,L4,L5 >
\r
436 , typename L1::result_, typename L2::result_, typename L3::result_
\r
437 , typename L4::result_, typename L5::result_
\r
440 typedef mpl::protect<result_> type;
\r
447 typename P1, typename P2, typename P3, typename P4
\r
451 , typename T1, typename T2, typename T3, typename T4, typename T5
\r
455 F< T1,T2,T3,T4,T5 >
\r
460 typedef lambda< T1,Tag > l1;
\r
461 typedef lambda< T2,Tag > l2;
\r
462 typedef lambda< T3,Tag > l3;
\r
463 typedef lambda< T4,Tag > l4;
\r
464 typedef lambda< T5,Tag > l5;
\r
466 typedef typename l1::is_le is_le1;
\r
467 typedef typename l2::is_le is_le2;
\r
468 typedef typename l3::is_le is_le3;
\r
469 typedef typename l4::is_le is_le4;
\r
470 typedef typename l5::is_le is_le5;
\r
473 typedef typename aux::lambda_or<
\r
474 is_le1::value, is_le2::value, is_le3::value, is_le4::value
\r
478 typedef aux::le_result5<
\r
479 is_le, Tag, F, l1, l2, l3, l4, l5
\r
482 typedef typename le_result_::result_ result_;
\r
483 typedef typename le_result_::type type;
\r
487 typename F, typename T1, typename T2, typename T3, typename T4
\r
492 bind5< F,T1,T2,T3,T4,T5 >
\r
497 typedef false_ is_le;
\r
500 , T1, T2, T3, T4, T5
\r
503 typedef result_ type;
\r
506 /// special case for 'protect'
\r
507 template< typename T, typename Tag >
\r
508 struct lambda< mpl::protect<T>, Tag >
\r
510 typedef false_ is_le;
\r
511 typedef mpl::protect<T> result_;
\r
512 typedef result_ type;
\r
515 /// specializations for the main 'bind' form
\r
518 typename F, typename T1, typename T2, typename T3, typename T4
\r
523 bind< F,T1,T2,T3,T4,T5 >
\r
528 typedef false_ is_le;
\r
529 typedef bind< F,T1,T2,T3,T4,T5 > result_;
\r
530 typedef result_ type;
\r
533 /// workaround for MWCW 8.3+/EDG < 303, leads to ambiguity on Digital Mars
\r
536 typename F, typename Tag1, typename Tag2
\r
543 typedef lambda< F,Tag2 > l1;
\r
544 typedef lambda< Tag1,Tag2 > l2;
\r
545 typedef typename l1::is_le is_le;
\r
546 typedef aux::le_result2<is_le, Tag2, mpl::lambda, l1, l2> le_result_;
\r
547 typedef typename le_result_::result_ result_;
\r
548 typedef typename le_result_::type type;
\r
551 BOOST_MPL_AUX_NA_SPEC(2, lambda)
\r