2 // bind/mem_fn_template.hpp
4 // Do not include this header directly
6 // Copyright (c) 2001 Peter Dimov and Multi Media Ltd.
8 // Permission to copy, use, modify, sell and distribute this software
9 // is granted provided this copyright notice appears in all copies.
10 // This software is provided "as is" without express or implied
11 // warranty, and with no claim as to its suitability for any purpose.
13 // See http://www.boost.org/libs/bind/mem_fn.html for documentation.
18 template<class R, class T BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(mf0)
22 typedef R result_type;
23 typedef T * argument_type;
27 BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) ())
30 template<class U> R call(U & u, T const *) const
32 BOOST_MEM_FN_RETURN (u.*f_)();
35 template<class U> R call(U & u, void const *) const
37 BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)();
42 explicit BOOST_MEM_FN_NAME(mf0)(F f): f_(f) {}
44 R operator()(T * p) const
46 BOOST_MEM_FN_RETURN (p->*f_)();
49 template<class U> R operator()(U & u) const
51 BOOST_MEM_FN_RETURN call(u, &u);
54 R operator()(T & t) const
56 BOOST_MEM_FN_RETURN (t.*f_)();
62 template<class R, class T BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(cmf0)
66 typedef R result_type;
67 typedef T const * argument_type;
71 BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) () const)
74 template<class U> R call(U & u, T const *) const
76 BOOST_MEM_FN_RETURN (u.*f_)();
79 template<class U> R call(U & u, void const *) const
81 BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)();
86 explicit BOOST_MEM_FN_NAME(cmf0)(F f): f_(f) {}
88 template<class U> R operator()(U const & u) const
90 BOOST_MEM_FN_RETURN call(u, &u);
93 R operator()(T const & t) const
95 BOOST_MEM_FN_RETURN (t.*f_)();
101 template<class R, class T, class A1 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(mf1)
105 typedef R result_type;
106 typedef T * first_argument_type;
107 typedef A1 second_argument_type;
111 BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1))
114 template<class U, class B1> R call(U & u, T const *, B1 & b1) const
116 BOOST_MEM_FN_RETURN (u.*f_)(b1);
119 template<class U, class B1> R call(U & u, void const *, B1 & b1) const
121 BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1);
126 explicit BOOST_MEM_FN_NAME(mf1)(F f): f_(f) {}
128 R operator()(T * p, A1 a1) const
130 BOOST_MEM_FN_RETURN (p->*f_)(a1);
133 template<class U> R operator()(U & u, A1 a1) const
135 BOOST_MEM_FN_RETURN call(u, &u, a1);
138 R operator()(T & t, A1 a1) const
140 BOOST_MEM_FN_RETURN (t.*f_)(a1);
146 template<class R, class T, class A1 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(cmf1)
150 typedef R result_type;
151 typedef T const * first_argument_type;
152 typedef A1 second_argument_type;
156 BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1) const)
159 template<class U, class B1> R call(U & u, T const *, B1 & b1) const
161 BOOST_MEM_FN_RETURN (u.*f_)(b1);
164 template<class U, class B1> R call(U & u, void const *, B1 & b1) const
166 BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1);
171 explicit BOOST_MEM_FN_NAME(cmf1)(F f): f_(f) {}
173 template<class U> R operator()(U const & u, A1 a1) const
175 BOOST_MEM_FN_RETURN call(u, &u, a1);
178 R operator()(T const & t, A1 a1) const
180 BOOST_MEM_FN_RETURN (t.*f_)(a1);
186 template<class R, class T, class A1, class A2 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(mf2)
190 typedef R result_type;
194 BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2))
197 template<class U, class B1, class B2> R call(U & u, T const *, B1 & b1, B2 & b2) const
199 BOOST_MEM_FN_RETURN (u.*f_)(b1, b2);
202 template<class U, class B1, class B2> R call(U & u, void const *, B1 & b1, B2 & b2) const
204 BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2);
209 explicit BOOST_MEM_FN_NAME(mf2)(F f): f_(f) {}
211 R operator()(T * p, A1 a1, A2 a2) const
213 BOOST_MEM_FN_RETURN (p->*f_)(a1, a2);
216 template<class U> R operator()(U & u, A1 a1, A2 a2) const
218 BOOST_MEM_FN_RETURN call(u, &u, a1, a2);
221 R operator()(T & t, A1 a1, A2 a2) const
223 BOOST_MEM_FN_RETURN (t.*f_)(a1, a2);
229 template<class R, class T, class A1, class A2 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(cmf2)
233 typedef R result_type;
237 BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2) const)
240 template<class U, class B1, class B2> R call(U & u, T const *, B1 & b1, B2 & b2) const
242 BOOST_MEM_FN_RETURN (u.*f_)(b1, b2);
245 template<class U, class B1, class B2> R call(U & u, void const *, B1 & b1, B2 & b2) const
247 BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2);
252 explicit BOOST_MEM_FN_NAME(cmf2)(F f): f_(f) {}
254 template<class U> R operator()(U const & u, A1 a1, A2 a2) const
256 BOOST_MEM_FN_RETURN call(u, &u, a1, a2);
259 R operator()(T const & t, A1 a1, A2 a2) const
261 BOOST_MEM_FN_RETURN (t.*f_)(a1, a2);
267 template<class R, class T, class A1, class A2, class A3 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(mf3)
271 typedef R result_type;
275 BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3))
278 template<class U, class B1, class B2, class B3> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3) const
280 BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3);
283 template<class U, class B1, class B2, class B3> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3) const
285 BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3);
290 explicit BOOST_MEM_FN_NAME(mf3)(F f): f_(f) {}
292 R operator()(T * p, A1 a1, A2 a2, A3 a3) const
294 BOOST_MEM_FN_RETURN (p->*f_)(a1, a2, a3);
297 template<class U> R operator()(U & u, A1 a1, A2 a2, A3 a3) const
299 BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3);
302 R operator()(T & t, A1 a1, A2 a2, A3 a3) const
304 BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3);
310 template<class R, class T, class A1, class A2, class A3 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(cmf3)
314 typedef R result_type;
318 BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3) const)
321 template<class U, class B1, class B2, class B3> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3) const
323 BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3);
326 template<class U, class B1, class B2, class B3> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3) const
328 BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3);
333 explicit BOOST_MEM_FN_NAME(cmf3)(F f): f_(f) {}
335 template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3) const
337 BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3);
340 R operator()(T const & t, A1 a1, A2 a2, A3 a3) const
342 BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3);
348 template<class R, class T, class A1, class A2, class A3, class A4 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(mf4)
352 typedef R result_type;
356 BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4))
359 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
361 BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4);
364 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
366 BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4);
371 explicit BOOST_MEM_FN_NAME(mf4)(F f): f_(f) {}
373 R operator()(T * p, A1 a1, A2 a2, A3 a3, A4 a4) const
375 BOOST_MEM_FN_RETURN (p->*f_)(a1, a2, a3, a4);
378 template<class U> R operator()(U & u, A1 a1, A2 a2, A3 a3, A4 a4) const
380 BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3, a4);
383 R operator()(T & t, A1 a1, A2 a2, A3 a3, A4 a4) const
385 BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4);
391 template<class R, class T, class A1, class A2, class A3, class A4 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(cmf4)
395 typedef R result_type;
399 BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4) const)
402 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
404 BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4);
407 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
409 BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4);
414 explicit BOOST_MEM_FN_NAME(cmf4)(F f): f_(f) {}
416 template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4) const
418 BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3, a4);
421 R operator()(T const & t, A1 a1, A2 a2, A3 a3, A4 a4) const
423 BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4);
429 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)
433 typedef R result_type;
437 BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5))
440 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
442 BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4, b5);
445 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
447 BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4, b5);
452 explicit BOOST_MEM_FN_NAME(mf5)(F f): f_(f) {}
454 R operator()(T * p, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) const
456 BOOST_MEM_FN_RETURN (p->*f_)(a1, a2, a3, a4, a5);
459 template<class U> R operator()(U & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) const
461 BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3, a4, a5);
464 R operator()(T & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) const
466 BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4, a5);
472 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)
476 typedef R result_type;
480 BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5) const)
483 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
485 BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4, b5);
488 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
490 BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4, b5);
495 explicit BOOST_MEM_FN_NAME(cmf5)(F f): f_(f) {}
497 template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) const
499 BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3, a4, a5);
502 R operator()(T const & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) const
504 BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4, a5);
510 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)
514 typedef R result_type;
518 BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6))
521 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
523 BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4, b5, b6);
526 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
528 BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4, b5, b6);
533 explicit BOOST_MEM_FN_NAME(mf6)(F f): f_(f) {}
535 R operator()(T * p, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) const
537 BOOST_MEM_FN_RETURN (p->*f_)(a1, a2, a3, a4, a5, a6);
540 template<class U> R operator()(U & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) const
542 BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3, a4, a5, a6);
545 R operator()(T & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) const
547 BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4, a5, a6);
553 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)
557 typedef R result_type;
561 BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6) const)
564 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
566 BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4, b5, b6);
569 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
571 BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4, b5, b6);
576 explicit BOOST_MEM_FN_NAME(cmf6)(F f): f_(f) {}
578 template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) const
580 BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3, a4, a5, a6);
583 R operator()(T const & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) const
585 BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4, a5, a6);
591 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)
595 typedef R result_type;
599 BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6, A7))
602 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
604 BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4, b5, b6, b7);
607 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
609 BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4, b5, b6, b7);
614 explicit BOOST_MEM_FN_NAME(mf7)(F f): f_(f) {}
616 R operator()(T * p, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) const
618 BOOST_MEM_FN_RETURN (p->*f_)(a1, a2, a3, a4, a5, a6, a7);
621 template<class U> R operator()(U & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) const
623 BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3, a4, a5, a6, a7);
626 R operator()(T & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) const
628 BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4, a5, a6, a7);
634 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)
638 typedef R result_type;
642 BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6, A7) const)
645 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
647 BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4, b5, b6, b7);
650 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
652 BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4, b5, b6, b7);
657 explicit BOOST_MEM_FN_NAME(cmf7)(F f): f_(f) {}
659 template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) const
661 BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3, a4, a5, a6, a7);
664 R operator()(T const & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) const
666 BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4, a5, a6, a7);
672 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)
676 typedef R result_type;
680 BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6, A7, A8))
683 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
685 BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4, b5, b6, b7, b8);
688 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
690 BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4, b5, b6, b7, b8);
695 explicit BOOST_MEM_FN_NAME(mf8)(F f): f_(f) {}
697 R operator()(T * p, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) const
699 BOOST_MEM_FN_RETURN (p->*f_)(a1, a2, a3, a4, a5, a6, a7, a8);
702 template<class U> R operator()(U & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) const
704 BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3, a4, a5, a6, a7, a8);
707 R operator()(T & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) const
709 BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4, a5, a6, a7, a8);
715 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)
719 typedef R result_type;
723 BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6, A7, A8) const)
726 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
728 BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4, b5, b6, b7, b8);
731 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
733 BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4, b5, b6, b7, b8);
738 explicit BOOST_MEM_FN_NAME(cmf8)(F f): f_(f) {}
740 R operator()(T const * p, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) const
742 BOOST_MEM_FN_RETURN (p->*f_)(a1, a2, a3, a4, a5, a6, a7, a8);
745 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
747 BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3, a4, a5, a6, a7, a8);
750 R operator()(T const & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) const
752 BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4, a5, a6, a7, a8);