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