fix doc example typo
[boost.git] / boost / bind / mem_fn_template.hpp
blob1db0713b772fbf9104b027f5eae9271b72c4831b
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)
12 // See http://www.boost.org/libs/bind/mem_fn.html for documentation.
15 #if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING)
16 # define BOOST_MEM_FN_ENABLE_CONST_OVERLOADS
17 #endif
19 // mf0
21 template<class R, class T BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(mf0)
23 public:
25 typedef R result_type;
26 typedef T * argument_type;
28 private:
30 BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) ())
31 F f_;
33 template<class U> R call(U & u, T const *) const
35 BOOST_MEM_FN_RETURN (u.*f_)();
38 template<class U> R call(U & u, void const *) const
40 BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)();
43 public:
45 explicit BOOST_MEM_FN_NAME(mf0)(F f): f_(f) {}
47 R operator()(T * p) const
49 BOOST_MEM_FN_RETURN (p->*f_)();
52 template<class U> R operator()(U & u) const
54 BOOST_MEM_FN_RETURN call(u, &u);
57 #ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS
59 template<class U> R operator()(U const & u) const
61 BOOST_MEM_FN_RETURN call(u, &u);
64 #endif
66 R operator()(T & t) const
68 BOOST_MEM_FN_RETURN (t.*f_)();
71 bool operator==(BOOST_MEM_FN_NAME(mf0) const & rhs) const
73 return f_ == rhs.f_;
76 bool operator!=(BOOST_MEM_FN_NAME(mf0) const & rhs) const
78 return f_ != rhs.f_;
82 // cmf0
84 template<class R, class T BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(cmf0)
86 public:
88 typedef R result_type;
89 typedef T const * argument_type;
91 private:
93 BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) () const)
94 F f_;
96 template<class U> R call(U & u, T const *) const
98 BOOST_MEM_FN_RETURN (u.*f_)();
101 template<class U> R call(U & u, void const *) const
103 BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)();
106 public:
108 explicit BOOST_MEM_FN_NAME(cmf0)(F f): f_(f) {}
110 template<class U> R operator()(U const & u) const
112 BOOST_MEM_FN_RETURN call(u, &u);
115 R operator()(T const & t) const
117 BOOST_MEM_FN_RETURN (t.*f_)();
120 bool operator==(BOOST_MEM_FN_NAME(cmf0) const & rhs) const
122 return f_ == rhs.f_;
125 bool operator!=(BOOST_MEM_FN_NAME(cmf0) const & rhs) const
127 return f_ != rhs.f_;
131 // mf1
133 template<class R, class T, class A1 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(mf1)
135 public:
137 typedef R result_type;
138 typedef T * first_argument_type;
139 typedef A1 second_argument_type;
141 private:
143 BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1))
144 F f_;
146 template<class U, class B1> R call(U & u, T const *, B1 & b1) const
148 BOOST_MEM_FN_RETURN (u.*f_)(b1);
151 template<class U, class B1> R call(U & u, void const *, B1 & b1) const
153 BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1);
156 public:
158 explicit BOOST_MEM_FN_NAME(mf1)(F f): f_(f) {}
160 R operator()(T * p, A1 a1) const
162 BOOST_MEM_FN_RETURN (p->*f_)(a1);
165 template<class U> R operator()(U & u, A1 a1) const
167 BOOST_MEM_FN_RETURN call(u, &u, a1);
170 #ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS
172 template<class U> R operator()(U const & u, A1 a1) const
174 BOOST_MEM_FN_RETURN call(u, &u, a1);
177 #endif
179 R operator()(T & t, A1 a1) const
181 BOOST_MEM_FN_RETURN (t.*f_)(a1);
184 bool operator==(BOOST_MEM_FN_NAME(mf1) const & rhs) const
186 return f_ == rhs.f_;
189 bool operator!=(BOOST_MEM_FN_NAME(mf1) const & rhs) const
191 return f_ != rhs.f_;
195 // cmf1
197 template<class R, class T, class A1 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(cmf1)
199 public:
201 typedef R result_type;
202 typedef T const * first_argument_type;
203 typedef A1 second_argument_type;
205 private:
207 BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1) const)
208 F f_;
210 template<class U, class B1> R call(U & u, T const *, B1 & b1) const
212 BOOST_MEM_FN_RETURN (u.*f_)(b1);
215 template<class U, class B1> R call(U & u, void const *, B1 & b1) const
217 BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1);
220 public:
222 explicit BOOST_MEM_FN_NAME(cmf1)(F f): f_(f) {}
224 template<class U> R operator()(U const & u, A1 a1) const
226 BOOST_MEM_FN_RETURN call(u, &u, a1);
229 R operator()(T const & t, A1 a1) const
231 BOOST_MEM_FN_RETURN (t.*f_)(a1);
234 bool operator==(BOOST_MEM_FN_NAME(cmf1) const & rhs) const
236 return f_ == rhs.f_;
239 bool operator!=(BOOST_MEM_FN_NAME(cmf1) const & rhs) const
241 return f_ != rhs.f_;
245 // mf2
247 template<class R, class T, class A1, class A2 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(mf2)
249 public:
251 typedef R result_type;
253 private:
255 BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2))
256 F f_;
258 template<class U, class B1, class B2> R call(U & u, T const *, B1 & b1, B2 & b2) const
260 BOOST_MEM_FN_RETURN (u.*f_)(b1, b2);
263 template<class U, class B1, class B2> R call(U & u, void const *, B1 & b1, B2 & b2) const
265 BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2);
268 public:
270 explicit BOOST_MEM_FN_NAME(mf2)(F f): f_(f) {}
272 R operator()(T * p, A1 a1, A2 a2) const
274 BOOST_MEM_FN_RETURN (p->*f_)(a1, a2);
277 template<class U> R operator()(U & u, A1 a1, A2 a2) const
279 BOOST_MEM_FN_RETURN call(u, &u, a1, a2);
282 #ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS
284 template<class U> R operator()(U const & u, A1 a1, A2 a2) const
286 BOOST_MEM_FN_RETURN call(u, &u, a1, a2);
289 #endif
291 R operator()(T & t, A1 a1, A2 a2) const
293 BOOST_MEM_FN_RETURN (t.*f_)(a1, a2);
296 bool operator==(BOOST_MEM_FN_NAME(mf2) const & rhs) const
298 return f_ == rhs.f_;
301 bool operator!=(BOOST_MEM_FN_NAME(mf2) const & rhs) const
303 return f_ != rhs.f_;
307 // cmf2
309 template<class R, class T, class A1, class A2 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(cmf2)
311 public:
313 typedef R result_type;
315 private:
317 BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2) const)
318 F f_;
320 template<class U, class B1, class B2> R call(U & u, T const *, B1 & b1, B2 & b2) const
322 BOOST_MEM_FN_RETURN (u.*f_)(b1, b2);
325 template<class U, class B1, class B2> R call(U & u, void const *, B1 & b1, B2 & b2) const
327 BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2);
330 public:
332 explicit BOOST_MEM_FN_NAME(cmf2)(F f): f_(f) {}
334 template<class U> R operator()(U const & u, A1 a1, A2 a2) const
336 BOOST_MEM_FN_RETURN call(u, &u, a1, a2);
339 R operator()(T const & t, A1 a1, A2 a2) const
341 BOOST_MEM_FN_RETURN (t.*f_)(a1, a2);
344 bool operator==(BOOST_MEM_FN_NAME(cmf2) const & rhs) const
346 return f_ == rhs.f_;
349 bool operator!=(BOOST_MEM_FN_NAME(cmf2) const & rhs) const
351 return f_ != rhs.f_;
355 // mf3
357 template<class R, class T, class A1, class A2, class A3 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(mf3)
359 public:
361 typedef R result_type;
363 private:
365 BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3))
366 F f_;
368 template<class U, class B1, class B2, class B3> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3) const
370 BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3);
373 template<class U, class B1, class B2, class B3> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3) const
375 BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3);
378 public:
380 explicit BOOST_MEM_FN_NAME(mf3)(F f): f_(f) {}
382 R operator()(T * p, A1 a1, A2 a2, A3 a3) const
384 BOOST_MEM_FN_RETURN (p->*f_)(a1, a2, a3);
387 template<class U> R operator()(U & u, A1 a1, A2 a2, A3 a3) const
389 BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3);
392 #ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS
394 template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3) const
396 BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3);
399 #endif
401 R operator()(T & t, A1 a1, A2 a2, A3 a3) const
403 BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3);
406 bool operator==(BOOST_MEM_FN_NAME(mf3) const & rhs) const
408 return f_ == rhs.f_;
411 bool operator!=(BOOST_MEM_FN_NAME(mf3) const & rhs) const
413 return f_ != rhs.f_;
417 // cmf3
419 template<class R, class T, class A1, class A2, class A3 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(cmf3)
421 public:
423 typedef R result_type;
425 private:
427 BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3) const)
428 F f_;
430 template<class U, class B1, class B2, class B3> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3) const
432 BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3);
435 template<class U, class B1, class B2, class B3> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3) const
437 BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3);
440 public:
442 explicit BOOST_MEM_FN_NAME(cmf3)(F f): f_(f) {}
444 template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3) const
446 BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3);
449 R operator()(T const & t, A1 a1, A2 a2, A3 a3) const
451 BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3);
454 bool operator==(BOOST_MEM_FN_NAME(cmf3) const & rhs) const
456 return f_ == rhs.f_;
459 bool operator!=(BOOST_MEM_FN_NAME(cmf3) const & rhs) const
461 return f_ != rhs.f_;
465 // mf4
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)
469 public:
471 typedef R result_type;
473 private:
475 BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4))
476 F f_;
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
480 BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4);
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
485 BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4);
488 public:
490 explicit BOOST_MEM_FN_NAME(mf4)(F f): f_(f) {}
492 R operator()(T * p, A1 a1, A2 a2, A3 a3, A4 a4) const
494 BOOST_MEM_FN_RETURN (p->*f_)(a1, a2, a3, a4);
497 template<class U> R operator()(U & u, A1 a1, A2 a2, A3 a3, A4 a4) const
499 BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3, a4);
502 #ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS
504 template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4) const
506 BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3, a4);
509 #endif
511 R operator()(T & t, A1 a1, A2 a2, A3 a3, A4 a4) const
513 BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4);
516 bool operator==(BOOST_MEM_FN_NAME(mf4) const & rhs) const
518 return f_ == rhs.f_;
521 bool operator!=(BOOST_MEM_FN_NAME(mf4) const & rhs) const
523 return f_ != rhs.f_;
527 // cmf4
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)
531 public:
533 typedef R result_type;
535 private:
537 BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4) const)
538 F f_;
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
542 BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4);
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
547 BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4);
550 public:
552 explicit BOOST_MEM_FN_NAME(cmf4)(F f): f_(f) {}
554 template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4) const
556 BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3, a4);
559 R operator()(T const & t, A1 a1, A2 a2, A3 a3, A4 a4) const
561 BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4);
564 bool operator==(BOOST_MEM_FN_NAME(cmf4) const & rhs) const
566 return f_ == rhs.f_;
569 bool operator!=(BOOST_MEM_FN_NAME(cmf4) const & rhs) const
571 return f_ != rhs.f_;
575 // mf5
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)
579 public:
581 typedef R result_type;
583 private:
585 BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5))
586 F f_;
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
590 BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4, b5);
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
595 BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4, b5);
598 public:
600 explicit BOOST_MEM_FN_NAME(mf5)(F f): f_(f) {}
602 R operator()(T * p, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) const
604 BOOST_MEM_FN_RETURN (p->*f_)(a1, a2, a3, a4, a5);
607 template<class U> R operator()(U & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) const
609 BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3, a4, a5);
612 #ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS
614 template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) const
616 BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3, a4, a5);
619 #endif
621 R operator()(T & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) const
623 BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4, a5);
626 bool operator==(BOOST_MEM_FN_NAME(mf5) const & rhs) const
628 return f_ == rhs.f_;
631 bool operator!=(BOOST_MEM_FN_NAME(mf5) const & rhs) const
633 return f_ != rhs.f_;
637 // cmf5
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)
641 public:
643 typedef R result_type;
645 private:
647 BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5) const)
648 F f_;
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
652 BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4, b5);
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
657 BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4, b5);
660 public:
662 explicit BOOST_MEM_FN_NAME(cmf5)(F f): f_(f) {}
664 template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) const
666 BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3, a4, a5);
669 R operator()(T const & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) const
671 BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4, a5);
674 bool operator==(BOOST_MEM_FN_NAME(cmf5) const & rhs) const
676 return f_ == rhs.f_;
679 bool operator!=(BOOST_MEM_FN_NAME(cmf5) const & rhs) const
681 return f_ != rhs.f_;
685 // mf6
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)
689 public:
691 typedef R result_type;
693 private:
695 BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6))
696 F f_;
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
700 BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4, b5, b6);
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
705 BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4, b5, b6);
708 public:
710 explicit BOOST_MEM_FN_NAME(mf6)(F f): f_(f) {}
712 R operator()(T * p, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) const
714 BOOST_MEM_FN_RETURN (p->*f_)(a1, a2, a3, a4, a5, a6);
717 template<class U> R operator()(U & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) const
719 BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3, a4, a5, a6);
722 #ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS
724 template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) const
726 BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3, a4, a5, a6);
729 #endif
731 R operator()(T & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) const
733 BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4, a5, a6);
736 bool operator==(BOOST_MEM_FN_NAME(mf6) const & rhs) const
738 return f_ == rhs.f_;
741 bool operator!=(BOOST_MEM_FN_NAME(mf6) const & rhs) const
743 return f_ != rhs.f_;
747 // cmf6
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)
751 public:
753 typedef R result_type;
755 private:
757 BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6) const)
758 F f_;
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
762 BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4, b5, b6);
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
767 BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4, b5, b6);
770 public:
772 explicit BOOST_MEM_FN_NAME(cmf6)(F f): f_(f) {}
774 template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) const
776 BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3, a4, a5, a6);
779 R operator()(T const & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) const
781 BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4, a5, a6);
784 bool operator==(BOOST_MEM_FN_NAME(cmf6) const & rhs) const
786 return f_ == rhs.f_;
789 bool operator!=(BOOST_MEM_FN_NAME(cmf6) const & rhs) const
791 return f_ != rhs.f_;
795 // mf7
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)
799 public:
801 typedef R result_type;
803 private:
805 BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6, A7))
806 F f_;
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
810 BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4, b5, b6, b7);
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
815 BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4, b5, b6, b7);
818 public:
820 explicit BOOST_MEM_FN_NAME(mf7)(F f): f_(f) {}
822 R operator()(T * p, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) const
824 BOOST_MEM_FN_RETURN (p->*f_)(a1, a2, a3, a4, a5, a6, a7);
827 template<class U> R operator()(U & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) const
829 BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3, a4, a5, a6, a7);
832 #ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS
834 template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) const
836 BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3, a4, a5, a6, a7);
839 #endif
841 R operator()(T & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) const
843 BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4, a5, a6, a7);
846 bool operator==(BOOST_MEM_FN_NAME(mf7) const & rhs) const
848 return f_ == rhs.f_;
851 bool operator!=(BOOST_MEM_FN_NAME(mf7) const & rhs) const
853 return f_ != rhs.f_;
857 // cmf7
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)
861 public:
863 typedef R result_type;
865 private:
867 BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6, A7) const)
868 F f_;
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
872 BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4, b5, b6, b7);
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
877 BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4, b5, b6, b7);
880 public:
882 explicit BOOST_MEM_FN_NAME(cmf7)(F f): f_(f) {}
884 template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) const
886 BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3, a4, a5, a6, a7);
889 R operator()(T const & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) const
891 BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4, a5, a6, a7);
894 bool operator==(BOOST_MEM_FN_NAME(cmf7) const & rhs) const
896 return f_ == rhs.f_;
899 bool operator!=(BOOST_MEM_FN_NAME(cmf7) const & rhs) const
901 return f_ != rhs.f_;
905 // mf8
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)
909 public:
911 typedef R result_type;
913 private:
915 BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6, A7, A8))
916 F f_;
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
920 BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4, b5, b6, b7, b8);
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
925 BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4, b5, b6, b7, b8);
928 public:
930 explicit BOOST_MEM_FN_NAME(mf8)(F f): f_(f) {}
932 R operator()(T * p, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) const
934 BOOST_MEM_FN_RETURN (p->*f_)(a1, a2, a3, a4, a5, a6, a7, a8);
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
939 BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3, a4, a5, a6, a7, a8);
942 #ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS
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
946 BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3, a4, a5, a6, a7, a8);
949 #endif
951 R operator()(T & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) const
953 BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4, a5, a6, a7, a8);
956 bool operator==(BOOST_MEM_FN_NAME(mf8) const & rhs) const
958 return f_ == rhs.f_;
961 bool operator!=(BOOST_MEM_FN_NAME(mf8) const & rhs) const
963 return f_ != rhs.f_;
967 // cmf8
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)
971 public:
973 typedef R result_type;
975 private:
977 BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6, A7, A8) const)
978 F f_;
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
982 BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4, b5, b6, b7, b8);
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
987 BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4, b5, b6, b7, b8);
990 public:
992 explicit BOOST_MEM_FN_NAME(cmf8)(F f): f_(f) {}
994 R operator()(T const * p, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) const
996 BOOST_MEM_FN_RETURN (p->*f_)(a1, a2, a3, a4, a5, a6, a7, a8);
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
1001 BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3, a4, a5, a6, a7, a8);
1004 R operator()(T const & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) const
1006 BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4, a5, a6, a7, a8);
1009 bool operator==(BOOST_MEM_FN_NAME(cmf8) const & rhs) const
1011 return f_ == rhs.f_;
1014 bool operator!=(BOOST_MEM_FN_NAME(cmf8) const & rhs) const
1016 return f_ != rhs.f_;
1020 #undef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS