1// -- bind_functions.hpp -- Boost Lambda Library
2//
3// Copyright (C) 1999, 2000 Jaakko Jarvi (jaakko.jarvi@cs.utu.fi)
4//
5// Distributed under the Boost Software License, Version 1.0. (See
6// accompanying file LICENSE_1_0.txt or copy at
7// http://www.boost.org/LICENSE_1_0.txt)
8//
9// For more information, see http://www.boost.org
10
11// ----------------------------------------------------------------
12
13#ifndef BOOST_LAMBDA_BIND_FUNCTIONS_HPP
14#define BOOST_LAMBDA_BIND_FUNCTIONS_HPP
15
16
17namespace boost {
18namespace lambda {
19
20#ifdef BOOST_LAMBDA_INCORRECT_BIND_OVERLOADING
21
22 // gcc 2.96 instantiates bind functions it does not even call.
23 // These instantiations lead to incorrect types in the return type,
24 // and a compilation error results.
25 // This tweaking is to prevent the formation of the erroneous type.
26namespace detail {
27
28template<class T> struct constify_non_funcs {
29 typedef typename
30 detail::IF_type<boost::is_function<T>::value,
31 boost::add_reference<T>,
32 boost::add_const<T>
33 >::type type;
34};
35
36}
37#endif
38// 1-argument bind functions --------------------------
39#ifndef BOOST_REF_TO_FUNC_CONFLICTS_WITH_REF_TO_T
40template <class Result>
41inline const
42lambda_functor<
43 lambda_functor_base<
44 action<1, function_action<1, Result> >,
45 typename detail::bind_tuple_mapper<Result(&)()>::type
46 >
47>
48
49bind(Result(& a1)()) {
50 return
51 lambda_functor_base<
52 action<1, function_action<1, Result> >,
53 typename detail::bind_tuple_mapper<Result(&)()>::type
54 >
55 ( typename detail::bind_tuple_mapper<Result(&)()>::type
56 (a1)
57 );
58}
59#endif
60
61 #ifndef BOOST_LAMBDA_INCORRECT_BIND_OVERLOADING
62template <class Arg1>
63inline const
64lambda_functor<
65 lambda_functor_base<
66 action<1, function_action<1> >,
67 typename detail::bind_tuple_mapper<const Arg1>::type
68 >
69>
70
71bind(const Arg1& a1) {
72 return
73 lambda_functor_base<
74 action<1, function_action<1> >,
75 typename detail::bind_tuple_mapper<const Arg1>::type
76 >
77 ( typename detail::bind_tuple_mapper<const Arg1>::type
78 (a1)
79 );
80}
81
82template <class Result, class Arg1>
83inline const
84lambda_functor<
85 lambda_functor_base<
86 action<1, function_action<1, Result> >,
87 typename detail::bind_tuple_mapper<const Arg1>::type
88 >
89>
90
91bind(const Arg1& a1) {
92 return
93 lambda_functor_base<
94 action<1, function_action<1, Result> >,
95 typename detail::bind_tuple_mapper<const Arg1>::type
96 >
97 ( typename detail::bind_tuple_mapper<const Arg1>::type
98 (a1)
99 );
100}
101
102
103 #else
104template <class Arg1>
105inline const
106lambda_functor<
107 lambda_functor_base<
108 action<1, function_action<1> >,
109 typename detail::bind_tuple_mapper<
110 typename detail::constify_non_funcs<Arg1>::type
111 >::type
112 >
113>
114
115bind(const Arg1& a1) {
116 return
117 lambda_functor_base<
118 action<1, function_action<1> >,
119 typename detail::bind_tuple_mapper<
120 typename detail::constify_non_funcs<Arg1>::type
121 >::type
122 >
123 ( typename detail::bind_tuple_mapper<
124 typename detail::constify_non_funcs<Arg1>::type
125 >::type
126 (a1)
127 );
128}
129
130template <class Result, class Arg1>
131inline const
132lambda_functor<
133 lambda_functor_base<
134 action<1, function_action<1, Result> >,
135 typename detail::bind_tuple_mapper<
136 typename detail::constify_non_funcs<Arg1>::type
137 >::type
138 >
139>
140
141bind(const Arg1& a1) {
142 return
143 lambda_functor_base<
144 action<1, function_action<1, Result> >,
145 typename detail::bind_tuple_mapper<
146 typename detail::constify_non_funcs<Arg1>::type
147 >::type
148 >
149 ( typename detail::bind_tuple_mapper<
150 typename detail::constify_non_funcs<Arg1>::type
151 >::type
152 (a1)
153 );
154}
155
156template <class Result>
157inline const
158lambda_functor<
159 lambda_functor_base<
160 action<1, function_action<1, Result> >,
161 typename detail::bind_tuple_mapper<Result(*)()>::type
162 >
163>
164
165bind(Result(* const & a1)()) {
166 return
167 lambda_functor_base<
168 action<1, function_action<1, Result> >,
169 typename detail::bind_tuple_mapper<Result(*)()>::type
170 >
171 ( typename detail::bind_tuple_mapper<Result(*)()>::type
172 (a1)
173 );
174}
175
176
177#endif
178
179// 2-argument bind functions --------------------------
180#ifndef BOOST_REF_TO_FUNC_CONFLICTS_WITH_REF_TO_T
181template <class Result, class Par1, class Arg2>
182inline const
183lambda_functor<
184 lambda_functor_base<
185 action<2, function_action<2, Result> >,
186 typename detail::bind_tuple_mapper<Result(&)(Par1), const Arg2>::type
187 >
188>
189
190bind(Result(&a1)(Par1), const Arg2& a2) {
191 return
192 lambda_functor_base<
193 action<2, function_action<2, Result> >,
194 typename detail::bind_tuple_mapper<Result(&)(Par1), const Arg2>::type
195 >
196 ( typename detail::bind_tuple_mapper<Result(&)(Par1), const Arg2>::type
197 (a1, a2)
198 );
199}
200#endif
201
202#ifndef BOOST_LAMBDA_INCORRECT_BIND_OVERLOADING
203template <class Arg1, class Arg2>
204inline const
205lambda_functor<
206 lambda_functor_base<
207 action<2, function_action<2> >,
208 typename detail::bind_tuple_mapper<const Arg1, const Arg2>::type
209 >
210>
211
212bind(const Arg1& a1, const Arg2& a2) {
213 return
214 lambda_functor_base<
215 action<2, function_action<2> >,
216 typename detail::bind_tuple_mapper<const Arg1, const Arg2>::type
217 >
218 ( typename detail::bind_tuple_mapper<const Arg1, const Arg2>::type
219 (a1, a2)
220 );
221}
222
223template <class Result, class Arg1, class Arg2>
224inline const
225lambda_functor<
226 lambda_functor_base<
227 action<2, function_action<2, Result> >,
228 typename detail::bind_tuple_mapper<const Arg1, const Arg2>::type
229 >
230>
231
232bind(const Arg1& a1, const Arg2& a2) {
233 return
234 lambda_functor_base<
235 action<2, function_action<2, Result> >,
236 typename detail::bind_tuple_mapper<const Arg1, const Arg2>::type
237 >
238 ( typename detail::bind_tuple_mapper<const Arg1, const Arg2>::type
239 (a1, a2)
240 );
241}
242
243
244 #else
245template <class Arg1, class Arg2>
246inline const
247lambda_functor<
248 lambda_functor_base<
249 action<2, function_action<2> >,
250 typename detail::bind_tuple_mapper<
251 typename detail::constify_non_funcs<Arg1>::type, const Arg2
252 >::type
253 >
254>
255
256bind(const Arg1& a1, const Arg2& a2) {
257 return
258 lambda_functor_base<
259 action<2, function_action<2> >,
260 typename detail::bind_tuple_mapper<
261 typename detail::constify_non_funcs<Arg1>::type, const Arg2
262 >::type
263 >
264 ( typename detail::bind_tuple_mapper<
265 typename detail::constify_non_funcs<Arg1>::type, const Arg2
266 >::type
267 (a1, a2)
268 );
269}
270
271template <class Result, class Arg1, class Arg2>
272inline const
273lambda_functor<
274 lambda_functor_base<
275 action<2, function_action<2, Result> >,
276 typename detail::bind_tuple_mapper<
277 typename detail::constify_non_funcs<Arg1>::type, const Arg2
278 >::type
279 >
280>
281
282bind(const Arg1& a1, const Arg2& a2) {
283 return
284 lambda_functor_base<
285 action<2, function_action<2, Result> >,
286 typename detail::bind_tuple_mapper<
287 typename detail::constify_non_funcs<Arg1>::type, const Arg2
288 >::type
289 >
290 ( typename detail::bind_tuple_mapper<
291 typename detail::constify_non_funcs<Arg1>::type, const Arg2
292 >::type
293 (a1, a2)
294 );
295}
296
297template <class Result, class Par1, class Arg2>
298inline const
299lambda_functor<
300 lambda_functor_base<
301 action<2, function_action<2, Result> >,
302 typename detail::bind_tuple_mapper<Result(*)(Par1), const Arg2>::type
303 >
304>
305
306bind(Result(* const & a1)(Par1), const Arg2& a2) {
307 return
308 lambda_functor_base<
309 action<2, function_action<2, Result> >,
310 typename detail::bind_tuple_mapper<Result(*)(Par1), const Arg2>::type
311 >
312 ( typename detail::bind_tuple_mapper<Result(*)(Par1), const Arg2>::type
313 (a1, a2)
314 );
315}
316
317
318 #endif
319
320// 3-argument bind functions --------------------------
321#ifndef BOOST_REF_TO_FUNC_CONFLICTS_WITH_REF_TO_T
322template <class Result, class Par1, class Par2, class Arg2, class Arg3>
323inline const
324lambda_functor<
325 lambda_functor_base<
326 action<3, function_action<3, Result> >,
327 typename detail::bind_tuple_mapper<
328 Result(&)(Par1, Par2), const Arg2, const Arg3
329 >::type
330 >
331>
332
333bind(Result(&a1)(Par1, Par2), const Arg2& a2, const Arg3& a3) {
334 return
335 lambda_functor_base<
336 action<3, function_action<3, Result> >,
337 typename detail::bind_tuple_mapper<
338 Result(&)(Par1, Par2), const Arg2, const Arg3
339 >::type
340 >
341 ( typename detail::bind_tuple_mapper<
342 Result(&)(Par1, Par2), const Arg2, const Arg3
343 >::type
344 (a1, a2, a3)
345 );
346}
347#endif
348
349 #ifndef BOOST_LAMBDA_INCORRECT_BIND_OVERLOADING
350template <class Arg1, class Arg2, class Arg3>
351inline const
352lambda_functor<
353 lambda_functor_base<
354 action<3, function_action<3> >,
355 typename detail::bind_tuple_mapper<
356 const Arg1, const Arg2, const Arg3
357 >::type
358 >
359>
360
361bind(const Arg1& a1, const Arg2& a2, const Arg3& a3) {
362 return
363 lambda_functor_base<
364 action<3, function_action<3> >,
365 typename detail::bind_tuple_mapper<
366 const Arg1, const Arg2, const Arg3
367 >::type
368 >
369 ( typename detail::bind_tuple_mapper<
370 const Arg1, const Arg2, const Arg3
371 >::type
372 (a1, a2, a3)
373 );
374}
375
376template <class Result, class Arg1, class Arg2, class Arg3>
377inline const
378lambda_functor<
379 lambda_functor_base<
380 action<3, function_action<3, Result> >,
381 typename detail::bind_tuple_mapper<
382 const Arg1, const Arg2, const Arg3
383 >::type
384 >
385>
386
387bind(const Arg1& a1, const Arg2& a2, const Arg3& a3) {
388 return
389 lambda_functor_base<
390 action<3, function_action<3, Result> >,
391 typename detail::bind_tuple_mapper<
392 const Arg1, const Arg2, const Arg3
393 >::type
394 >
395 ( typename detail::bind_tuple_mapper<
396 const Arg1, const Arg2, const Arg3
397 >::type
398 (a1, a2, a3)
399 );
400}
401
402
403 #else
404template <class Arg1, class Arg2, class Arg3>
405inline const
406lambda_functor<
407 lambda_functor_base<
408 action<3, function_action<3> >,
409 typename detail::bind_tuple_mapper<
410 typename detail::constify_non_funcs<Arg1>::type, const Arg2, const Arg3
411 >::type
412 >
413>
414
415bind(const Arg1& a1, const Arg2& a2, const Arg3& a3) {
416 return
417 lambda_functor_base<
418 action<3, function_action<3> >,
419 typename detail::bind_tuple_mapper<
420 typename detail::constify_non_funcs<Arg1>::type, const Arg2,
421 const Arg3
422 >::type
423 >
424 ( typename detail::bind_tuple_mapper<
425 typename detail::constify_non_funcs<Arg1>::type, const Arg2,
426 const Arg3
427 >::type
428 (a1, a2, a3)
429 );
430}
431
432template <class Result, class Arg1, class Arg2, class Arg3>
433inline const
434lambda_functor<
435 lambda_functor_base<
436 action<3, function_action<3, Result> >,
437 typename detail::bind_tuple_mapper<
438 typename detail::constify_non_funcs<Arg1>::type, const Arg2, const Arg3
439 >::type
440 >
441>
442
443bind(const Arg1& a1, const Arg2& a2, const Arg3& a3) {
444 return
445 lambda_functor_base<
446 action<3, function_action<3, Result> >,
447 typename detail::bind_tuple_mapper<
448 typename detail::constify_non_funcs<Arg1>::type, const Arg2,
449 const Arg3
450 >::type
451 >
452 ( typename detail::bind_tuple_mapper<
453 typename detail::constify_non_funcs<Arg1>::type, const Arg2,
454 const Arg3
455 >::type
456 (a1, a2, a3)
457 );
458}
459
460template <class Result, class Par1, class Par2, class Arg2, class Arg3>
461inline const
462lambda_functor<
463 lambda_functor_base<
464 action<3, function_action<3, Result> >,
465 typename detail::bind_tuple_mapper<
466 Result(*)(Par1, Par2), const Arg2, const Arg3
467 >::type
468 >
469>
470
471bind(Result(* const & a1)(Par1, Par2), const Arg2& a2, const Arg3& a3) {
472 return
473 lambda_functor_base<
474 action<3, function_action<3, Result> >,
475 typename detail::bind_tuple_mapper<
476 Result(*)(Par1, Par2), const Arg2, const Arg3
477 >::type
478 >
479 ( typename detail::bind_tuple_mapper<
480 Result(*)(Par1, Par2), const Arg2, const Arg3
481 >::type
482 (a1, a2, a3)
483 );
484}
485
486
487 #endif
488
489// 4-argument bind functions --------------------------
490#ifndef BOOST_REF_TO_FUNC_CONFLICTS_WITH_REF_TO_T
491template <class Result, class Par1, class Par2, class Par3, class Arg2,
492 class Arg3, class Arg4>
493inline const
494lambda_functor<
495 lambda_functor_base<
496 action<4, function_action<4, Result> >,
497 typename detail::bind_tuple_mapper<
498 Result(&)(Par1, Par2, Par3), const Arg2, const Arg3, const Arg4
499 >::type
500 >
501>
502
503bind(Result(&a1)(Par1, Par2, Par3), const Arg2& a2, const Arg3& a3,
504 const Arg4& a4) {
505 return
506 lambda_functor_base<
507 action<4, function_action<4, Result> >,
508 typename detail::bind_tuple_mapper<
509 Result(&)(Par1, Par2, Par3), const Arg2, const Arg3, const Arg4
510 >::type
511 >
512 ( typename detail::bind_tuple_mapper<
513 Result(&)(Par1, Par2, Par3), const Arg2, const Arg3, const Arg4
514 >::type
515 (a1, a2, a3, a4)
516 );
517}
518#endif
519
520 #ifndef BOOST_LAMBDA_INCORRECT_BIND_OVERLOADING
521template <class Arg1, class Arg2, class Arg3, class Arg4>
522inline const
523lambda_functor<
524 lambda_functor_base<
525 action<4, function_action<4> >,
526 typename detail::bind_tuple_mapper<
527 const Arg1, const Arg2, const Arg3, const Arg4
528 >::type
529 >
530>
531
532bind(const Arg1& a1, const Arg2& a2, const Arg3& a3, const Arg4& a4) {
533 return
534 lambda_functor_base<
535 action<4, function_action<4> >,
536 typename detail::bind_tuple_mapper<
537 const Arg1, const Arg2, const Arg3, const Arg4
538 >::type
539 >
540 ( typename detail::bind_tuple_mapper<
541 const Arg1, const Arg2, const Arg3, const Arg4
542 >::type
543 (a1, a2, a3, a4)
544 );
545}
546
547template <class Result, class Arg1, class Arg2, class Arg3, class Arg4>
548inline const
549lambda_functor<
550 lambda_functor_base<
551 action<4, function_action<4, Result> >,
552 typename detail::bind_tuple_mapper<
553 const Arg1, const Arg2, const Arg3, const Arg4
554 >::type
555 >
556>
557
558bind(const Arg1& a1, const Arg2& a2, const Arg3& a3, const Arg4& a4) {
559 return
560 lambda_functor_base<
561 action<4, function_action<4, Result> >,
562 typename detail::bind_tuple_mapper<
563 const Arg1, const Arg2, const Arg3, const Arg4
564 >::type
565 >
566 ( typename detail::bind_tuple_mapper<
567 const Arg1, const Arg2, const Arg3, const Arg4
568 >::type
569 (a1, a2, a3, a4)
570 );
571}
572
573
574 #else
575template <class Arg1, class Arg2, class Arg3, class Arg4>
576inline const
577lambda_functor<
578 lambda_functor_base<
579 action<4, function_action<4> >,
580 typename detail::bind_tuple_mapper<
581 typename detail::constify_non_funcs<Arg1>::type, const Arg2, const Arg3,
582 const Arg4
583 >::type
584 >
585>
586
587bind(const Arg1& a1, const Arg2& a2, const Arg3& a3, const Arg4& a4) {
588 return
589 lambda_functor_base<
590 action<4, function_action<4> >,
591 typename detail::bind_tuple_mapper<
592 typename detail::constify_non_funcs<Arg1>::type, const Arg2,
593 const Arg3, const Arg4
594 >::type
595 >
596 ( typename detail::bind_tuple_mapper<
597 typename detail::constify_non_funcs<Arg1>::type, const Arg2,
598 const Arg3, const Arg4
599 >::type
600 (a1, a2, a3, a4)
601 );
602}
603
604template <class Result, class Arg1, class Arg2, class Arg3, class Arg4>
605inline const
606lambda_functor<
607 lambda_functor_base<
608 action<4, function_action<4, Result> >,
609 typename detail::bind_tuple_mapper<
610 typename detail::constify_non_funcs<Arg1>::type, const Arg2, const Arg3,
611 const Arg4
612 >::type
613 >
614>
615
616bind(const Arg1& a1, const Arg2& a2, const Arg3& a3, const Arg4& a4) {
617 return
618 lambda_functor_base<
619 action<4, function_action<4, Result> >,
620 typename detail::bind_tuple_mapper<
621 typename detail::constify_non_funcs<Arg1>::type, const Arg2,
622 const Arg3, const Arg4
623 >::type
624 >
625 ( typename detail::bind_tuple_mapper<
626 typename detail::constify_non_funcs<Arg1>::type, const Arg2,
627 const Arg3, const Arg4
628 >::type
629 (a1, a2, a3, a4)
630 );
631}
632
633template <class Result, class Par1, class Par2, class Par3, class Arg2,
634 class Arg3, class Arg4>
635inline const
636lambda_functor<
637 lambda_functor_base<
638 action<4, function_action<4, Result> >,
639 typename detail::bind_tuple_mapper<
640 Result(*)(Par1, Par2, Par3), const Arg2, const Arg3, const Arg4
641 >::type
642 >
643>
644
645bind(Result(* const & a1)(Par1, Par2, Par3), const Arg2& a2,
646 const Arg3& a3, const Arg4& a4) {
647 return
648 lambda_functor_base<
649 action<4, function_action<4, Result> >,
650 typename detail::bind_tuple_mapper<
651 Result(*)(Par1, Par2, Par3), const Arg2, const Arg3, const Arg4
652 >::type
653 >
654 ( typename detail::bind_tuple_mapper<
655 Result(*)(Par1, Par2, Par3), const Arg2, const Arg3, const Arg4
656 >::type
657 (a1, a2, a3, a4)
658 );
659}
660
661
662 #endif
663
664// 5-argument bind functions --------------------------
665#ifndef BOOST_REF_TO_FUNC_CONFLICTS_WITH_REF_TO_T
666template <class Result, class Par1, class Par2, class Par3, class Par4,
667 class Arg2, class Arg3, class Arg4, class Arg5>
668inline const
669lambda_functor<
670 lambda_functor_base<
671 action<5, function_action<5, Result> >,
672 typename detail::bind_tuple_mapper<
673 Result(&)(Par1, Par2, Par3, Par4), const Arg2, const Arg3, const Arg4,
674 const Arg5
675 >::type
676 >
677>
678
679bind(Result(&a1)(Par1, Par2, Par3, Par4), const Arg2& a2, const Arg3& a3,
680 const Arg4& a4, const Arg5& a5) {
681 return
682 lambda_functor_base<
683 action<5, function_action<5, Result> >,
684 typename detail::bind_tuple_mapper<
685 Result(&)(Par1, Par2, Par3, Par4), const Arg2, const Arg3, const Arg4,
686 const Arg5
687 >::type
688 >
689 ( typename detail::bind_tuple_mapper<
690 Result(&)(Par1, Par2, Par3, Par4), const Arg2, const Arg3, const Arg4,
691 const Arg5
692 >::type
693 (a1, a2, a3, a4, a5)
694 );
695}
696#endif
697
698 #ifndef BOOST_LAMBDA_INCORRECT_BIND_OVERLOADING
699template <class Arg1, class Arg2, class Arg3, class Arg4, class Arg5>
700inline const
701lambda_functor<
702 lambda_functor_base<
703 action<5, function_action<5> >,
704 typename detail::bind_tuple_mapper<
705 const Arg1, const Arg2, const Arg3, const Arg4, const Arg5
706 >::type
707 >
708>
709
710bind(const Arg1& a1, const Arg2& a2, const Arg3& a3, const Arg4& a4,
711 const Arg5& a5) {
712 return
713 lambda_functor_base<
714 action<5, function_action<5> >,
715 typename detail::bind_tuple_mapper<
716 const Arg1, const Arg2, const Arg3, const Arg4, const Arg5
717 >::type
718 >
719 ( typename detail::bind_tuple_mapper<
720 const Arg1, const Arg2, const Arg3, const Arg4, const Arg5
721 >::type
722 (a1, a2, a3, a4, a5)
723 );
724}
725
726template <class Result, class Arg1, class Arg2, class Arg3, class Arg4,
727 class Arg5>
728inline const
729lambda_functor<
730 lambda_functor_base<
731 action<5, function_action<5, Result> >,
732 typename detail::bind_tuple_mapper<
733 const Arg1, const Arg2, const Arg3, const Arg4, const Arg5
734 >::type
735 >
736>
737
738bind(const Arg1& a1, const Arg2& a2, const Arg3& a3, const Arg4& a4,
739 const Arg5& a5) {
740 return
741 lambda_functor_base<
742 action<5, function_action<5, Result> >,
743 typename detail::bind_tuple_mapper<
744 const Arg1, const Arg2, const Arg3, const Arg4, const Arg5
745 >::type
746 >
747 ( typename detail::bind_tuple_mapper<
748 const Arg1, const Arg2, const Arg3, const Arg4, const Arg5
749 >::type
750 (a1, a2, a3, a4, a5)
751 );
752}
753
754
755 #else
756template <class Arg1, class Arg2, class Arg3, class Arg4, class Arg5>
757inline const
758lambda_functor<
759 lambda_functor_base<
760 action<5, function_action<5> >,
761 typename detail::bind_tuple_mapper<
762 typename detail::constify_non_funcs<Arg1>::type, const Arg2, const Arg3,
763 const Arg4, const Arg5
764 >::type
765 >
766>
767
768bind(const Arg1& a1, const Arg2& a2, const Arg3& a3, const Arg4& a4,
769 const Arg5& a5) {
770 return
771 lambda_functor_base<
772 action<5, function_action<5> >,
773 typename detail::bind_tuple_mapper<
774 typename detail::constify_non_funcs<Arg1>::type, const Arg2,
775 const Arg3, const Arg4, const Arg5
776 >::type
777 >
778 ( typename detail::bind_tuple_mapper<
779 typename detail::constify_non_funcs<Arg1>::type, const Arg2,
780 const Arg3, const Arg4, const Arg5
781 >::type
782 (a1, a2, a3, a4, a5)
783 );
784}
785
786template <class Result, class Arg1, class Arg2, class Arg3, class Arg4,
787 class Arg5>
788inline const
789lambda_functor<
790 lambda_functor_base<
791 action<5, function_action<5, Result> >,
792 typename detail::bind_tuple_mapper<
793 typename detail::constify_non_funcs<Arg1>::type, const Arg2, const Arg3,
794 const Arg4, const Arg5
795 >::type
796 >
797>
798
799bind(const Arg1& a1, const Arg2& a2, const Arg3& a3, const Arg4& a4,
800 const Arg5& a5) {
801 return
802 lambda_functor_base<
803 action<5, function_action<5, Result> >,
804 typename detail::bind_tuple_mapper<
805 typename detail::constify_non_funcs<Arg1>::type, const Arg2,
806 const Arg3, const Arg4, const Arg5
807 >::type
808 >
809 ( typename detail::bind_tuple_mapper<
810 typename detail::constify_non_funcs<Arg1>::type, const Arg2,
811 const Arg3, const Arg4, const Arg5
812 >::type
813 (a1, a2, a3, a4, a5)
814 );
815}
816
817template <class Result, class Par1, class Par2, class Par3, class Par4,
818 class Arg2, class Arg3, class Arg4, class Arg5>
819inline const
820lambda_functor<
821 lambda_functor_base<
822 action<5, function_action<5, Result> >,
823 typename detail::bind_tuple_mapper<
824 Result(*)(Par1, Par2, Par3, Par4), const Arg2, const Arg3, const Arg4,
825 const Arg5
826 >::type
827 >
828>
829
830bind(Result(* const & a1)(Par1, Par2, Par3, Par4), const Arg2& a2,
831 const Arg3& a3, const Arg4& a4, const Arg5& a5) {
832 return
833 lambda_functor_base<
834 action<5, function_action<5, Result> >,
835 typename detail::bind_tuple_mapper<
836 Result(*)(Par1, Par2, Par3, Par4), const Arg2, const Arg3, const Arg4,
837 const Arg5
838 >::type
839 >
840 ( typename detail::bind_tuple_mapper<
841 Result(*)(Par1, Par2, Par3, Par4), const Arg2, const Arg3, const Arg4,
842 const Arg5
843 >::type
844 (a1, a2, a3, a4, a5)
845 );
846}
847
848
849 #endif
850
851// 6-argument bind functions --------------------------
852#ifndef BOOST_REF_TO_FUNC_CONFLICTS_WITH_REF_TO_T
853template <class Result, class Par1, class Par2, class Par3, class Par4,
854 class Par5, class Arg2, class Arg3, class Arg4, class Arg5,
855 class Arg6>
856inline const
857lambda_functor<
858 lambda_functor_base<
859 action<6, function_action<6, Result> >,
860 typename detail::bind_tuple_mapper<
861 Result(&)(Par1, Par2, Par3, Par4, Par5), const Arg2, const Arg3,
862 const Arg4, const Arg5, const Arg6
863 >::type
864 >
865>
866
867bind(Result(&a1)(Par1, Par2, Par3, Par4, Par5), const Arg2& a2,
868 const Arg3& a3, const Arg4& a4, const Arg5& a5, const Arg6& a6) {
869 return
870 lambda_functor_base<
871 action<6, function_action<6, Result> >,
872 typename detail::bind_tuple_mapper<
873 Result(&)(Par1, Par2, Par3, Par4, Par5), const Arg2, const Arg3,
874 const Arg4, const Arg5, const Arg6
875 >::type
876 >
877 ( typename detail::bind_tuple_mapper<
878 Result(&)(Par1, Par2, Par3, Par4, Par5), const Arg2, const Arg3,
879 const Arg4, const Arg5, const Arg6
880 >::type
881 (a1, a2, a3, a4, a5, a6)
882 );
883}
884#endif
885
886 #ifndef BOOST_LAMBDA_INCORRECT_BIND_OVERLOADING
887template <class Arg1, class Arg2, class Arg3, class Arg4, class Arg5,
888 class Arg6>
889inline const
890lambda_functor<
891 lambda_functor_base<
892 action<6, function_action<6> >,
893 typename detail::bind_tuple_mapper<
894 const Arg1, const Arg2, const Arg3, const Arg4, const Arg5, const Arg6
895 >::type
896 >
897>
898
899bind(const Arg1& a1, const Arg2& a2, const Arg3& a3, const Arg4& a4,
900 const Arg5& a5, const Arg6& a6) {
901 return
902 lambda_functor_base<
903 action<6, function_action<6> >,
904 typename detail::bind_tuple_mapper<
905 const Arg1, const Arg2, const Arg3, const Arg4, const Arg5, const Arg6
906 >::type
907 >
908 ( typename detail::bind_tuple_mapper<
909 const Arg1, const Arg2, const Arg3, const Arg4, const Arg5, const Arg6
910 >::type
911 (a1, a2, a3, a4, a5, a6)
912 );
913}
914
915template <class Result, class Arg1, class Arg2, class Arg3, class Arg4,
916 class Arg5, class Arg6>
917inline const
918lambda_functor<
919 lambda_functor_base<
920 action<6, function_action<6, Result> >,
921 typename detail::bind_tuple_mapper<
922 const Arg1, const Arg2, const Arg3, const Arg4, const Arg5, const Arg6
923 >::type
924 >
925>
926
927bind(const Arg1& a1, const Arg2& a2, const Arg3& a3, const Arg4& a4,
928 const Arg5& a5, const Arg6& a6) {
929 return
930 lambda_functor_base<
931 action<6, function_action<6, Result> >,
932 typename detail::bind_tuple_mapper<
933 const Arg1, const Arg2, const Arg3, const Arg4, const Arg5, const Arg6
934 >::type
935 >
936 ( typename detail::bind_tuple_mapper<
937 const Arg1, const Arg2, const Arg3, const Arg4, const Arg5, const Arg6
938 >::type
939 (a1, a2, a3, a4, a5, a6)
940 );
941}
942
943
944 #else
945template <class Arg1, class Arg2, class Arg3, class Arg4, class Arg5,
946 class Arg6>
947inline const
948lambda_functor<
949 lambda_functor_base<
950 action<6, function_action<6> >,
951 typename detail::bind_tuple_mapper<
952 typename detail::constify_non_funcs<Arg1>::type, const Arg2, const Arg3,
953 const Arg4, const Arg5, const Arg6
954 >::type
955 >
956>
957
958bind(const Arg1& a1, const Arg2& a2, const Arg3& a3, const Arg4& a4,
959 const Arg5& a5, const Arg6& a6) {
960 return
961 lambda_functor_base<
962 action<6, function_action<6> >,
963 typename detail::bind_tuple_mapper<
964 typename detail::constify_non_funcs<Arg1>::type, const Arg2,
965 const Arg3, const Arg4, const Arg5, const Arg6
966 >::type
967 >
968 ( typename detail::bind_tuple_mapper<
969 typename detail::constify_non_funcs<Arg1>::type, const Arg2,
970 const Arg3, const Arg4, const Arg5, const Arg6
971 >::type
972 (a1, a2, a3, a4, a5, a6)
973 );
974}
975
976template <class Result, class Arg1, class Arg2, class Arg3, class Arg4,
977 class Arg5, class Arg6>
978inline const
979lambda_functor<
980 lambda_functor_base<
981 action<6, function_action<6, Result> >,
982 typename detail::bind_tuple_mapper<
983 typename detail::constify_non_funcs<Arg1>::type, const Arg2, const Arg3,
984 const Arg4, const Arg5, const Arg6
985 >::type
986 >
987>
988
989bind(const Arg1& a1, const Arg2& a2, const Arg3& a3, const Arg4& a4,
990 const Arg5& a5, const Arg6& a6) {
991 return
992 lambda_functor_base<
993 action<6, function_action<6, Result> >,
994 typename detail::bind_tuple_mapper<
995 typename detail::constify_non_funcs<Arg1>::type, const Arg2,
996 const Arg3, const Arg4, const Arg5, const Arg6
997 >::type
998 >
999 ( typename detail::bind_tuple_mapper<
1000 typename detail::constify_non_funcs<Arg1>::type, const Arg2,
1001 const Arg3, const Arg4, const Arg5, const Arg6
1002 >::type
1003 (a1, a2, a3, a4, a5, a6)
1004 );
1005}
1006
1007template <class Result, class Par1, class Par2, class Par3, class Par4,
1008 class Par5, class Arg2, class Arg3, class Arg4, class Arg5,
1009 class Arg6>
1010inline const
1011lambda_functor<
1012 lambda_functor_base<
1013 action<6, function_action<6, Result> >,
1014 typename detail::bind_tuple_mapper<
1015 Result(*)(Par1, Par2, Par3, Par4, Par5), const Arg2, const Arg3,
1016 const Arg4, const Arg5, const Arg6
1017 >::type
1018 >
1019>
1020
1021bind(Result(* const & a1)(Par1, Par2, Par3, Par4, Par5), const Arg2& a2,
1022 const Arg3& a3, const Arg4& a4, const Arg5& a5, const Arg6& a6) {
1023 return
1024 lambda_functor_base<
1025 action<6, function_action<6, Result> >,
1026 typename detail::bind_tuple_mapper<
1027 Result(*)(Par1, Par2, Par3, Par4, Par5), const Arg2, const Arg3,
1028 const Arg4, const Arg5, const Arg6
1029 >::type
1030 >
1031 ( typename detail::bind_tuple_mapper<
1032 Result(*)(Par1, Par2, Par3, Par4, Par5), const Arg2, const Arg3,
1033 const Arg4, const Arg5, const Arg6
1034 >::type
1035 (a1, a2, a3, a4, a5, a6)
1036 );
1037}
1038
1039
1040 #endif
1041
1042// 7-argument bind functions --------------------------
1043#ifndef BOOST_REF_TO_FUNC_CONFLICTS_WITH_REF_TO_T
1044template <class Result, class Par1, class Par2, class Par3, class Par4,
1045 class Par5, class Par6, class Arg2, class Arg3, class Arg4,
1046 class Arg5, class Arg6, class Arg7>
1047inline const
1048lambda_functor<
1049 lambda_functor_base<
1050 action<7, function_action<7, Result> >,
1051 typename detail::bind_tuple_mapper<
1052 Result(&)(Par1, Par2, Par3, Par4, Par5, Par6), const Arg2, const Arg3,
1053 const Arg4, const Arg5, const Arg6, const Arg7
1054 >::type
1055 >
1056>
1057
1058bind(Result(&a1)(Par1, Par2, Par3, Par4, Par5, Par6), const Arg2& a2,
1059 const Arg3& a3, const Arg4& a4, const Arg5& a5, const Arg6& a6,
1060 const Arg7& a7) {
1061 return
1062 lambda_functor_base<
1063 action<7, function_action<7, Result> >,
1064 typename detail::bind_tuple_mapper<
1065 Result(&)(Par1, Par2, Par3, Par4, Par5, Par6), const Arg2, const Arg3,
1066 const Arg4, const Arg5, const Arg6, const Arg7
1067 >::type
1068 >
1069 ( typename detail::bind_tuple_mapper<
1070 Result(&)(Par1, Par2, Par3, Par4, Par5, Par6), const Arg2, const Arg3,
1071 const Arg4, const Arg5, const Arg6, const Arg7
1072 >::type
1073 (a1, a2, a3, a4, a5, a6, a7)
1074 );
1075}
1076#endif
1077
1078 #ifndef BOOST_LAMBDA_INCORRECT_BIND_OVERLOADING
1079template <class Arg1, class Arg2, class Arg3, class Arg4, class Arg5,
1080 class Arg6, class Arg7>
1081inline const
1082lambda_functor<
1083 lambda_functor_base<
1084 action<7, function_action<7> >,
1085 typename detail::bind_tuple_mapper<
1086 const Arg1, const Arg2, const Arg3, const Arg4, const Arg5, const Arg6,
1087 const Arg7
1088 >::type
1089 >
1090>
1091
1092bind(const Arg1& a1, const Arg2& a2, const Arg3& a3, const Arg4& a4,
1093 const Arg5& a5, const Arg6& a6, const Arg7& a7) {
1094 return
1095 lambda_functor_base<
1096 action<7, function_action<7> >,
1097 typename detail::bind_tuple_mapper<
1098 const Arg1, const Arg2, const Arg3, const Arg4, const Arg5,
1099 const Arg6, const Arg7
1100 >::type
1101 >
1102 ( typename detail::bind_tuple_mapper<
1103 const Arg1, const Arg2, const Arg3, const Arg4, const Arg5,
1104 const Arg6, const Arg7
1105 >::type
1106 (a1, a2, a3, a4, a5, a6, a7)
1107 );
1108}
1109
1110template <class Result, class Arg1, class Arg2, class Arg3, class Arg4,
1111 class Arg5, class Arg6, class Arg7>
1112inline const
1113lambda_functor<
1114 lambda_functor_base<
1115 action<7, function_action<7, Result> >,
1116 typename detail::bind_tuple_mapper<
1117 const Arg1, const Arg2, const Arg3, const Arg4, const Arg5, const Arg6,
1118 const Arg7
1119 >::type
1120 >
1121>
1122
1123bind(const Arg1& a1, const Arg2& a2, const Arg3& a3, const Arg4& a4,
1124 const Arg5& a5, const Arg6& a6, const Arg7& a7) {
1125 return
1126 lambda_functor_base<
1127 action<7, function_action<7, Result> >,
1128 typename detail::bind_tuple_mapper<
1129 const Arg1, const Arg2, const Arg3, const Arg4, const Arg5,
1130 const Arg6, const Arg7
1131 >::type
1132 >
1133 ( typename detail::bind_tuple_mapper<
1134 const Arg1, const Arg2, const Arg3, const Arg4, const Arg5,
1135 const Arg6, const Arg7
1136 >::type
1137 (a1, a2, a3, a4, a5, a6, a7)
1138 );
1139}
1140
1141
1142 #else
1143template <class Arg1, class Arg2, class Arg3, class Arg4, class Arg5,
1144 class Arg6, class Arg7>
1145inline const
1146lambda_functor<
1147 lambda_functor_base<
1148 action<7, function_action<7> >,
1149 typename detail::bind_tuple_mapper<
1150 typename detail::constify_non_funcs<Arg1>::type, const Arg2, const Arg3,
1151 const Arg4, const Arg5, const Arg6, const Arg7
1152 >::type
1153 >
1154>
1155
1156bind(const Arg1& a1, const Arg2& a2, const Arg3& a3, const Arg4& a4,
1157 const Arg5& a5, const Arg6& a6, const Arg7& a7) {
1158 return
1159 lambda_functor_base<
1160 action<7, function_action<7> >,
1161 typename detail::bind_tuple_mapper<
1162 typename detail::constify_non_funcs<Arg1>::type, const Arg2,
1163 const Arg3, const Arg4, const Arg5, const Arg6, const Arg7
1164 >::type
1165 >
1166 ( typename detail::bind_tuple_mapper<
1167 typename detail::constify_non_funcs<Arg1>::type, const Arg2,
1168 const Arg3, const Arg4, const Arg5, const Arg6, const Arg7
1169 >::type
1170 (a1, a2, a3, a4, a5, a6, a7)
1171 );
1172}
1173
1174template <class Result, class Arg1, class Arg2, class Arg3, class Arg4,
1175 class Arg5, class Arg6, class Arg7>
1176inline const
1177lambda_functor<
1178 lambda_functor_base<
1179 action<7, function_action<7, Result> >,
1180 typename detail::bind_tuple_mapper<
1181 typename detail::constify_non_funcs<Arg1>::type, const Arg2, const Arg3,
1182 const Arg4, const Arg5, const Arg6, const Arg7
1183 >::type
1184 >
1185>
1186
1187bind(const Arg1& a1, const Arg2& a2, const Arg3& a3, const Arg4& a4,
1188 const Arg5& a5, const Arg6& a6, const Arg7& a7) {
1189 return
1190 lambda_functor_base<
1191 action<7, function_action<7, Result> >,
1192 typename detail::bind_tuple_mapper<
1193 typename detail::constify_non_funcs<Arg1>::type, const Arg2,
1194 const Arg3, const Arg4, const Arg5, const Arg6, const Arg7
1195 >::type
1196 >
1197 ( typename detail::bind_tuple_mapper<
1198 typename detail::constify_non_funcs<Arg1>::type, const Arg2,
1199 const Arg3, const Arg4, const Arg5, const Arg6, const Arg7
1200 >::type
1201 (a1, a2, a3, a4, a5, a6, a7)
1202 );
1203}
1204
1205template <class Result, class Par1, class Par2, class Par3, class Par4,
1206 class Par5, class Par6, class Arg2, class Arg3, class Arg4,
1207 class Arg5, class Arg6, class Arg7>
1208inline const
1209lambda_functor<
1210 lambda_functor_base<
1211 action<7, function_action<7, Result> >,
1212 typename detail::bind_tuple_mapper<
1213 Result(*)(Par1, Par2, Par3, Par4, Par5, Par6), const Arg2, const Arg3,
1214 const Arg4, const Arg5, const Arg6, const Arg7
1215 >::type
1216 >
1217>
1218
1219bind(Result(* const & a1)(Par1, Par2, Par3, Par4, Par5, Par6),
1220 const Arg2& a2, const Arg3& a3, const Arg4& a4, const Arg5& a5,
1221 const Arg6& a6, const Arg7& a7) {
1222 return
1223 lambda_functor_base<
1224 action<7, function_action<7, Result> >,
1225 typename detail::bind_tuple_mapper<
1226 Result(*)(Par1, Par2, Par3, Par4, Par5, Par6), const Arg2, const Arg3,
1227 const Arg4, const Arg5, const Arg6, const Arg7
1228 >::type
1229 >
1230 ( typename detail::bind_tuple_mapper<
1231 Result(*)(Par1, Par2, Par3, Par4, Par5, Par6), const Arg2, const Arg3,
1232 const Arg4, const Arg5, const Arg6, const Arg7
1233 >::type
1234 (a1, a2, a3, a4, a5, a6, a7)
1235 );
1236}
1237
1238
1239 #endif
1240
1241// 8-argument bind functions --------------------------
1242#ifndef BOOST_REF_TO_FUNC_CONFLICTS_WITH_REF_TO_T
1243template <class Result, class Par1, class Par2, class Par3, class Par4,
1244 class Par5, class Par6, class Par7, class Arg2, class Arg3,
1245 class Arg4, class Arg5, class Arg6, class Arg7, class Arg8>
1246inline const
1247lambda_functor<
1248 lambda_functor_base<
1249 action<8, function_action<8, Result> >,
1250 typename detail::bind_tuple_mapper<
1251 Result(&)(Par1, Par2, Par3, Par4, Par5, Par6, Par7), const Arg2,
1252 const Arg3, const Arg4, const Arg5, const Arg6, const Arg7, const Arg8
1253 >::type
1254 >
1255>
1256
1257bind(Result(&a1)(Par1, Par2, Par3, Par4, Par5, Par6, Par7), const Arg2& a2,
1258 const Arg3& a3, const Arg4& a4, const Arg5& a5, const Arg6& a6,
1259 const Arg7& a7, const Arg8& a8) {
1260 return
1261 lambda_functor_base<
1262 action<8, function_action<8, Result> >,
1263 typename detail::bind_tuple_mapper<
1264 Result(&)(Par1, Par2, Par3, Par4, Par5, Par6, Par7), const Arg2,
1265 const Arg3, const Arg4, const Arg5, const Arg6, const Arg7, const Arg8
1266 >::type
1267 >
1268 ( typename detail::bind_tuple_mapper<
1269 Result(&)(Par1, Par2, Par3, Par4, Par5, Par6, Par7), const Arg2,
1270 const Arg3, const Arg4, const Arg5, const Arg6, const Arg7, const Arg8
1271 >::type
1272 (a1, a2, a3, a4, a5, a6, a7, a8)
1273 );
1274}
1275#endif
1276
1277 #ifndef BOOST_LAMBDA_INCORRECT_BIND_OVERLOADING
1278template <class Arg1, class Arg2, class Arg3, class Arg4, class Arg5,
1279 class Arg6, class Arg7, class Arg8>
1280inline const
1281lambda_functor<
1282 lambda_functor_base<
1283 action<8, function_action<8> >,
1284 typename detail::bind_tuple_mapper<
1285 const Arg1, const Arg2, const Arg3, const Arg4, const Arg5, const Arg6,
1286 const Arg7, const Arg8
1287 >::type
1288 >
1289>
1290
1291bind(const Arg1& a1, const Arg2& a2, const Arg3& a3, const Arg4& a4,
1292 const Arg5& a5, const Arg6& a6, const Arg7& a7, const Arg8& a8) {
1293 return
1294 lambda_functor_base<
1295 action<8, function_action<8> >,
1296 typename detail::bind_tuple_mapper<
1297 const Arg1, const Arg2, const Arg3, const Arg4, const Arg5,
1298 const Arg6, const Arg7, const Arg8
1299 >::type
1300 >
1301 ( typename detail::bind_tuple_mapper<
1302 const Arg1, const Arg2, const Arg3, const Arg4, const Arg5,
1303 const Arg6, const Arg7, const Arg8
1304 >::type
1305 (a1, a2, a3, a4, a5, a6, a7, a8)
1306 );
1307}
1308
1309template <class Result, class Arg1, class Arg2, class Arg3, class Arg4,
1310 class Arg5, class Arg6, class Arg7, class Arg8>
1311inline const
1312lambda_functor<
1313 lambda_functor_base<
1314 action<8, function_action<8, Result> >,
1315 typename detail::bind_tuple_mapper<
1316 const Arg1, const Arg2, const Arg3, const Arg4, const Arg5, const Arg6,
1317 const Arg7, const Arg8
1318 >::type
1319 >
1320>
1321
1322bind(const Arg1& a1, const Arg2& a2, const Arg3& a3, const Arg4& a4,
1323 const Arg5& a5, const Arg6& a6, const Arg7& a7, const Arg8& a8) {
1324 return
1325 lambda_functor_base<
1326 action<8, function_action<8, Result> >,
1327 typename detail::bind_tuple_mapper<
1328 const Arg1, const Arg2, const Arg3, const Arg4, const Arg5,
1329 const Arg6, const Arg7, const Arg8
1330 >::type
1331 >
1332 ( typename detail::bind_tuple_mapper<
1333 const Arg1, const Arg2, const Arg3, const Arg4, const Arg5,
1334 const Arg6, const Arg7, const Arg8
1335 >::type
1336 (a1, a2, a3, a4, a5, a6, a7, a8)
1337 );
1338}
1339
1340
1341 #else
1342template <class Arg1, class Arg2, class Arg3, class Arg4, class Arg5,
1343 class Arg6, class Arg7, class Arg8>
1344inline const
1345lambda_functor<
1346 lambda_functor_base<
1347 action<8, function_action<8> >,
1348 typename detail::bind_tuple_mapper<
1349 typename detail::constify_non_funcs<Arg1>::type, const Arg2, const Arg3,
1350 const Arg4, const Arg5, const Arg6, const Arg7, const Arg8
1351 >::type
1352 >
1353>
1354
1355bind(const Arg1& a1, const Arg2& a2, const Arg3& a3, const Arg4& a4,
1356 const Arg5& a5, const Arg6& a6, const Arg7& a7, const Arg8& a8) {
1357 return
1358 lambda_functor_base<
1359 action<8, function_action<8> >,
1360 typename detail::bind_tuple_mapper<
1361 typename detail::constify_non_funcs<Arg1>::type, const Arg2,
1362 const Arg3, const Arg4, const Arg5, const Arg6, const Arg7, const Arg8
1363 >::type
1364 >
1365 ( typename detail::bind_tuple_mapper<
1366 typename detail::constify_non_funcs<Arg1>::type, const Arg2,
1367 const Arg3, const Arg4, const Arg5, const Arg6, const Arg7, const Arg8
1368 >::type
1369 (a1, a2, a3, a4, a5, a6, a7, a8)
1370 );
1371}
1372
1373template <class Result, class Arg1, class Arg2, class Arg3, class Arg4,
1374 class Arg5, class Arg6, class Arg7, class Arg8>
1375inline const
1376lambda_functor<
1377 lambda_functor_base<
1378 action<8, function_action<8, Result> >,
1379 typename detail::bind_tuple_mapper<
1380 typename detail::constify_non_funcs<Arg1>::type, const Arg2, const Arg3,
1381 const Arg4, const Arg5, const Arg6, const Arg7, const Arg8
1382 >::type
1383 >
1384>
1385
1386bind(const Arg1& a1, const Arg2& a2, const Arg3& a3, const Arg4& a4,
1387 const Arg5& a5, const Arg6& a6, const Arg7& a7, const Arg8& a8) {
1388 return
1389 lambda_functor_base<
1390 action<8, function_action<8, Result> >,
1391 typename detail::bind_tuple_mapper<
1392 typename detail::constify_non_funcs<Arg1>::type, const Arg2,
1393 const Arg3, const Arg4, const Arg5, const Arg6, const Arg7, const Arg8
1394 >::type
1395 >
1396 ( typename detail::bind_tuple_mapper<
1397 typename detail::constify_non_funcs<Arg1>::type, const Arg2,
1398 const Arg3, const Arg4, const Arg5, const Arg6, const Arg7, const Arg8
1399 >::type
1400 (a1, a2, a3, a4, a5, a6, a7, a8)
1401 );
1402}
1403
1404template <class Result, class Par1, class Par2, class Par3, class Par4,
1405 class Par5, class Par6, class Par7, class Arg2, class Arg3,
1406 class Arg4, class Arg5, class Arg6, class Arg7, class Arg8>
1407inline const
1408lambda_functor<
1409 lambda_functor_base<
1410 action<8, function_action<8, Result> >,
1411 typename detail::bind_tuple_mapper<
1412 Result(*)(Par1, Par2, Par3, Par4, Par5, Par6, Par7), const Arg2,
1413 const Arg3, const Arg4, const Arg5, const Arg6, const Arg7, const Arg8
1414 >::type
1415 >
1416>
1417
1418bind(Result(* const & a1)(Par1, Par2, Par3, Par4, Par5, Par6, Par7),
1419 const Arg2& a2, const Arg3& a3, const Arg4& a4, const Arg5& a5,
1420 const Arg6& a6, const Arg7& a7, const Arg8& a8) {
1421 return
1422 lambda_functor_base<
1423 action<8, function_action<8, Result> >,
1424 typename detail::bind_tuple_mapper<
1425 Result(*)(Par1, Par2, Par3, Par4, Par5, Par6, Par7), const Arg2,
1426 const Arg3, const Arg4, const Arg5, const Arg6, const Arg7, const Arg8
1427 >::type
1428 >
1429 ( typename detail::bind_tuple_mapper<
1430 Result(*)(Par1, Par2, Par3, Par4, Par5, Par6, Par7), const Arg2,
1431 const Arg3, const Arg4, const Arg5, const Arg6, const Arg7, const Arg8
1432 >::type
1433 (a1, a2, a3, a4, a5, a6, a7, a8)
1434 );
1435}
1436
1437
1438 #endif
1439
1440// 9-argument bind functions --------------------------
1441#ifndef BOOST_REF_TO_FUNC_CONFLICTS_WITH_REF_TO_T
1442template <class Result, class Par1, class Par2, class Par3, class Par4,
1443 class Par5, class Par6, class Par7, class Par8, class Arg2,
1444 class Arg3, class Arg4, class Arg5, class Arg6, class Arg7,
1445 class Arg8, class Arg9>
1446inline const
1447lambda_functor<
1448 lambda_functor_base<
1449 action<9, function_action<9, Result> >,
1450 typename detail::bind_tuple_mapper<
1451 Result(&)(Par1, Par2, Par3, Par4, Par5, Par6, Par7, Par8), const Arg2,
1452 const Arg3, const Arg4, const Arg5, const Arg6, const Arg7, const Arg8,
1453 const Arg9
1454 >::type
1455 >
1456>
1457
1458bind(Result(&a1)(Par1, Par2, Par3, Par4, Par5, Par6, Par7, Par8),
1459 const Arg2& a2, const Arg3& a3, const Arg4& a4, const Arg5& a5,
1460 const Arg6& a6, const Arg7& a7, const Arg8& a8, const Arg9& a9) {
1461 return
1462 lambda_functor_base<
1463 action<9, function_action<9, Result> >,
1464 typename detail::bind_tuple_mapper<
1465 Result(&)(Par1, Par2, Par3, Par4, Par5, Par6, Par7, Par8), const Arg2,
1466 const Arg3, const Arg4, const Arg5, const Arg6, const Arg7,
1467 const Arg8, const Arg9
1468 >::type
1469 >
1470 ( typename detail::bind_tuple_mapper<
1471 Result(&)(Par1, Par2, Par3, Par4, Par5, Par6, Par7, Par8), const Arg2,
1472 const Arg3, const Arg4, const Arg5, const Arg6, const Arg7,
1473 const Arg8, const Arg9
1474 >::type
1475 (a1, a2, a3, a4, a5, a6, a7, a8, a9)
1476 );
1477}
1478#endif
1479
1480 #ifndef BOOST_LAMBDA_INCORRECT_BIND_OVERLOADING
1481template <class Arg1, class Arg2, class Arg3, class Arg4, class Arg5,
1482 class Arg6, class Arg7, class Arg8, class Arg9>
1483inline const
1484lambda_functor<
1485 lambda_functor_base<
1486 action<9, function_action<9> >,
1487 typename detail::bind_tuple_mapper<
1488 const Arg1, const Arg2, const Arg3, const Arg4, const Arg5, const Arg6,
1489 const Arg7, const Arg8, const Arg9
1490 >::type
1491 >
1492>
1493
1494bind(const Arg1& a1, const Arg2& a2, const Arg3& a3, const Arg4& a4,
1495 const Arg5& a5, const Arg6& a6, const Arg7& a7, const Arg8& a8,
1496 const Arg9& a9) {
1497 return
1498 lambda_functor_base<
1499 action<9, function_action<9> >,
1500 typename detail::bind_tuple_mapper<
1501 const Arg1, const Arg2, const Arg3, const Arg4, const Arg5,
1502 const Arg6, const Arg7, const Arg8, const Arg9
1503 >::type
1504 >
1505 ( typename detail::bind_tuple_mapper<
1506 const Arg1, const Arg2, const Arg3, const Arg4, const Arg5,
1507 const Arg6, const Arg7, const Arg8, const Arg9
1508 >::type
1509 (a1, a2, a3, a4, a5, a6, a7, a8, a9)
1510 );
1511}
1512
1513template <class Result, class Arg1, class Arg2, class Arg3, class Arg4,
1514 class Arg5, class Arg6, class Arg7, class Arg8, class Arg9>
1515inline const
1516lambda_functor<
1517 lambda_functor_base<
1518 action<9, function_action<9, Result> >,
1519 typename detail::bind_tuple_mapper<
1520 const Arg1, const Arg2, const Arg3, const Arg4, const Arg5, const Arg6,
1521 const Arg7, const Arg8, const Arg9
1522 >::type
1523 >
1524>
1525
1526bind(const Arg1& a1, const Arg2& a2, const Arg3& a3, const Arg4& a4,
1527 const Arg5& a5, const Arg6& a6, const Arg7& a7, const Arg8& a8,
1528 const Arg9& a9) {
1529 return
1530 lambda_functor_base<
1531 action<9, function_action<9, Result> >,
1532 typename detail::bind_tuple_mapper<
1533 const Arg1, const Arg2, const Arg3, const Arg4, const Arg5,
1534 const Arg6, const Arg7, const Arg8, const Arg9
1535 >::type
1536 >
1537 ( typename detail::bind_tuple_mapper<
1538 const Arg1, const Arg2, const Arg3, const Arg4, const Arg5,
1539 const Arg6, const Arg7, const Arg8, const Arg9
1540 >::type
1541 (a1, a2, a3, a4, a5, a6, a7, a8, a9)
1542 );
1543}
1544
1545
1546 #else
1547template <class Arg1, class Arg2, class Arg3, class Arg4, class Arg5,
1548 class Arg6, class Arg7, class Arg8, class Arg9>
1549inline const
1550lambda_functor<
1551 lambda_functor_base<
1552 action<9, function_action<9> >,
1553 typename detail::bind_tuple_mapper<
1554 typename detail::constify_non_funcs<Arg1>::type, const Arg2, const Arg3,
1555 const Arg4, const Arg5, const Arg6, const Arg7, const Arg8, const Arg9
1556 >::type
1557 >
1558>
1559
1560bind(const Arg1& a1, const Arg2& a2, const Arg3& a3, const Arg4& a4,
1561 const Arg5& a5, const Arg6& a6, const Arg7& a7, const Arg8& a8,
1562 const Arg9& a9) {
1563 return
1564 lambda_functor_base<
1565 action<9, function_action<9> >,
1566 typename detail::bind_tuple_mapper<
1567 typename detail::constify_non_funcs<Arg1>::type, const Arg2,
1568 const Arg3, const Arg4, const Arg5, const Arg6, const Arg7,
1569 const Arg8, const Arg9
1570 >::type
1571 >
1572 ( typename detail::bind_tuple_mapper<
1573 typename detail::constify_non_funcs<Arg1>::type, const Arg2,
1574 const Arg3, const Arg4, const Arg5, const Arg6, const Arg7,
1575 const Arg8, const Arg9
1576 >::type
1577 (a1, a2, a3, a4, a5, a6, a7, a8, a9)
1578 );
1579}
1580
1581template <class Result, class Arg1, class Arg2, class Arg3, class Arg4,
1582 class Arg5, class Arg6, class Arg7, class Arg8, class Arg9>
1583inline const
1584lambda_functor<
1585 lambda_functor_base<
1586 action<9, function_action<9, Result> >,
1587 typename detail::bind_tuple_mapper<
1588 typename detail::constify_non_funcs<Arg1>::type, const Arg2, const Arg3,
1589 const Arg4, const Arg5, const Arg6, const Arg7, const Arg8, const Arg9
1590 >::type
1591 >
1592>
1593
1594bind(const Arg1& a1, const Arg2& a2, const Arg3& a3, const Arg4& a4,
1595 const Arg5& a5, const Arg6& a6, const Arg7& a7, const Arg8& a8,
1596 const Arg9& a9) {
1597 return
1598 lambda_functor_base<
1599 action<9, function_action<9, Result> >,
1600 typename detail::bind_tuple_mapper<
1601 typename detail::constify_non_funcs<Arg1>::type, const Arg2,
1602 const Arg3, const Arg4, const Arg5, const Arg6, const Arg7,
1603 const Arg8, const Arg9
1604 >::type
1605 >
1606 ( typename detail::bind_tuple_mapper<
1607 typename detail::constify_non_funcs<Arg1>::type, const Arg2,
1608 const Arg3, const Arg4, const Arg5, const Arg6, const Arg7,
1609 const Arg8, const Arg9
1610 >::type
1611 (a1, a2, a3, a4, a5, a6, a7, a8, a9)
1612 );
1613}
1614
1615template <class Result, class Par1, class Par2, class Par3, class Par4,
1616 class Par5, class Par6, class Par7, class Par8, class Arg2,
1617 class Arg3, class Arg4, class Arg5, class Arg6, class Arg7,
1618 class Arg8, class Arg9>
1619inline const
1620lambda_functor<
1621 lambda_functor_base<
1622 action<9, function_action<9, Result> >,
1623 typename detail::bind_tuple_mapper<
1624 Result(*)(Par1, Par2, Par3, Par4, Par5, Par6, Par7, Par8), const Arg2,
1625 const Arg3, const Arg4, const Arg5, const Arg6, const Arg7, const Arg8,
1626 const Arg9
1627 >::type
1628 >
1629>
1630
1631bind(Result(* const & a1)(Par1, Par2, Par3, Par4, Par5, Par6, Par7, Par8),
1632 const Arg2& a2, const Arg3& a3, const Arg4& a4, const Arg5& a5,
1633 const Arg6& a6, const Arg7& a7, const Arg8& a8, const Arg9& a9) {
1634 return
1635 lambda_functor_base<
1636 action<9, function_action<9, Result> >,
1637 typename detail::bind_tuple_mapper<
1638 Result(*)(Par1, Par2, Par3, Par4, Par5, Par6, Par7, Par8), const Arg2,
1639 const Arg3, const Arg4, const Arg5, const Arg6, const Arg7,
1640 const Arg8, const Arg9
1641 >::type
1642 >
1643 ( typename detail::bind_tuple_mapper<
1644 Result(*)(Par1, Par2, Par3, Par4, Par5, Par6, Par7, Par8), const Arg2,
1645 const Arg3, const Arg4, const Arg5, const Arg6, const Arg7,
1646 const Arg8, const Arg9
1647 >::type
1648 (a1, a2, a3, a4, a5, a6, a7, a8, a9)
1649 );
1650}
1651
1652
1653 #endif
1654
1655// 10-argument bind functions --------------------------
1656#ifndef BOOST_REF_TO_FUNC_CONFLICTS_WITH_REF_TO_T
1657template <class Result, class Par1, class Par2, class Par3, class Par4,
1658 class Par5, class Par6, class Par7, class Par8, class Par9,
1659 class Arg2, class Arg3, class Arg4, class Arg5, class Arg6,
1660 class Arg7, class Arg8, class Arg9, class Arg10>
1661inline const
1662lambda_functor<
1663 lambda_functor_base<
1664 action<10, function_action<10, Result> >,
1665 typename detail::bind_tuple_mapper<
1666 Result(&)(Par1, Par2, Par3, Par4, Par5, Par6, Par7, Par8, Par9),
1667 const Arg2, const Arg3, const Arg4, const Arg5, const Arg6, const Arg7,
1668 const Arg8, const Arg9, const Arg10
1669 >::type
1670 >
1671>
1672
1673bind(Result(&a1)(Par1, Par2, Par3, Par4, Par5, Par6, Par7, Par8, Par9),
1674 const Arg2& a2, const Arg3& a3, const Arg4& a4, const Arg5& a5,
1675 const Arg6& a6, const Arg7& a7, const Arg8& a8, const Arg9& a9,
1676 const Arg10& a10) {
1677 return
1678 lambda_functor_base<
1679 action<10, function_action<10, Result> >,
1680 typename detail::bind_tuple_mapper<
1681 Result(&)(Par1, Par2, Par3, Par4, Par5, Par6, Par7, Par8, Par9),
1682 const Arg2, const Arg3, const Arg4, const Arg5, const Arg6,
1683 const Arg7, const Arg8, const Arg9, const Arg10
1684 >::type
1685 >
1686 ( typename detail::bind_tuple_mapper<
1687 Result(&)(Par1, Par2, Par3, Par4, Par5, Par6, Par7, Par8, Par9),
1688 const Arg2, const Arg3, const Arg4, const Arg5, const Arg6,
1689 const Arg7, const Arg8, const Arg9, const Arg10
1690 >::type
1691 (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)
1692 );
1693}
1694#endif
1695
1696 #ifndef BOOST_LAMBDA_INCORRECT_BIND_OVERLOADING
1697template <class Arg1, class Arg2, class Arg3, class Arg4, class Arg5,
1698 class Arg6, class Arg7, class Arg8, class Arg9, class Arg10>
1699inline const
1700lambda_functor<
1701 lambda_functor_base<
1702 action<10, function_action<10> >,
1703 typename detail::bind_tuple_mapper<
1704 const Arg1, const Arg2, const Arg3, const Arg4, const Arg5, const Arg6,
1705 const Arg7, const Arg8, const Arg9, const Arg10
1706 >::type
1707 >
1708>
1709
1710bind(const Arg1& a1, const Arg2& a2, const Arg3& a3, const Arg4& a4,
1711 const Arg5& a5, const Arg6& a6, const Arg7& a7, const Arg8& a8,
1712 const Arg9& a9, const Arg10& a10) {
1713 return
1714 lambda_functor_base<
1715 action<10, function_action<10> >,
1716 typename detail::bind_tuple_mapper<
1717 const Arg1, const Arg2, const Arg3, const Arg4, const Arg5,
1718 const Arg6, const Arg7, const Arg8, const Arg9, const Arg10
1719 >::type
1720 >
1721 ( typename detail::bind_tuple_mapper<
1722 const Arg1, const Arg2, const Arg3, const Arg4, const Arg5,
1723 const Arg6, const Arg7, const Arg8, const Arg9, const Arg10
1724 >::type
1725 (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)
1726 );
1727}
1728
1729template <class Result, class Arg1, class Arg2, class Arg3, class Arg4,
1730 class Arg5, class Arg6, class Arg7, class Arg8, class Arg9,
1731 class Arg10>
1732inline const
1733lambda_functor<
1734 lambda_functor_base<
1735 action<10, function_action<10, Result> >,
1736 typename detail::bind_tuple_mapper<
1737 const Arg1, const Arg2, const Arg3, const Arg4, const Arg5, const Arg6,
1738 const Arg7, const Arg8, const Arg9, const Arg10
1739 >::type
1740 >
1741>
1742
1743bind(const Arg1& a1, const Arg2& a2, const Arg3& a3, const Arg4& a4,
1744 const Arg5& a5, const Arg6& a6, const Arg7& a7, const Arg8& a8,
1745 const Arg9& a9, const Arg10& a10) {
1746 return
1747 lambda_functor_base<
1748 action<10, function_action<10, Result> >,
1749 typename detail::bind_tuple_mapper<
1750 const Arg1, const Arg2, const Arg3, const Arg4, const Arg5,
1751 const Arg6, const Arg7, const Arg8, const Arg9, const Arg10
1752 >::type
1753 >
1754 ( typename detail::bind_tuple_mapper<
1755 const Arg1, const Arg2, const Arg3, const Arg4, const Arg5,
1756 const Arg6, const Arg7, const Arg8, const Arg9, const Arg10
1757 >::type
1758 (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)
1759 );
1760}
1761
1762
1763 #else
1764template <class Arg1, class Arg2, class Arg3, class Arg4, class Arg5,
1765 class Arg6, class Arg7, class Arg8, class Arg9, class Arg10>
1766inline const
1767lambda_functor<
1768 lambda_functor_base<
1769 action<10, function_action<10> >,
1770 typename detail::bind_tuple_mapper<
1771 typename detail::constify_non_funcs<Arg1>::type, const Arg2, const Arg3,
1772 const Arg4, const Arg5, const Arg6, const Arg7, const Arg8, const Arg9,
1773 const Arg10
1774 >::type
1775 >
1776>
1777
1778bind(const Arg1& a1, const Arg2& a2, const Arg3& a3, const Arg4& a4,
1779 const Arg5& a5, const Arg6& a6, const Arg7& a7, const Arg8& a8,
1780 const Arg9& a9, const Arg10& a10) {
1781 return
1782 lambda_functor_base<
1783 action<10, function_action<10> >,
1784 typename detail::bind_tuple_mapper<
1785 typename detail::constify_non_funcs<Arg1>::type, const Arg2,
1786 const Arg3, const Arg4, const Arg5, const Arg6, const Arg7,
1787 const Arg8, const Arg9, const Arg10
1788 >::type
1789 >
1790 ( typename detail::bind_tuple_mapper<
1791 typename detail::constify_non_funcs<Arg1>::type, const Arg2,
1792 const Arg3, const Arg4, const Arg5, const Arg6, const Arg7,
1793 const Arg8, const Arg9, const Arg10
1794 >::type
1795 (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)
1796 );
1797}
1798
1799template <class Result, class Arg1, class Arg2, class Arg3, class Arg4,
1800 class Arg5, class Arg6, class Arg7, class Arg8, class Arg9,
1801 class Arg10>
1802inline const
1803lambda_functor<
1804 lambda_functor_base<
1805 action<10, function_action<10, Result> >,
1806 typename detail::bind_tuple_mapper<
1807 typename detail::constify_non_funcs<Arg1>::type, const Arg2, const Arg3,
1808 const Arg4, const Arg5, const Arg6, const Arg7, const Arg8, const Arg9,
1809 const Arg10
1810 >::type
1811 >
1812>
1813
1814bind(const Arg1& a1, const Arg2& a2, const Arg3& a3, const Arg4& a4,
1815 const Arg5& a5, const Arg6& a6, const Arg7& a7, const Arg8& a8,
1816 const Arg9& a9, const Arg10& a10) {
1817 return
1818 lambda_functor_base<
1819 action<10, function_action<10, Result> >,
1820 typename detail::bind_tuple_mapper<
1821 typename detail::constify_non_funcs<Arg1>::type, const Arg2,
1822 const Arg3, const Arg4, const Arg5, const Arg6, const Arg7,
1823 const Arg8, const Arg9, const Arg10
1824 >::type
1825 >
1826 ( typename detail::bind_tuple_mapper<
1827 typename detail::constify_non_funcs<Arg1>::type, const Arg2,
1828 const Arg3, const Arg4, const Arg5, const Arg6, const Arg7,
1829 const Arg8, const Arg9, const Arg10
1830 >::type
1831 (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)
1832 );
1833}
1834
1835template <class Result, class Par1, class Par2, class Par3, class Par4,
1836 class Par5, class Par6, class Par7, class Par8, class Par9,
1837 class Arg2, class Arg3, class Arg4, class Arg5, class Arg6,
1838 class Arg7, class Arg8, class Arg9, class Arg10>
1839inline const
1840lambda_functor<
1841 lambda_functor_base<
1842 action<10, function_action<10, Result> >,
1843 typename detail::bind_tuple_mapper<
1844 Result(*)(Par1, Par2, Par3, Par4, Par5, Par6, Par7, Par8, Par9),
1845 const Arg2, const Arg3, const Arg4, const Arg5, const Arg6, const Arg7,
1846 const Arg8, const Arg9, const Arg10
1847 >::type
1848 >
1849>
1850
1851bind(Result(* const & a1)(Par1, Par2, Par3, Par4, Par5, Par6, Par7, Par8,
1852 Par9), const Arg2& a2, const Arg3& a3, const Arg4& a4, const Arg5& a5,
1853 const Arg6& a6, const Arg7& a7, const Arg8& a8, const Arg9& a9,
1854 const Arg10& a10) {
1855 return
1856 lambda_functor_base<
1857 action<10, function_action<10, Result> >,
1858 typename detail::bind_tuple_mapper<
1859 Result(*)(Par1, Par2, Par3, Par4, Par5, Par6, Par7, Par8, Par9),
1860 const Arg2, const Arg3, const Arg4, const Arg5, const Arg6,
1861 const Arg7, const Arg8, const Arg9, const Arg10
1862 >::type
1863 >
1864 ( typename detail::bind_tuple_mapper<
1865 Result(*)(Par1, Par2, Par3, Par4, Par5, Par6, Par7, Par8, Par9),
1866 const Arg2, const Arg3, const Arg4, const Arg5, const Arg6,
1867 const Arg7, const Arg8, const Arg9, const Arg10
1868 >::type
1869 (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)
1870 );
1871}
1872
1873
1874 #endif
1875
1876} // namespace lambda
1877} // namespace boost
1878
1879#endif
1880