epoc32/include/stdapis/boost/bind/mem_fn_template.hpp
author William Roberts <williamr@symbian.org>
Tue, 16 Mar 2010 16:12:26 +0000
branchSymbian2
changeset 2 2fe1408b6811
permissions -rw-r--r--
Final list of Symbian^2 public API header files
     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