1 /*=============================================================================
2     Copyright (c) 2001-2007 Joel de Guzman
3 
4     Distributed under the Boost Software License, Version 1.0. (See accompanying
5     file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6 ==============================================================================*/
7 
8 
9 
10 
11 
12 
13 
14     template <
15         typename RT
16       , typename ClassT
17       , typename T0
18       , typename ClassA
19       , typename A0
20     >
21     inline
22     typename detail::expression::function_eval<
23         detail::member_function_ptr<
24             1
25           , RT
26           , RT(ClassT::*)(T0)
27         >
28       , ClassA
29       , A0
30     >::type const
bind(RT (ClassT::* f)(T0),ClassA const & obj,A0 const & a0)31     bind(
32         RT(ClassT::*f)(T0)
33       , ClassA const & obj
34       , A0 const& a0
35     )
36     {
37         typedef detail::member_function_ptr<
38             1
39           , RT
40           , RT(ClassT::*)(T0)
41         > fp_type;
42         return
43             detail::expression::function_eval<
44                 fp_type
45               , ClassA
46               , A0
47             >::make(
48                 fp_type(f)
49               , obj
50               , a0
51             );
52     }
53     template <
54         typename RT
55       , typename ClassT
56       , typename T0
57       , typename ClassA
58       , typename A0
59     >
60     inline
61     typename detail::expression::function_eval<
62         detail::member_function_ptr<
63             1
64           , RT
65           , RT(ClassT::*)(T0) const
66         >
67       , ClassA
68       , A0
69     >::type const
bind(RT (ClassT::* f)(T0)const,ClassA const & obj,A0 const & a0)70     bind(
71         RT(ClassT::*f)(T0) const
72       , ClassA const & obj
73       , A0 const& a0
74     )
75     {
76         typedef detail::member_function_ptr<
77             1
78           , RT
79           , RT(ClassT::*)(T0) const
80         > fp_type;
81         return
82             detail::expression::function_eval<
83                 fp_type
84               , ClassA
85               , A0
86             >::make(
87                 fp_type(f)
88               , obj
89               , a0
90             );
91     }
92     template <
93         typename RT
94       , typename ClassT
95       , typename T0
96       , typename A0
97     >
98     inline
99     typename detail::expression::function_eval<
100         detail::member_function_ptr<
101             1
102           , RT
103           , RT(ClassT::*)(T0)
104         >
105       , ClassT
106       , A0
107     >::type const
bind(RT (ClassT::* f)(T0),ClassT & obj,A0 const & a0)108     bind(
109         RT(ClassT::*f)(T0)
110       , ClassT & obj
111       , A0 const& a0
112     )
113     {
114         typedef detail::member_function_ptr<
115             1
116           , RT
117           , RT(ClassT::*)(T0)
118         > fp_type;
119         return
120             detail::expression::function_eval<
121                 fp_type
122               , ClassT
123               , A0
124             >::make(
125                 fp_type(f)
126               , obj
127               , a0
128             );
129     }
130 
131 
132 
133 
134 
135 
136 
137     template <
138         typename RT
139       , typename ClassT
140       , typename T0 , typename T1
141       , typename ClassA
142       , typename A0 , typename A1
143     >
144     inline
145     typename detail::expression::function_eval<
146         detail::member_function_ptr<
147             2
148           , RT
149           , RT(ClassT::*)(T0 , T1)
150         >
151       , ClassA
152       , A0 , A1
153     >::type const
bind(RT (ClassT::* f)(T0,T1),ClassA const & obj,A0 const & a0,A1 const & a1)154     bind(
155         RT(ClassT::*f)(T0 , T1)
156       , ClassA const & obj
157       , A0 const& a0 , A1 const& a1
158     )
159     {
160         typedef detail::member_function_ptr<
161             2
162           , RT
163           , RT(ClassT::*)(T0 , T1)
164         > fp_type;
165         return
166             detail::expression::function_eval<
167                 fp_type
168               , ClassA
169               , A0 , A1
170             >::make(
171                 fp_type(f)
172               , obj
173               , a0 , a1
174             );
175     }
176     template <
177         typename RT
178       , typename ClassT
179       , typename T0 , typename T1
180       , typename ClassA
181       , typename A0 , typename A1
182     >
183     inline
184     typename detail::expression::function_eval<
185         detail::member_function_ptr<
186             2
187           , RT
188           , RT(ClassT::*)(T0 , T1) const
189         >
190       , ClassA
191       , A0 , A1
192     >::type const
bind(RT (ClassT::* f)(T0,T1)const,ClassA const & obj,A0 const & a0,A1 const & a1)193     bind(
194         RT(ClassT::*f)(T0 , T1) const
195       , ClassA const & obj
196       , A0 const& a0 , A1 const& a1
197     )
198     {
199         typedef detail::member_function_ptr<
200             2
201           , RT
202           , RT(ClassT::*)(T0 , T1) const
203         > fp_type;
204         return
205             detail::expression::function_eval<
206                 fp_type
207               , ClassA
208               , A0 , A1
209             >::make(
210                 fp_type(f)
211               , obj
212               , a0 , a1
213             );
214     }
215     template <
216         typename RT
217       , typename ClassT
218       , typename T0 , typename T1
219       , typename A0 , typename A1
220     >
221     inline
222     typename detail::expression::function_eval<
223         detail::member_function_ptr<
224             2
225           , RT
226           , RT(ClassT::*)(T0 , T1)
227         >
228       , ClassT
229       , A0 , A1
230     >::type const
bind(RT (ClassT::* f)(T0,T1),ClassT & obj,A0 const & a0,A1 const & a1)231     bind(
232         RT(ClassT::*f)(T0 , T1)
233       , ClassT & obj
234       , A0 const& a0 , A1 const& a1
235     )
236     {
237         typedef detail::member_function_ptr<
238             2
239           , RT
240           , RT(ClassT::*)(T0 , T1)
241         > fp_type;
242         return
243             detail::expression::function_eval<
244                 fp_type
245               , ClassT
246               , A0 , A1
247             >::make(
248                 fp_type(f)
249               , obj
250               , a0 , a1
251             );
252     }
253 
254 
255 
256 
257 
258 
259 
260     template <
261         typename RT
262       , typename ClassT
263       , typename T0 , typename T1 , typename T2
264       , typename ClassA
265       , typename A0 , typename A1 , typename A2
266     >
267     inline
268     typename detail::expression::function_eval<
269         detail::member_function_ptr<
270             3
271           , RT
272           , RT(ClassT::*)(T0 , T1 , T2)
273         >
274       , ClassA
275       , A0 , A1 , A2
276     >::type const
bind(RT (ClassT::* f)(T0,T1,T2),ClassA const & obj,A0 const & a0,A1 const & a1,A2 const & a2)277     bind(
278         RT(ClassT::*f)(T0 , T1 , T2)
279       , ClassA const & obj
280       , A0 const& a0 , A1 const& a1 , A2 const& a2
281     )
282     {
283         typedef detail::member_function_ptr<
284             3
285           , RT
286           , RT(ClassT::*)(T0 , T1 , T2)
287         > fp_type;
288         return
289             detail::expression::function_eval<
290                 fp_type
291               , ClassA
292               , A0 , A1 , A2
293             >::make(
294                 fp_type(f)
295               , obj
296               , a0 , a1 , a2
297             );
298     }
299     template <
300         typename RT
301       , typename ClassT
302       , typename T0 , typename T1 , typename T2
303       , typename ClassA
304       , typename A0 , typename A1 , typename A2
305     >
306     inline
307     typename detail::expression::function_eval<
308         detail::member_function_ptr<
309             3
310           , RT
311           , RT(ClassT::*)(T0 , T1 , T2) const
312         >
313       , ClassA
314       , A0 , A1 , A2
315     >::type const
bind(RT (ClassT::* f)(T0,T1,T2)const,ClassA const & obj,A0 const & a0,A1 const & a1,A2 const & a2)316     bind(
317         RT(ClassT::*f)(T0 , T1 , T2) const
318       , ClassA const & obj
319       , A0 const& a0 , A1 const& a1 , A2 const& a2
320     )
321     {
322         typedef detail::member_function_ptr<
323             3
324           , RT
325           , RT(ClassT::*)(T0 , T1 , T2) const
326         > fp_type;
327         return
328             detail::expression::function_eval<
329                 fp_type
330               , ClassA
331               , A0 , A1 , A2
332             >::make(
333                 fp_type(f)
334               , obj
335               , a0 , a1 , a2
336             );
337     }
338     template <
339         typename RT
340       , typename ClassT
341       , typename T0 , typename T1 , typename T2
342       , typename A0 , typename A1 , typename A2
343     >
344     inline
345     typename detail::expression::function_eval<
346         detail::member_function_ptr<
347             3
348           , RT
349           , RT(ClassT::*)(T0 , T1 , T2)
350         >
351       , ClassT
352       , A0 , A1 , A2
353     >::type const
bind(RT (ClassT::* f)(T0,T1,T2),ClassT & obj,A0 const & a0,A1 const & a1,A2 const & a2)354     bind(
355         RT(ClassT::*f)(T0 , T1 , T2)
356       , ClassT & obj
357       , A0 const& a0 , A1 const& a1 , A2 const& a2
358     )
359     {
360         typedef detail::member_function_ptr<
361             3
362           , RT
363           , RT(ClassT::*)(T0 , T1 , T2)
364         > fp_type;
365         return
366             detail::expression::function_eval<
367                 fp_type
368               , ClassT
369               , A0 , A1 , A2
370             >::make(
371                 fp_type(f)
372               , obj
373               , a0 , a1 , a2
374             );
375     }
376 
377 
378 
379 
380 
381 
382 
383     template <
384         typename RT
385       , typename ClassT
386       , typename T0 , typename T1 , typename T2 , typename T3
387       , typename ClassA
388       , typename A0 , typename A1 , typename A2 , typename A3
389     >
390     inline
391     typename detail::expression::function_eval<
392         detail::member_function_ptr<
393             4
394           , RT
395           , RT(ClassT::*)(T0 , T1 , T2 , T3)
396         >
397       , ClassA
398       , A0 , A1 , A2 , A3
399     >::type const
bind(RT (ClassT::* f)(T0,T1,T2,T3),ClassA const & obj,A0 const & a0,A1 const & a1,A2 const & a2,A3 const & a3)400     bind(
401         RT(ClassT::*f)(T0 , T1 , T2 , T3)
402       , ClassA const & obj
403       , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3
404     )
405     {
406         typedef detail::member_function_ptr<
407             4
408           , RT
409           , RT(ClassT::*)(T0 , T1 , T2 , T3)
410         > fp_type;
411         return
412             detail::expression::function_eval<
413                 fp_type
414               , ClassA
415               , A0 , A1 , A2 , A3
416             >::make(
417                 fp_type(f)
418               , obj
419               , a0 , a1 , a2 , a3
420             );
421     }
422     template <
423         typename RT
424       , typename ClassT
425       , typename T0 , typename T1 , typename T2 , typename T3
426       , typename ClassA
427       , typename A0 , typename A1 , typename A2 , typename A3
428     >
429     inline
430     typename detail::expression::function_eval<
431         detail::member_function_ptr<
432             4
433           , RT
434           , RT(ClassT::*)(T0 , T1 , T2 , T3) const
435         >
436       , ClassA
437       , A0 , A1 , A2 , A3
438     >::type const
bind(RT (ClassT::* f)(T0,T1,T2,T3)const,ClassA const & obj,A0 const & a0,A1 const & a1,A2 const & a2,A3 const & a3)439     bind(
440         RT(ClassT::*f)(T0 , T1 , T2 , T3) const
441       , ClassA const & obj
442       , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3
443     )
444     {
445         typedef detail::member_function_ptr<
446             4
447           , RT
448           , RT(ClassT::*)(T0 , T1 , T2 , T3) const
449         > fp_type;
450         return
451             detail::expression::function_eval<
452                 fp_type
453               , ClassA
454               , A0 , A1 , A2 , A3
455             >::make(
456                 fp_type(f)
457               , obj
458               , a0 , a1 , a2 , a3
459             );
460     }
461     template <
462         typename RT
463       , typename ClassT
464       , typename T0 , typename T1 , typename T2 , typename T3
465       , typename A0 , typename A1 , typename A2 , typename A3
466     >
467     inline
468     typename detail::expression::function_eval<
469         detail::member_function_ptr<
470             4
471           , RT
472           , RT(ClassT::*)(T0 , T1 , T2 , T3)
473         >
474       , ClassT
475       , A0 , A1 , A2 , A3
476     >::type const
bind(RT (ClassT::* f)(T0,T1,T2,T3),ClassT & obj,A0 const & a0,A1 const & a1,A2 const & a2,A3 const & a3)477     bind(
478         RT(ClassT::*f)(T0 , T1 , T2 , T3)
479       , ClassT & obj
480       , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3
481     )
482     {
483         typedef detail::member_function_ptr<
484             4
485           , RT
486           , RT(ClassT::*)(T0 , T1 , T2 , T3)
487         > fp_type;
488         return
489             detail::expression::function_eval<
490                 fp_type
491               , ClassT
492               , A0 , A1 , A2 , A3
493             >::make(
494                 fp_type(f)
495               , obj
496               , a0 , a1 , a2 , a3
497             );
498     }
499 
500 
501 
502 
503 
504 
505 
506     template <
507         typename RT
508       , typename ClassT
509       , typename T0 , typename T1 , typename T2 , typename T3 , typename T4
510       , typename ClassA
511       , typename A0 , typename A1 , typename A2 , typename A3 , typename A4
512     >
513     inline
514     typename detail::expression::function_eval<
515         detail::member_function_ptr<
516             5
517           , RT
518           , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4)
519         >
520       , ClassA
521       , A0 , A1 , A2 , A3 , A4
522     >::type const
bind(RT (ClassT::* f)(T0,T1,T2,T3,T4),ClassA const & obj,A0 const & a0,A1 const & a1,A2 const & a2,A3 const & a3,A4 const & a4)523     bind(
524         RT(ClassT::*f)(T0 , T1 , T2 , T3 , T4)
525       , ClassA const & obj
526       , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4
527     )
528     {
529         typedef detail::member_function_ptr<
530             5
531           , RT
532           , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4)
533         > fp_type;
534         return
535             detail::expression::function_eval<
536                 fp_type
537               , ClassA
538               , A0 , A1 , A2 , A3 , A4
539             >::make(
540                 fp_type(f)
541               , obj
542               , a0 , a1 , a2 , a3 , a4
543             );
544     }
545     template <
546         typename RT
547       , typename ClassT
548       , typename T0 , typename T1 , typename T2 , typename T3 , typename T4
549       , typename ClassA
550       , typename A0 , typename A1 , typename A2 , typename A3 , typename A4
551     >
552     inline
553     typename detail::expression::function_eval<
554         detail::member_function_ptr<
555             5
556           , RT
557           , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4) const
558         >
559       , ClassA
560       , A0 , A1 , A2 , A3 , A4
561     >::type const
bind(RT (ClassT::* f)(T0,T1,T2,T3,T4)const,ClassA const & obj,A0 const & a0,A1 const & a1,A2 const & a2,A3 const & a3,A4 const & a4)562     bind(
563         RT(ClassT::*f)(T0 , T1 , T2 , T3 , T4) const
564       , ClassA const & obj
565       , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4
566     )
567     {
568         typedef detail::member_function_ptr<
569             5
570           , RT
571           , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4) const
572         > fp_type;
573         return
574             detail::expression::function_eval<
575                 fp_type
576               , ClassA
577               , A0 , A1 , A2 , A3 , A4
578             >::make(
579                 fp_type(f)
580               , obj
581               , a0 , a1 , a2 , a3 , a4
582             );
583     }
584     template <
585         typename RT
586       , typename ClassT
587       , typename T0 , typename T1 , typename T2 , typename T3 , typename T4
588       , typename A0 , typename A1 , typename A2 , typename A3 , typename A4
589     >
590     inline
591     typename detail::expression::function_eval<
592         detail::member_function_ptr<
593             5
594           , RT
595           , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4)
596         >
597       , ClassT
598       , A0 , A1 , A2 , A3 , A4
599     >::type const
bind(RT (ClassT::* f)(T0,T1,T2,T3,T4),ClassT & obj,A0 const & a0,A1 const & a1,A2 const & a2,A3 const & a3,A4 const & a4)600     bind(
601         RT(ClassT::*f)(T0 , T1 , T2 , T3 , T4)
602       , ClassT & obj
603       , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4
604     )
605     {
606         typedef detail::member_function_ptr<
607             5
608           , RT
609           , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4)
610         > fp_type;
611         return
612             detail::expression::function_eval<
613                 fp_type
614               , ClassT
615               , A0 , A1 , A2 , A3 , A4
616             >::make(
617                 fp_type(f)
618               , obj
619               , a0 , a1 , a2 , a3 , a4
620             );
621     }
622 
623 
624 
625 
626 
627 
628 
629     template <
630         typename RT
631       , typename ClassT
632       , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5
633       , typename ClassA
634       , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5
635     >
636     inline
637     typename detail::expression::function_eval<
638         detail::member_function_ptr<
639             6
640           , RT
641           , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5)
642         >
643       , ClassA
644       , A0 , A1 , A2 , A3 , A4 , A5
645     >::type const
bind(RT (ClassT::* f)(T0,T1,T2,T3,T4,T5),ClassA const & obj,A0 const & a0,A1 const & a1,A2 const & a2,A3 const & a3,A4 const & a4,A5 const & a5)646     bind(
647         RT(ClassT::*f)(T0 , T1 , T2 , T3 , T4 , T5)
648       , ClassA const & obj
649       , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5
650     )
651     {
652         typedef detail::member_function_ptr<
653             6
654           , RT
655           , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5)
656         > fp_type;
657         return
658             detail::expression::function_eval<
659                 fp_type
660               , ClassA
661               , A0 , A1 , A2 , A3 , A4 , A5
662             >::make(
663                 fp_type(f)
664               , obj
665               , a0 , a1 , a2 , a3 , a4 , a5
666             );
667     }
668     template <
669         typename RT
670       , typename ClassT
671       , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5
672       , typename ClassA
673       , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5
674     >
675     inline
676     typename detail::expression::function_eval<
677         detail::member_function_ptr<
678             6
679           , RT
680           , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5) const
681         >
682       , ClassA
683       , A0 , A1 , A2 , A3 , A4 , A5
684     >::type const
bind(RT (ClassT::* f)(T0,T1,T2,T3,T4,T5)const,ClassA const & obj,A0 const & a0,A1 const & a1,A2 const & a2,A3 const & a3,A4 const & a4,A5 const & a5)685     bind(
686         RT(ClassT::*f)(T0 , T1 , T2 , T3 , T4 , T5) const
687       , ClassA const & obj
688       , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5
689     )
690     {
691         typedef detail::member_function_ptr<
692             6
693           , RT
694           , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5) const
695         > fp_type;
696         return
697             detail::expression::function_eval<
698                 fp_type
699               , ClassA
700               , A0 , A1 , A2 , A3 , A4 , A5
701             >::make(
702                 fp_type(f)
703               , obj
704               , a0 , a1 , a2 , a3 , a4 , a5
705             );
706     }
707     template <
708         typename RT
709       , typename ClassT
710       , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5
711       , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5
712     >
713     inline
714     typename detail::expression::function_eval<
715         detail::member_function_ptr<
716             6
717           , RT
718           , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5)
719         >
720       , ClassT
721       , A0 , A1 , A2 , A3 , A4 , A5
722     >::type const
bind(RT (ClassT::* f)(T0,T1,T2,T3,T4,T5),ClassT & obj,A0 const & a0,A1 const & a1,A2 const & a2,A3 const & a3,A4 const & a4,A5 const & a5)723     bind(
724         RT(ClassT::*f)(T0 , T1 , T2 , T3 , T4 , T5)
725       , ClassT & obj
726       , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5
727     )
728     {
729         typedef detail::member_function_ptr<
730             6
731           , RT
732           , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5)
733         > fp_type;
734         return
735             detail::expression::function_eval<
736                 fp_type
737               , ClassT
738               , A0 , A1 , A2 , A3 , A4 , A5
739             >::make(
740                 fp_type(f)
741               , obj
742               , a0 , a1 , a2 , a3 , a4 , a5
743             );
744     }
745 
746 
747 
748 
749 
750 
751 
752     template <
753         typename RT
754       , typename ClassT
755       , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6
756       , typename ClassA
757       , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6
758     >
759     inline
760     typename detail::expression::function_eval<
761         detail::member_function_ptr<
762             7
763           , RT
764           , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6)
765         >
766       , ClassA
767       , A0 , A1 , A2 , A3 , A4 , A5 , A6
768     >::type const
bind(RT (ClassT::* f)(T0,T1,T2,T3,T4,T5,T6),ClassA const & obj,A0 const & a0,A1 const & a1,A2 const & a2,A3 const & a3,A4 const & a4,A5 const & a5,A6 const & a6)769     bind(
770         RT(ClassT::*f)(T0 , T1 , T2 , T3 , T4 , T5 , T6)
771       , ClassA const & obj
772       , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6
773     )
774     {
775         typedef detail::member_function_ptr<
776             7
777           , RT
778           , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6)
779         > fp_type;
780         return
781             detail::expression::function_eval<
782                 fp_type
783               , ClassA
784               , A0 , A1 , A2 , A3 , A4 , A5 , A6
785             >::make(
786                 fp_type(f)
787               , obj
788               , a0 , a1 , a2 , a3 , a4 , a5 , a6
789             );
790     }
791     template <
792         typename RT
793       , typename ClassT
794       , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6
795       , typename ClassA
796       , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6
797     >
798     inline
799     typename detail::expression::function_eval<
800         detail::member_function_ptr<
801             7
802           , RT
803           , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6) const
804         >
805       , ClassA
806       , A0 , A1 , A2 , A3 , A4 , A5 , A6
807     >::type const
bind(RT (ClassT::* f)(T0,T1,T2,T3,T4,T5,T6)const,ClassA const & obj,A0 const & a0,A1 const & a1,A2 const & a2,A3 const & a3,A4 const & a4,A5 const & a5,A6 const & a6)808     bind(
809         RT(ClassT::*f)(T0 , T1 , T2 , T3 , T4 , T5 , T6) const
810       , ClassA const & obj
811       , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6
812     )
813     {
814         typedef detail::member_function_ptr<
815             7
816           , RT
817           , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6) const
818         > fp_type;
819         return
820             detail::expression::function_eval<
821                 fp_type
822               , ClassA
823               , A0 , A1 , A2 , A3 , A4 , A5 , A6
824             >::make(
825                 fp_type(f)
826               , obj
827               , a0 , a1 , a2 , a3 , a4 , a5 , a6
828             );
829     }
830     template <
831         typename RT
832       , typename ClassT
833       , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6
834       , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6
835     >
836     inline
837     typename detail::expression::function_eval<
838         detail::member_function_ptr<
839             7
840           , RT
841           , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6)
842         >
843       , ClassT
844       , A0 , A1 , A2 , A3 , A4 , A5 , A6
845     >::type const
bind(RT (ClassT::* f)(T0,T1,T2,T3,T4,T5,T6),ClassT & obj,A0 const & a0,A1 const & a1,A2 const & a2,A3 const & a3,A4 const & a4,A5 const & a5,A6 const & a6)846     bind(
847         RT(ClassT::*f)(T0 , T1 , T2 , T3 , T4 , T5 , T6)
848       , ClassT & obj
849       , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6
850     )
851     {
852         typedef detail::member_function_ptr<
853             7
854           , RT
855           , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6)
856         > fp_type;
857         return
858             detail::expression::function_eval<
859                 fp_type
860               , ClassT
861               , A0 , A1 , A2 , A3 , A4 , A5 , A6
862             >::make(
863                 fp_type(f)
864               , obj
865               , a0 , a1 , a2 , a3 , a4 , a5 , a6
866             );
867     }
868 
869 
870 
871 
872 
873 
874 
875     template <
876         typename RT
877       , typename ClassT
878       , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7
879       , typename ClassA
880       , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7
881     >
882     inline
883     typename detail::expression::function_eval<
884         detail::member_function_ptr<
885             8
886           , RT
887           , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7)
888         >
889       , ClassA
890       , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7
891     >::type const
bind(RT (ClassT::* f)(T0,T1,T2,T3,T4,T5,T6,T7),ClassA const & obj,A0 const & a0,A1 const & a1,A2 const & a2,A3 const & a3,A4 const & a4,A5 const & a5,A6 const & a6,A7 const & a7)892     bind(
893         RT(ClassT::*f)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7)
894       , ClassA const & obj
895       , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7
896     )
897     {
898         typedef detail::member_function_ptr<
899             8
900           , RT
901           , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7)
902         > fp_type;
903         return
904             detail::expression::function_eval<
905                 fp_type
906               , ClassA
907               , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7
908             >::make(
909                 fp_type(f)
910               , obj
911               , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7
912             );
913     }
914     template <
915         typename RT
916       , typename ClassT
917       , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7
918       , typename ClassA
919       , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7
920     >
921     inline
922     typename detail::expression::function_eval<
923         detail::member_function_ptr<
924             8
925           , RT
926           , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) const
927         >
928       , ClassA
929       , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7
930     >::type const
bind(RT (ClassT::* f)(T0,T1,T2,T3,T4,T5,T6,T7)const,ClassA const & obj,A0 const & a0,A1 const & a1,A2 const & a2,A3 const & a3,A4 const & a4,A5 const & a5,A6 const & a6,A7 const & a7)931     bind(
932         RT(ClassT::*f)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) const
933       , ClassA const & obj
934       , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7
935     )
936     {
937         typedef detail::member_function_ptr<
938             8
939           , RT
940           , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) const
941         > fp_type;
942         return
943             detail::expression::function_eval<
944                 fp_type
945               , ClassA
946               , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7
947             >::make(
948                 fp_type(f)
949               , obj
950               , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7
951             );
952     }
953     template <
954         typename RT
955       , typename ClassT
956       , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7
957       , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7
958     >
959     inline
960     typename detail::expression::function_eval<
961         detail::member_function_ptr<
962             8
963           , RT
964           , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7)
965         >
966       , ClassT
967       , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7
968     >::type const
bind(RT (ClassT::* f)(T0,T1,T2,T3,T4,T5,T6,T7),ClassT & obj,A0 const & a0,A1 const & a1,A2 const & a2,A3 const & a3,A4 const & a4,A5 const & a5,A6 const & a6,A7 const & a7)969     bind(
970         RT(ClassT::*f)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7)
971       , ClassT & obj
972       , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7
973     )
974     {
975         typedef detail::member_function_ptr<
976             8
977           , RT
978           , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7)
979         > fp_type;
980         return
981             detail::expression::function_eval<
982                 fp_type
983               , ClassT
984               , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7
985             >::make(
986                 fp_type(f)
987               , obj
988               , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7
989             );
990     }
991 
992 
993 
994 
995 
996 
997 
998     template <
999         typename RT
1000       , typename ClassT
1001       , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8
1002       , typename ClassA
1003       , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8
1004     >
1005     inline
1006     typename detail::expression::function_eval<
1007         detail::member_function_ptr<
1008             9
1009           , RT
1010           , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8)
1011         >
1012       , ClassA
1013       , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8
1014     >::type const
bind(RT (ClassT::* f)(T0,T1,T2,T3,T4,T5,T6,T7,T8),ClassA const & obj,A0 const & a0,A1 const & a1,A2 const & a2,A3 const & a3,A4 const & a4,A5 const & a5,A6 const & a6,A7 const & a7,A8 const & a8)1015     bind(
1016         RT(ClassT::*f)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8)
1017       , ClassA const & obj
1018       , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8
1019     )
1020     {
1021         typedef detail::member_function_ptr<
1022             9
1023           , RT
1024           , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8)
1025         > fp_type;
1026         return
1027             detail::expression::function_eval<
1028                 fp_type
1029               , ClassA
1030               , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8
1031             >::make(
1032                 fp_type(f)
1033               , obj
1034               , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8
1035             );
1036     }
1037     template <
1038         typename RT
1039       , typename ClassT
1040       , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8
1041       , typename ClassA
1042       , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8
1043     >
1044     inline
1045     typename detail::expression::function_eval<
1046         detail::member_function_ptr<
1047             9
1048           , RT
1049           , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) const
1050         >
1051       , ClassA
1052       , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8
1053     >::type const
bind(RT (ClassT::* f)(T0,T1,T2,T3,T4,T5,T6,T7,T8)const,ClassA const & obj,A0 const & a0,A1 const & a1,A2 const & a2,A3 const & a3,A4 const & a4,A5 const & a5,A6 const & a6,A7 const & a7,A8 const & a8)1054     bind(
1055         RT(ClassT::*f)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) const
1056       , ClassA const & obj
1057       , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8
1058     )
1059     {
1060         typedef detail::member_function_ptr<
1061             9
1062           , RT
1063           , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) const
1064         > fp_type;
1065         return
1066             detail::expression::function_eval<
1067                 fp_type
1068               , ClassA
1069               , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8
1070             >::make(
1071                 fp_type(f)
1072               , obj
1073               , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8
1074             );
1075     }
1076     template <
1077         typename RT
1078       , typename ClassT
1079       , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8
1080       , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8
1081     >
1082     inline
1083     typename detail::expression::function_eval<
1084         detail::member_function_ptr<
1085             9
1086           , RT
1087           , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8)
1088         >
1089       , ClassT
1090       , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8
1091     >::type const
bind(RT (ClassT::* f)(T0,T1,T2,T3,T4,T5,T6,T7,T8),ClassT & obj,A0 const & a0,A1 const & a1,A2 const & a2,A3 const & a3,A4 const & a4,A5 const & a5,A6 const & a6,A7 const & a7,A8 const & a8)1092     bind(
1093         RT(ClassT::*f)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8)
1094       , ClassT & obj
1095       , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8
1096     )
1097     {
1098         typedef detail::member_function_ptr<
1099             9
1100           , RT
1101           , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8)
1102         > fp_type;
1103         return
1104             detail::expression::function_eval<
1105                 fp_type
1106               , ClassT
1107               , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8
1108             >::make(
1109                 fp_type(f)
1110               , obj
1111               , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8
1112             );
1113     }
1114