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