source: NonGTP/Boost/boost/lambda/detail/bind_functions.hpp @ 857

Revision 857, 57.1 KB checked in by igarcia, 19 years ago (diff)
Line 
1// -- bind_functions.hpp -- Boost Lambda Library
2//
3// Copyright (C) 1999, 2000 Jaakko Järvi (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
Note: See TracBrowser for help on using the repository browser.