epoc32/include/stdapis/stlportv5/stl/_function_adaptors.h
author William Roberts <williamr@symbian.org>
Wed, 31 Mar 2010 12:33:34 +0100
branchSymbian3
changeset 4 837f303aceeb
parent 3 e1b950c65cb4
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
 *
williamr@2
     3
 * Copyright (c) 1994
williamr@2
     4
 * Hewlett-Packard Company
williamr@2
     5
 *
williamr@2
     6
 * Copyright (c) 1996-1998
williamr@2
     7
 * Silicon Graphics Computer Systems, Inc.
williamr@2
     8
 *
williamr@2
     9
 * Copyright (c) 1997
williamr@2
    10
 * Moscow Center for SPARC Technology
williamr@2
    11
 *
williamr@4
    12
 * Copyright (c) 1999
williamr@2
    13
 * Boris Fomitchev
williamr@2
    14
 *
williamr@2
    15
 * Copyright (c) 2000
williamr@2
    16
 * Pavel Kuznetsov
williamr@2
    17
 *
williamr@2
    18
 * Copyright (c) 2001
williamr@2
    19
 * Meridian'93
williamr@2
    20
 *
williamr@2
    21
 * This material is provided "as is", with absolutely no warranty expressed
williamr@2
    22
 * or implied. Any use is at your own risk.
williamr@2
    23
 *
williamr@4
    24
 * Permission to use or copy this software for any purpose is hereby granted
williamr@2
    25
 * without fee, provided the above notices are retained on all copies.
williamr@2
    26
 * Permission to modify the code and to distribute modified code is granted,
williamr@2
    27
 * provided the above notices are retained, and a notice that the code was
williamr@2
    28
 * modified is included with the above copyright notice.
williamr@2
    29
 *
williamr@2
    30
 */
williamr@2
    31
williamr@2
    32
/* NOTE: This is an internal header file, included by other STL headers.
williamr@2
    33
 *   You should not attempt to use it directly.
williamr@2
    34
 */
williamr@2
    35
williamr@2
    36
// This file has noo macro protection as it is meant to be included several times
williamr@2
    37
// from other header.
williamr@2
    38
// Adaptor function objects: pointers to member functions.
williamr@2
    39
williamr@2
    40
// There are a total of 16 = 2^4 function objects in this family.
williamr@2
    41
//  (1) Member functions taking no arguments vs member functions taking
williamr@2
    42
//       one argument.
williamr@2
    43
//  (2) Call through pointer vs call through reference.
williamr@2
    44
//  (3) Member function with void return type vs member function with
williamr@2
    45
//      non-void return type.
williamr@2
    46
//  (4) Const vs non-const member function.
williamr@2
    47
williamr@2
    48
// Note that choice (3) is nothing more than a workaround: according
williamr@2
    49
//  to the draft, compilers should handle void and non-void the same way.
williamr@2
    50
//  This feature is not yet widely implemented, though.  You can only use
williamr@2
    51
//  member functions returning void if your compiler supports partial
williamr@2
    52
//  specialization.
williamr@2
    53
williamr@2
    54
// All of this complexity is in the function objects themselves.  You can
williamr@2
    55
//  ignore it by using the helper function mem_fun and mem_fun_ref,
williamr@2
    56
//  which create whichever type of adaptor is appropriate.
williamr@2
    57
williamr@2
    58
_STLP_BEGIN_NAMESPACE
williamr@2
    59
williamr@2
    60
//This implementation will only be used if needed, that is to say when there is the return void bug
williamr@2
    61
//and when there is no partial template specialization
williamr@2
    62
#if defined(_STLP_DONT_RETURN_VOID) && defined (_STLP_NO_CLASS_PARTIAL_SPECIALIZATION) && defined(_STLP_MEMBER_TEMPLATE_CLASSES)
williamr@2
    63
williamr@2
    64
template<class _Result, class _Tp>
williamr@2
    65
class _Mem_fun0_ptr : public unary_function<_Tp*, _Result> {
williamr@2
    66
protected:
williamr@2
    67
  typedef _Result (_Tp::*__fun_type) ();
williamr@2
    68
  explicit _Mem_fun0_ptr(__fun_type __f) : _M_f(__f) {}
williamr@2
    69
williamr@2
    70
public:
williamr@2
    71
  _Result operator ()(_Tp* __p) const { return (__p->*_M_f)(); }
williamr@2
    72
williamr@2
    73
private:
williamr@2
    74
  __fun_type _M_f;
williamr@2
    75
};
williamr@2
    76
williamr@2
    77
template<class _Result, class _Tp, class _Arg>
williamr@2
    78
class _Mem_fun1_ptr : public binary_function<_Tp*,_Arg,_Result> {
williamr@2
    79
protected:
williamr@2
    80
  typedef _Result (_Tp::*__fun_type) (_Arg);
williamr@2
    81
  explicit _Mem_fun1_ptr(__fun_type __f) : _M_f(__f) {}
williamr@2
    82
williamr@2
    83
public:
williamr@2
    84
  _Result operator ()(_Tp* __p, _Arg __x) const { return (__p->*_M_f)(__x); }
williamr@2
    85
williamr@2
    86
private:
williamr@2
    87
  __fun_type _M_f;
williamr@2
    88
};
williamr@2
    89
williamr@2
    90
template<class _Result, class _Tp>
williamr@2
    91
class _Const_mem_fun0_ptr : public unary_function<const _Tp*,_Result> {
williamr@2
    92
protected:
williamr@2
    93
  typedef _Result (_Tp::*__fun_type) () const;
williamr@2
    94
  explicit _Const_mem_fun0_ptr(__fun_type __f) : _M_f(__f) {}
williamr@2
    95
williamr@2
    96
public:
williamr@2
    97
  _Result operator ()(const _Tp* __p) const { return (__p->*_M_f)(); }
williamr@2
    98
williamr@2
    99
private:
williamr@2
   100
  __fun_type _M_f;
williamr@2
   101
};
williamr@2
   102
williamr@2
   103
template<class _Result, class _Tp, class _Arg>
williamr@2
   104
class _Const_mem_fun1_ptr : public binary_function<const _Tp*,_Arg,_Result> {
williamr@2
   105
protected:
williamr@2
   106
  typedef _Result (_Tp::*__fun_type) (_Arg) const;
williamr@2
   107
  explicit _Const_mem_fun1_ptr(__fun_type __f) : _M_f(__f) {}
williamr@2
   108
williamr@2
   109
public:
williamr@2
   110
  _Result operator ()(const _Tp* __p, _Arg __x) const {
williamr@2
   111
    return (__p->*_M_f)(__x); }
williamr@2
   112
williamr@2
   113
private:
williamr@2
   114
  __fun_type _M_f;
williamr@2
   115
};
williamr@2
   116
williamr@2
   117
template<class _Result, class _Tp>
williamr@2
   118
class _Mem_fun0_ref : public unary_function<_Tp&,_Result> {
williamr@2
   119
protected:
williamr@2
   120
  typedef _Result (_Tp::*__fun_type) ();
williamr@2
   121
  explicit _Mem_fun0_ref(__fun_type __f) : _M_f(__f) {}
williamr@2
   122
williamr@2
   123
public:
williamr@2
   124
  _Result operator ()(_Tp& __p) const { return (__p.*_M_f)(); }
williamr@2
   125
williamr@2
   126
private:
williamr@2
   127
  __fun_type _M_f;
williamr@2
   128
};
williamr@2
   129
williamr@2
   130
template<class _Result, class _Tp, class _Arg>
williamr@2
   131
class _Mem_fun1_ref : public binary_function<_Tp&,_Arg,_Result> {
williamr@2
   132
protected:
williamr@2
   133
  typedef _Result (_Tp::*__fun_type) (_Arg);
williamr@2
   134
  explicit _Mem_fun1_ref(__fun_type __f) : _M_f(__f) {}
williamr@2
   135
williamr@2
   136
public:
williamr@2
   137
  _Result operator ()(_Tp& __p, _Arg __x) const { return (__p.*_M_f)(__x); }
williamr@2
   138
williamr@2
   139
private:
williamr@2
   140
  __fun_type _M_f;
williamr@2
   141
};
williamr@2
   142
williamr@2
   143
template<class _Result, class _Tp>
williamr@2
   144
class _Const_mem_fun0_ref : public unary_function<const _Tp&,_Result> {
williamr@2
   145
protected:
williamr@2
   146
  typedef _Result (_Tp::*__fun_type) () const;
williamr@2
   147
  explicit _Const_mem_fun0_ref(__fun_type __f) : _M_f(__f) {}
williamr@2
   148
williamr@2
   149
public:
williamr@2
   150
  _Result operator ()(const _Tp& __p) const { return (__p.*_M_f)(); }
williamr@2
   151
williamr@2
   152
private:
williamr@2
   153
  __fun_type _M_f;
williamr@2
   154
};
williamr@2
   155
williamr@2
   156
template<class _Result, class _Tp, class _Arg>
williamr@2
   157
class _Const_mem_fun1_ref : public binary_function<const _Tp&,_Arg,_Result> {
williamr@2
   158
protected:
williamr@2
   159
  typedef _Result (_Tp::*__fun_type) (_Arg) const;
williamr@2
   160
  explicit _Const_mem_fun1_ref(__fun_type __f) : _M_f(__f) {}
williamr@2
   161
williamr@2
   162
public:
williamr@2
   163
  _Result operator ()(const _Tp& __p, _Arg __x) const { return (__p.*_M_f)(__x); }
williamr@2
   164
williamr@2
   165
private:
williamr@2
   166
  __fun_type _M_f;
williamr@2
   167
};
williamr@2
   168
williamr@4
   169
template<class _Result>
williamr@2
   170
struct _Mem_fun_traits {
williamr@4
   171
  template<class _Tp>
williamr@2
   172
  struct _Args0 {
williamr@2
   173
    typedef _Mem_fun0_ptr<_Result,_Tp>            _Ptr;
williamr@2
   174
    typedef _Const_mem_fun0_ptr<_Result,_Tp>      _Ptr_const;
williamr@2
   175
    typedef _Mem_fun0_ref<_Result,_Tp>            _Ref;
williamr@2
   176
    typedef _Const_mem_fun0_ref<_Result,_Tp>      _Ref_const;
williamr@2
   177
  };
williamr@2
   178
williamr@2
   179
  template<class _Tp, class _Arg>
williamr@2
   180
  struct _Args1 {
williamr@2
   181
    typedef _Mem_fun1_ptr<_Result,_Tp,_Arg>       _Ptr;
williamr@2
   182
    typedef _Const_mem_fun1_ptr<_Result,_Tp,_Arg> _Ptr_const;
williamr@2
   183
    typedef _Mem_fun1_ref<_Result,_Tp,_Arg>       _Ref;
williamr@2
   184
    typedef _Const_mem_fun1_ref<_Result,_Tp,_Arg> _Ref_const;
williamr@2
   185
  };
williamr@2
   186
};
williamr@2
   187
williamr@2
   188
template<class _Arg, class _Result>
williamr@2
   189
class _Ptr_fun1_base : public unary_function<_Arg, _Result> {
williamr@2
   190
protected:
williamr@2
   191
  typedef _Result (*__fun_type) (_Arg);
williamr@2
   192
  explicit _Ptr_fun1_base(__fun_type __f) : _M_f(__f) {}
williamr@2
   193
williamr@2
   194
public:
williamr@2
   195
  _Result operator()(_Arg __x) const { return _M_f(__x); }
williamr@2
   196
williamr@2
   197
private:
williamr@2
   198
  __fun_type _M_f;
williamr@2
   199
};
williamr@2
   200
williamr@2
   201
template <class _Arg1, class _Arg2, class _Result>
williamr@2
   202
class _Ptr_fun2_base : public binary_function<_Arg1,_Arg2,_Result> {
williamr@2
   203
protected:
williamr@2
   204
  typedef _Result (*__fun_type) (_Arg1, _Arg2);
williamr@2
   205
  explicit _Ptr_fun2_base(__fun_type __f) : _M_f(__f) {}
williamr@2
   206
williamr@2
   207
public:
williamr@2
   208
  _Result operator()(_Arg1 __x, _Arg2 __y) const { return _M_f(__x, __y); }
williamr@2
   209
williamr@2
   210
private:
williamr@2
   211
  __fun_type _M_f;
williamr@2
   212
};
williamr@2
   213
williamr@4
   214
template<class _Result>
williamr@2
   215
struct _Ptr_fun_traits {
williamr@2
   216
  template<class _Arg> struct _Args1 {
williamr@2
   217
    typedef _Ptr_fun1_base<_Arg,_Result> _Fun;
williamr@2
   218
  };
williamr@2
   219
williamr@2
   220
  template<class _Arg1, class _Arg2> struct _Args2 {
williamr@2
   221
    typedef _Ptr_fun2_base<_Arg1,_Arg2,_Result> _Fun;
williamr@2
   222
  };
williamr@2
   223
};
williamr@2
   224
williamr@2
   225
/*Specialization for void return type
williamr@2
   226
*/
williamr@2
   227
template<class _Tp>
williamr@2
   228
class _Void_mem_fun0_ptr : public unary_function<_Tp*,void> {
williamr@2
   229
protected:
williamr@2
   230
  typedef void (_Tp::*__fun_type) ();
williamr@2
   231
  explicit _Void_mem_fun0_ptr(__fun_type __f) : _M_f(__f) {}
williamr@2
   232
williamr@2
   233
public:
williamr@2
   234
  void operator ()(_Tp* __p) const { (__p->*_M_f)(); }
williamr@2
   235
williamr@2
   236
private:
williamr@2
   237
  __fun_type _M_f;
williamr@2
   238
};
williamr@2
   239
williamr@2
   240
template<class _Tp, class _Arg>
williamr@2
   241
class _Void_mem_fun1_ptr : public binary_function<_Tp*,_Arg,void> {
williamr@2
   242
protected:
williamr@2
   243
  typedef void (_Tp::*__fun_type) (_Arg);
williamr@2
   244
  explicit _Void_mem_fun1_ptr(__fun_type __f) : _M_f(__f) {}
williamr@2
   245
williamr@2
   246
public:
williamr@2
   247
  void operator ()(_Tp* __p, _Arg __x) const { (__p->*_M_f)(__x); }
williamr@2
   248
williamr@2
   249
private:
williamr@2
   250
  __fun_type _M_f;
williamr@2
   251
};
williamr@2
   252
williamr@2
   253
template<class _Tp>
williamr@2
   254
class _Void_const_mem_fun0_ptr : public unary_function<const _Tp*,void> {
williamr@2
   255
protected:
williamr@2
   256
  typedef void (_Tp::*__fun_type) () const;
williamr@2
   257
  explicit _Void_const_mem_fun0_ptr(__fun_type __f) : _M_f(__f) {}
williamr@2
   258
williamr@2
   259
public:
williamr@2
   260
  void operator ()(const _Tp* __p) const { (__p->*_M_f)(); }
williamr@2
   261
williamr@2
   262
private:
williamr@2
   263
  __fun_type _M_f;
williamr@2
   264
};
williamr@2
   265
williamr@2
   266
template<class _Tp, class _Arg>
williamr@2
   267
class _Void_const_mem_fun1_ptr : public binary_function<const _Tp*,_Arg,void> {
williamr@2
   268
protected:
williamr@2
   269
  typedef void (_Tp::*__fun_type) (_Arg) const;
williamr@2
   270
  explicit _Void_const_mem_fun1_ptr(__fun_type __f) : _M_f(__f) {}
williamr@2
   271
williamr@2
   272
public:
williamr@2
   273
  void operator ()(const _Tp* __p, _Arg __x) const { (__p->*_M_f)(__x); }
williamr@2
   274
williamr@2
   275
private:
williamr@2
   276
  __fun_type _M_f;
williamr@2
   277
};
williamr@2
   278
williamr@2
   279
template<class _Tp>
williamr@2
   280
class _Void_mem_fun0_ref : public unary_function<_Tp&,void> {
williamr@2
   281
protected:
williamr@2
   282
  typedef void (_Tp::*__fun_type) ();
williamr@2
   283
  explicit _Void_mem_fun0_ref(__fun_type __f) : _M_f(__f) {}
williamr@2
   284
williamr@2
   285
public:
williamr@2
   286
  void operator ()(_Tp& __p) const { (__p.*_M_f)(); }
williamr@2
   287
williamr@2
   288
private:
williamr@2
   289
  __fun_type _M_f;
williamr@2
   290
};
williamr@2
   291
williamr@2
   292
template<class _Tp, class _Arg>
williamr@2
   293
class _Void_mem_fun1_ref : public binary_function<_Tp&,_Arg,void> {
williamr@2
   294
protected:
williamr@2
   295
  typedef void (_Tp::*__fun_type) (_Arg);
williamr@2
   296
  explicit _Void_mem_fun1_ref(__fun_type __f) : _M_f(__f) {}
williamr@2
   297
williamr@2
   298
public:
williamr@2
   299
  void operator ()(_Tp& __p, _Arg __x) const { (__p.*_M_f)(__x); }
williamr@2
   300
williamr@2
   301
private:
williamr@2
   302
  __fun_type _M_f;
williamr@2
   303
};
williamr@2
   304
williamr@2
   305
template<class _Tp>
williamr@2
   306
class _Void_const_mem_fun0_ref : public unary_function<const _Tp&,void> {
williamr@2
   307
protected:
williamr@2
   308
  typedef void (_Tp::*__fun_type) () const;
williamr@2
   309
  explicit _Void_const_mem_fun0_ref(__fun_type __f) : _M_f(__f) {}
williamr@2
   310
williamr@2
   311
public:
williamr@2
   312
  void operator ()(const _Tp& __p) const { (__p.*_M_f)(); }
williamr@2
   313
williamr@2
   314
private:
williamr@2
   315
  __fun_type _M_f;
williamr@2
   316
};
williamr@2
   317
williamr@2
   318
template<class _Tp, class _Arg>
williamr@2
   319
class _Void_const_mem_fun1_ref : public binary_function<const _Tp&,_Arg,void> {
williamr@2
   320
protected:
williamr@2
   321
  typedef void (_Tp::*__fun_type) (_Arg) const;
williamr@2
   322
  explicit _Void_const_mem_fun1_ref(__fun_type __f) : _M_f(__f) {}
williamr@2
   323
williamr@2
   324
public:
williamr@2
   325
  void operator ()(const _Tp& __p, _Arg __x) const { (__p.*_M_f)(__x); }
williamr@2
   326
williamr@2
   327
private:
williamr@2
   328
  __fun_type _M_f;
williamr@2
   329
};
williamr@2
   330
williamr@2
   331
_STLP_TEMPLATE_NULL
williamr@2
   332
struct _Mem_fun_traits<void> {
williamr@2
   333
  template<class _Tp> struct _Args0 {
williamr@2
   334
    typedef _Void_mem_fun0_ptr<_Tp>             _Ptr;
williamr@2
   335
    typedef _Void_const_mem_fun0_ptr<_Tp>       _Ptr_const;
williamr@2
   336
    typedef _Void_mem_fun0_ref<_Tp>             _Ref;
williamr@2
   337
    typedef _Void_const_mem_fun0_ref<_Tp>       _Ref_const;
williamr@2
   338
  };
williamr@2
   339
williamr@2
   340
  template<class _Tp, class _Arg> struct _Args1 {
williamr@2
   341
    typedef _Void_mem_fun1_ptr<_Tp,_Arg>        _Ptr;
williamr@2
   342
    typedef _Void_const_mem_fun1_ptr<_Tp,_Arg>  _Ptr_const;
williamr@2
   343
    typedef _Void_mem_fun1_ref<_Tp,_Arg>        _Ref;
williamr@2
   344
    typedef _Void_const_mem_fun1_ref<_Tp,_Arg>  _Ref_const;
williamr@2
   345
  };
williamr@2
   346
};
williamr@2
   347
williamr@2
   348
template<class _Arg>
williamr@2
   349
class _Ptr_void_fun1_base : public unary_function<_Arg, void> {
williamr@2
   350
protected:
williamr@2
   351
  typedef void (*__fun_type) (_Arg);
williamr@2
   352
  explicit _Ptr_void_fun1_base(__fun_type __f) : _M_f(__f) {}
williamr@2
   353
williamr@2
   354
public:
williamr@2
   355
  void operator()(_Arg __x) const { _M_f(__x); }
williamr@2
   356
williamr@2
   357
private:
williamr@2
   358
  __fun_type _M_f;
williamr@2
   359
};
williamr@2
   360
williamr@2
   361
template <class _Arg1, class _Arg2>
williamr@2
   362
class _Ptr_void_fun2_base : public binary_function<_Arg1,_Arg2,void> {
williamr@2
   363
protected:
williamr@2
   364
  typedef void (*__fun_type) (_Arg1, _Arg2);
williamr@2
   365
  explicit _Ptr_void_fun2_base(__fun_type __f) : _M_f(__f) {}
williamr@2
   366
williamr@2
   367
public:
williamr@2
   368
  void operator()(_Arg1 __x, _Arg2 __y) const { _M_f(__x, __y); }
williamr@2
   369
williamr@2
   370
private:
williamr@2
   371
  __fun_type _M_f;
williamr@2
   372
};
williamr@2
   373
williamr@2
   374
_STLP_TEMPLATE_NULL
williamr@2
   375
struct _Ptr_fun_traits<void> {
williamr@2
   376
  template<class _Arg> struct _Args1 {
williamr@2
   377
    typedef _Ptr_void_fun1_base<_Arg> _Fun;
williamr@2
   378
  };
williamr@4
   379
williamr@2
   380
  template<class _Arg1, class _Arg2> struct _Args2 {
williamr@2
   381
    typedef _Ptr_void_fun2_base<_Arg1,_Arg2> _Fun;
williamr@2
   382
  };
williamr@2
   383
};
williamr@2
   384
williamr@2
   385
// pavel: need extra level of inheritance here since MSVC++ does not
williamr@2
   386
// accept traits-based fake partial specialization for template
williamr@2
   387
// arguments other than first
williamr@2
   388
williamr@2
   389
template<class _Result, class _Arg>
williamr@4
   390
class _Ptr_fun1 :
williamr@2
   391
  public _Ptr_fun_traits<_Result>::_STLP_TEMPLATE _Args1<_Arg>::_Fun {
williamr@2
   392
protected:
williamr@2
   393
  typedef typename _Ptr_fun_traits<_Result>::_STLP_TEMPLATE _Args1<_Arg>::_Fun _Base;
williamr@2
   394
  explicit _Ptr_fun1(typename _Base::__fun_type __f) : _Base(__f) {}
williamr@2
   395
};
williamr@2
   396
williamr@2
   397
template<class _Result, class _Arg1, class _Arg2>
williamr@4
   398
class _Ptr_fun2 :
williamr@2
   399
  public _Ptr_fun_traits<_Result>::_STLP_TEMPLATE _Args2<_Arg1,_Arg2>::_Fun {
williamr@2
   400
protected:
williamr@2
   401
  typedef typename _Ptr_fun_traits<_Result>::_STLP_TEMPLATE _Args2<_Arg1,_Arg2>::_Fun _Base;
williamr@2
   402
  explicit _Ptr_fun2(typename _Base::__fun_type __f) : _Base(__f) {}
williamr@2
   403
};
williamr@2
   404
williamr@2
   405
williamr@2
   406
#endif /*_STLP_DONT_RETURN_VOID && _STLP_NO_CLASS_PARTIAL_SPECIALIZATION && _STLP_MEMBER_TEMPLATE_CLASSES*/
williamr@2
   407
williamr@2
   408
williamr@2
   409
#if !defined(_STLP_DONT_RETURN_VOID) || !defined(_STLP_NO_CLASS_PARTIAL_SPECIALIZATION) || !defined (_STLP_MEMBER_TEMPLATE_CLASSES)
williamr@2
   410
williamr@2
   411
template <class _Ret, class _Tp>
williamr@2
   412
class mem_fun_t : public unary_function<_Tp*,_Ret> {
williamr@2
   413
  typedef _Ret (_Tp::*__fun_type)(void);
williamr@2
   414
public:
williamr@2
   415
  explicit mem_fun_t(__fun_type __pf) : _M_f(__pf) {}
williamr@2
   416
  _Ret operator()(_Tp* __p) const { return (__p->*_M_f)(); }
williamr@2
   417
private:
williamr@2
   418
  __fun_type _M_f;
williamr@2
   419
};
williamr@2
   420
williamr@2
   421
template <class _Ret, class _Tp>
williamr@2
   422
class const_mem_fun_t : public unary_function<const _Tp*,_Ret> {
williamr@2
   423
  typedef _Ret (_Tp::*__fun_type)(void) const;
williamr@2
   424
public:
williamr@2
   425
  explicit const_mem_fun_t(__fun_type __pf) : _M_f(__pf) {}
williamr@2
   426
  _Ret operator()(const _Tp* __p) const { return (__p->*_M_f)(); }
williamr@2
   427
private:
williamr@2
   428
  __fun_type _M_f;
williamr@2
   429
};
williamr@2
   430
williamr@2
   431
williamr@2
   432
template <class _Ret, class _Tp>
williamr@2
   433
class mem_fun_ref_t : public unary_function<_Tp,_Ret> {
williamr@2
   434
  typedef _Ret (_Tp::*__fun_type)(void);
williamr@2
   435
public:
williamr@2
   436
  explicit mem_fun_ref_t(__fun_type __pf) : _M_f(__pf) {}
williamr@2
   437
  _Ret operator()(_Tp& __r) const { return (__r.*_M_f)(); }
williamr@2
   438
private:
williamr@2
   439
  __fun_type _M_f;
williamr@2
   440
};
williamr@2
   441
williamr@2
   442
template <class _Ret, class _Tp>
williamr@2
   443
class const_mem_fun_ref_t : public unary_function<_Tp,_Ret> {
williamr@2
   444
  typedef _Ret (_Tp::*__fun_type)(void) const;
williamr@2
   445
public:
williamr@2
   446
  explicit const_mem_fun_ref_t(__fun_type __pf) : _M_f(__pf) {}
williamr@2
   447
  _Ret operator()(const _Tp& __r) const { return (__r.*_M_f)(); }
williamr@2
   448
private:
williamr@2
   449
  __fun_type _M_f;
williamr@2
   450
};
williamr@2
   451
williamr@2
   452
template <class _Ret, class _Tp, class _Arg>
williamr@2
   453
class mem_fun1_t : public binary_function<_Tp*,_Arg,_Ret> {
williamr@2
   454
  typedef _Ret (_Tp::*__fun_type)(_Arg);
williamr@2
   455
public:
williamr@2
   456
  explicit mem_fun1_t(__fun_type __pf) : _M_f(__pf) {}
williamr@2
   457
  _Ret operator()(_Tp* __p, _Arg __x) const { return (__p->*_M_f)(__x); }
williamr@2
   458
private:
williamr@2
   459
  __fun_type _M_f;
williamr@2
   460
};
williamr@2
   461
williamr@2
   462
template <class _Ret, class _Tp, class _Arg>
williamr@2
   463
class const_mem_fun1_t : public binary_function<const _Tp*,_Arg,_Ret> {
williamr@2
   464
  typedef _Ret (_Tp::*__fun_type)(_Arg) const;
williamr@2
   465
public:
williamr@2
   466
  explicit const_mem_fun1_t(__fun_type __pf) : _M_f(__pf) {}
williamr@2
   467
  _Ret operator()(const _Tp* __p, _Arg __x) const
williamr@2
   468
    { return (__p->*_M_f)(__x); }
williamr@2
   469
private:
williamr@2
   470
  __fun_type _M_f;
williamr@2
   471
};
williamr@2
   472
williamr@2
   473
template <class _Ret, class _Tp, class _Arg>
williamr@2
   474
class mem_fun1_ref_t : public binary_function<_Tp,_Arg,_Ret> {
williamr@2
   475
  typedef _Ret (_Tp::*__fun_type)(_Arg);
williamr@2
   476
public:
williamr@2
   477
  explicit mem_fun1_ref_t(__fun_type __pf) : _M_f(__pf) {}
williamr@2
   478
  _Ret operator()(_Tp& __r, _Arg __x) const { return (__r.*_M_f)(__x); }
williamr@2
   479
private:
williamr@2
   480
  __fun_type _M_f;
williamr@2
   481
};
williamr@2
   482
williamr@2
   483
template <class _Ret, class _Tp, class _Arg>
williamr@2
   484
class const_mem_fun1_ref_t : public binary_function<_Tp,_Arg,_Ret> {
williamr@2
   485
  typedef _Ret (_Tp::*__fun_type)(_Arg) const;
williamr@2
   486
public:
williamr@2
   487
  explicit const_mem_fun1_ref_t(__fun_type __pf) : _M_f(__pf) {}
williamr@2
   488
  _Ret operator()(const _Tp& __r, _Arg __x) const { return (__r.*_M_f)(__x); }
williamr@2
   489
private:
williamr@2
   490
  __fun_type _M_f;
williamr@2
   491
};
williamr@2
   492
williamr@2
   493
template <class _Arg, class _Result>
williamr@2
   494
class pointer_to_unary_function : public unary_function<_Arg, _Result> {
williamr@2
   495
protected:
williamr@2
   496
  _Result (*_M_ptr)(_Arg);
williamr@2
   497
public:
williamr@2
   498
  pointer_to_unary_function() {}
williamr@2
   499
  explicit pointer_to_unary_function(_Result (*__x)(_Arg)) : _M_ptr(__x) {}
williamr@2
   500
  _Result operator()(_Arg __x) const { return _M_ptr(__x); }
williamr@2
   501
};
williamr@2
   502
williamr@2
   503
template <class _Arg1, class _Arg2, class _Result>
williamr@4
   504
class pointer_to_binary_function :
williamr@2
   505
  public binary_function<_Arg1,_Arg2,_Result> {
williamr@2
   506
protected:
williamr@2
   507
    _Result (*_M_ptr)(_Arg1, _Arg2);
williamr@2
   508
public:
williamr@2
   509
    pointer_to_binary_function() {}
williamr@4
   510
    explicit pointer_to_binary_function(_Result (*__x)(_Arg1, _Arg2))
williamr@2
   511
      : _M_ptr(__x) {}
williamr@2
   512
    _Result operator()(_Arg1 __x, _Arg2 __y) const {
williamr@2
   513
      return _M_ptr(__x, __y);
williamr@2
   514
    }
williamr@2
   515
};
williamr@2
   516
williamr@2
   517
williamr@2
   518
#if defined(_STLP_DONT_RETURN_VOID) && !defined(_STLP_NO_CLASS_PARTIAL_SPECIALIZATION)
williamr@2
   519
//Partial specialization for the void type
williamr@2
   520
template <class _Tp>
williamr@2
   521
class mem_fun_t<void, _Tp> : public unary_function<_Tp*,void> {
williamr@2
   522
  typedef void (_Tp::*__fun_type)(void);
williamr@2
   523
public:
williamr@2
   524
  explicit mem_fun_t _STLP_PSPEC2(void,_Tp) (__fun_type __pf) : _M_f(__pf) {}
williamr@2
   525
  void operator()(_Tp* __p) const { (__p->*_M_f)(); }
williamr@2
   526
private:
williamr@2
   527
  __fun_type _M_f;
williamr@2
   528
};
williamr@2
   529
williamr@2
   530
template <class _Tp>
williamr@2
   531
class const_mem_fun_t<void, _Tp> : public unary_function<const _Tp*,void> {
williamr@2
   532
  typedef void (_Tp::*__fun_type)(void) const;
williamr@2
   533
public:
williamr@2
   534
  explicit const_mem_fun_t _STLP_PSPEC2(void,_Tp) (__fun_type __pf) : _M_f(__pf) {}
williamr@2
   535
  void operator()(const _Tp* __p) const { (__p->*_M_f)(); }
williamr@2
   536
private:
williamr@2
   537
  __fun_type _M_f;
williamr@2
   538
};
williamr@2
   539
williamr@2
   540
template <class _Tp>
williamr@2
   541
class mem_fun_ref_t<void, _Tp> : public unary_function<_Tp,void> {
williamr@2
   542
  typedef void (_Tp::*__fun_type)(void);
williamr@2
   543
public:
williamr@2
   544
  explicit mem_fun_ref_t _STLP_PSPEC2(void,_Tp) (__fun_type __pf) : _M_f(__pf) {}
williamr@2
   545
  void operator()(_Tp& __r) const { (__r.*_M_f)(); }
williamr@2
   546
private:
williamr@2
   547
  __fun_type _M_f;
williamr@2
   548
};
williamr@2
   549
williamr@2
   550
template <class _Tp>
williamr@2
   551
class const_mem_fun_ref_t<void, _Tp> : public unary_function<_Tp,void> {
williamr@2
   552
  typedef void (_Tp::*__fun_type)(void) const;
williamr@2
   553
public:
williamr@2
   554
  explicit const_mem_fun_ref_t _STLP_PSPEC2(void,_Tp) (__fun_type __pf) : _M_f(__pf) {}
williamr@2
   555
  void operator()(const _Tp& __r) const { (__r.*_M_f)(); }
williamr@2
   556
private:
williamr@2
   557
  __fun_type _M_f;
williamr@2
   558
};
williamr@2
   559
williamr@2
   560
template <class _Tp, class _Arg>
williamr@2
   561
class mem_fun1_t<void, _Tp, _Arg> : public binary_function<_Tp*,_Arg,void> {
williamr@2
   562
  typedef void (_Tp::*__fun_type)(_Arg);
williamr@2
   563
public:
williamr@2
   564
  explicit mem_fun1_t _STLP_PSPEC3(void,_Tp,_Arg) (__fun_type __pf) : _M_f(__pf) {}
williamr@2
   565
  void operator()(_Tp* __p, _Arg __x) const { (__p->*_M_f)(__x); }
williamr@2
   566
private:
williamr@2
   567
  __fun_type _M_f;
williamr@2
   568
};
williamr@2
   569
williamr@2
   570
template <class _Tp, class _Arg>
williamr@4
   571
class const_mem_fun1_t<void, _Tp, _Arg>
williamr@2
   572
  : public binary_function<const _Tp*,_Arg,void> {
williamr@2
   573
  typedef void (_Tp::*__fun_type)(_Arg) const;
williamr@2
   574
public:
williamr@2
   575
  explicit const_mem_fun1_t _STLP_PSPEC3(void,_Tp,_Arg) (__fun_type __pf) : _M_f(__pf) {}
williamr@2
   576
  void operator()(const _Tp* __p, _Arg __x) const { (__p->*_M_f)(__x); }
williamr@2
   577
private:
williamr@2
   578
  __fun_type _M_f;
williamr@2
   579
};
williamr@2
   580
williamr@2
   581
template <class _Tp, class _Arg>
williamr@2
   582
class mem_fun1_ref_t<void, _Tp, _Arg>
williamr@2
   583
  : public binary_function<_Tp,_Arg,void> {
williamr@2
   584
  typedef void (_Tp::*__fun_type)(_Arg);
williamr@2
   585
public:
williamr@2
   586
  explicit mem_fun1_ref_t _STLP_PSPEC3(void,_Tp,_Arg) (__fun_type __pf) : _M_f(__pf) {}
williamr@2
   587
  void operator()(_Tp& __r, _Arg __x) const { (__r.*_M_f)(__x); }
williamr@2
   588
private:
williamr@2
   589
  __fun_type _M_f;
williamr@2
   590
};
williamr@2
   591
williamr@2
   592
template <class _Tp, class _Arg>
williamr@2
   593
class const_mem_fun1_ref_t<void, _Tp, _Arg>
williamr@2
   594
  : public binary_function<_Tp,_Arg,void> {
williamr@2
   595
  typedef void (_Tp::*__fun_type)(_Arg) const;
williamr@2
   596
public:
williamr@2
   597
  explicit const_mem_fun1_ref_t _STLP_PSPEC3(void,_Tp,_Arg) (__fun_type __pf) : _M_f(__pf) {}
williamr@2
   598
  void operator()(const _Tp& __r, _Arg __x) const { (__r.*_M_f)(__x); }
williamr@2
   599
private:
williamr@2
   600
  __fun_type _M_f;
williamr@2
   601
};
williamr@2
   602
williamr@2
   603
template <class _Arg>
williamr@4
   604
class pointer_to_unary_function<_Arg, void> : public unary_function<_Arg, void> {
williamr@2
   605
  typedef void (*__fun_type)(_Arg);
williamr@2
   606
  __fun_type _M_ptr;
williamr@2
   607
public:
williamr@2
   608
  pointer_to_unary_function() {}
williamr@2
   609
  explicit pointer_to_unary_function(__fun_type __x) : _M_ptr(__x) {}
williamr@2
   610
  void operator()(_Arg __x) const { _M_ptr(__x); }
williamr@2
   611
};
williamr@2
   612
williamr@2
   613
template <class _Arg1, class _Arg2>
williamr@4
   614
class pointer_to_binary_function<_Arg1, _Arg2, void> : public binary_function<_Arg1,_Arg2,void> {
williamr@2
   615
  typedef void (*__fun_type)(_Arg1, _Arg2);
williamr@2
   616
  __fun_type _M_ptr;
williamr@2
   617
public:
williamr@2
   618
  pointer_to_binary_function() {}
williamr@2
   619
  explicit pointer_to_binary_function(__fun_type __x) : _M_ptr(__x) {}
williamr@2
   620
  void operator()(_Arg1 __x, _Arg2 __y) const { _M_ptr(__x, __y); }
williamr@2
   621
};
williamr@2
   622
williamr@2
   623
#endif /*_STLP_DONT_RETURN_VOID && !_STLP_NO_CLASS_PARTIAL_SPECIALIZATION*/
williamr@2
   624
williamr@2
   625
#else /*!_STLP_DONT_RETURN_VOID || !_STLP_NO_CLASS_PARTIAL_SPECIALIZATION || !_STLP_MEMBER_TEMPLATE_CLASSES*/
williamr@2
   626
williamr@2
   627
//mem_fun_t
williamr@2
   628
template <class _Result, class _Tp>
williamr@4
   629
class mem_fun_t :
williamr@2
   630
  public _Mem_fun_traits<_Result>::_STLP_TEMPLATE _Args0<_Tp>::_Ptr {
williamr@2
   631
  typedef typename
williamr@2
   632
    _Mem_fun_traits<_Result>::_STLP_TEMPLATE _Args0<_Tp>::_Ptr _Base;
williamr@2
   633
public:
williamr@2
   634
  explicit mem_fun_t(typename _Base::__fun_type __f) : _Base(__f) {}
williamr@2
   635
};
williamr@2
   636
williamr@2
   637
//const_mem_fun_t
williamr@2
   638
template <class _Result, class _Tp>
williamr@4
   639
class const_mem_fun_t :
williamr@2
   640
  public _Mem_fun_traits<_Result>::_STLP_TEMPLATE _Args0<_Tp>::_Ptr_const {
williamr@2
   641
  typedef typename
williamr@2
   642
    _Mem_fun_traits<_Result>::_STLP_TEMPLATE _Args0<_Tp>::_Ptr_const _Base;
williamr@2
   643
public:
williamr@2
   644
  explicit const_mem_fun_t(typename _Base::__fun_type __f) : _Base(__f) {}
williamr@2
   645
};
williamr@2
   646
williamr@2
   647
//mem_fun_ref_t
williamr@2
   648
template <class _Result, class _Tp>
williamr@2
   649
class mem_fun_ref_t :
williamr@2
   650
  public _Mem_fun_traits<_Result>::_STLP_TEMPLATE _Args0<_Tp>::_Ref {
williamr@2
   651
  typedef typename
williamr@2
   652
    _Mem_fun_traits<_Result>::_STLP_TEMPLATE _Args0<_Tp>::_Ref _Base;
williamr@2
   653
public:
williamr@2
   654
  explicit mem_fun_ref_t(typename _Base::__fun_type __f) : _Base(__f) {}
williamr@2
   655
};
williamr@2
   656
williamr@2
   657
//const_mem_fun_ref_t
williamr@2
   658
template <class _Result, class _Tp>
williamr@2
   659
class const_mem_fun_ref_t :
williamr@2
   660
  public _Mem_fun_traits<_Result>::_STLP_TEMPLATE _Args0<_Tp>::_Ref_const {
williamr@2
   661
  typedef typename
williamr@2
   662
    _Mem_fun_traits<_Result>::_STLP_TEMPLATE _Args0<_Tp>::_Ref_const _Base;
williamr@2
   663
public:
williamr@2
   664
  explicit const_mem_fun_ref_t(typename _Base::__fun_type __f) : _Base(__f) {}
williamr@2
   665
};
williamr@2
   666
williamr@2
   667
//mem_fun1_t
williamr@2
   668
template <class _Result, class _Tp, class _Arg>
williamr@2
   669
class mem_fun1_t :
williamr@2
   670
  public _Mem_fun_traits<_Result>::_STLP_TEMPLATE _Args1<_Tp,_Arg>::_Ptr {
williamr@2
   671
  typedef typename
williamr@2
   672
    _Mem_fun_traits<_Result>::_STLP_TEMPLATE _Args1<_Tp,_Arg>::_Ptr _Base;
williamr@2
   673
public:
williamr@2
   674
  explicit mem_fun1_t(typename _Base::__fun_type __f) : _Base(__f) {}
williamr@2
   675
};
williamr@2
   676
williamr@2
   677
//const_mem_fun1_t
williamr@2
   678
template <class _Result, class _Tp, class _Arg>
williamr@2
   679
class const_mem_fun1_t :
williamr@2
   680
  public _Mem_fun_traits<_Result>::_STLP_TEMPLATE _Args1<_Tp,_Arg>::_Ptr_const {
williamr@2
   681
  typedef typename
williamr@2
   682
    _Mem_fun_traits<_Result>::_STLP_TEMPLATE _Args1<_Tp,_Arg>::_Ptr_const _Base;
williamr@2
   683
public:
williamr@2
   684
  explicit const_mem_fun1_t(typename _Base::__fun_type __f) : _Base(__f) {}
williamr@2
   685
};
williamr@2
   686
williamr@2
   687
//mem_fun1_ref_t
williamr@2
   688
template <class _Result, class _Tp, class _Arg>
williamr@2
   689
class mem_fun1_ref_t :
williamr@2
   690
  public _Mem_fun_traits<_Result>::_STLP_TEMPLATE _Args1<_Tp,_Arg>::_Ref {
williamr@2
   691
  typedef typename
williamr@2
   692
    _Mem_fun_traits<_Result>::_STLP_TEMPLATE _Args1<_Tp,_Arg>::_Ref _Base;
williamr@2
   693
public:
williamr@2
   694
  explicit mem_fun1_ref_t(typename _Base::__fun_type __f) : _Base(__f) {}
williamr@2
   695
};
williamr@2
   696
williamr@2
   697
//const_mem_fun1_t
williamr@2
   698
template <class _Result, class _Tp, class _Arg>
williamr@2
   699
class const_mem_fun1_ref_t :
williamr@2
   700
  public _Mem_fun_traits<_Result>::_STLP_TEMPLATE _Args1<_Tp,_Arg>::_Ref_const {
williamr@2
   701
  typedef typename
williamr@2
   702
    _Mem_fun_traits<_Result>::_STLP_TEMPLATE _Args1<_Tp,_Arg>::_Ref_const _Base;
williamr@2
   703
public:
williamr@2
   704
  explicit const_mem_fun1_ref_t(typename _Base::__fun_type __f) : _Base(__f) {}
williamr@2
   705
};
williamr@2
   706
williamr@2
   707
williamr@2
   708
template <class _Arg, class _Result>
williamr@2
   709
class pointer_to_unary_function :
williamr@2
   710
public _Ptr_fun1<_Result,_Arg> {
williamr@4
   711
  typedef typename
williamr@2
   712
    _Ptr_fun1<_Result,_Arg>::__fun_type __fun_type;
williamr@2
   713
public:
williamr@2
   714
  explicit pointer_to_unary_function(__fun_type __f)
williamr@2
   715
    : _Ptr_fun1<_Result,_Arg>(__f) {}
williamr@2
   716
};
williamr@2
   717
williamr@2
   718
template <class _Arg1, class _Arg2, class _Result>
williamr@2
   719
class pointer_to_binary_function :
williamr@2
   720
public _Ptr_fun2<_Result,_Arg1,_Arg2> {
williamr@2
   721
  typedef typename
williamr@2
   722
    _Ptr_fun2<_Result,_Arg1,_Arg2>::__fun_type __fun_type;
williamr@2
   723
public:
williamr@2
   724
  explicit pointer_to_binary_function(__fun_type __f)
williamr@2
   725
    : _Ptr_fun2<_Result,_Arg1,_Arg2>(__f) {}
williamr@2
   726
};
williamr@2
   727
williamr@2
   728
#endif /*!_STLP_DONT_RETURN_VOID || !_STLP_NO_CLASS_PARTIAL_SPECIALIZATION || !_STLP_MEMBER_TEMPLATE_CLASSES*/
williamr@2
   729
williamr@2
   730
williamr@2
   731
# if !defined (_STLP_MEMBER_POINTER_PARAM_BUG)
williamr@2
   732
// Mem_fun adaptor helper functions.  There are only two:
williamr@4
   733
//  mem_fun and mem_fun_ref.  (mem_fun1 and mem_fun1_ref
williamr@2
   734
//  are provided for backward compatibility, but they are no longer
williamr@2
   735
//  part of the C++ standard.)
williamr@2
   736
williamr@2
   737
template <class _Result, class _Tp>
williamr@4
   738
inline mem_fun_t<_Result,_Tp>
williamr@2
   739
mem_fun(_Result (_Tp::*__f)()) { return mem_fun_t<_Result,_Tp>(__f); }
williamr@2
   740
williamr@2
   741
template <class _Result, class _Tp>
williamr@4
   742
inline const_mem_fun_t<_Result,_Tp>
williamr@2
   743
mem_fun(_Result (_Tp::*__f)() const)  { return const_mem_fun_t<_Result,_Tp>(__f); }
williamr@2
   744
williamr@2
   745
template <class _Result, class _Tp>
williamr@4
   746
inline mem_fun_ref_t<_Result,_Tp>
williamr@2
   747
mem_fun_ref(_Result (_Tp::*__f)())  { return mem_fun_ref_t<_Result,_Tp>(__f); }
williamr@2
   748
williamr@2
   749
template <class _Result, class _Tp>
williamr@4
   750
inline const_mem_fun_ref_t<_Result,_Tp>
williamr@2
   751
mem_fun_ref(_Result (_Tp::*__f)() const)  { return const_mem_fun_ref_t<_Result,_Tp>(__f); }
williamr@2
   752
williamr@2
   753
template <class _Result, class _Tp, class _Arg>
williamr@4
   754
inline mem_fun1_t<_Result,_Tp,_Arg>
williamr@2
   755
mem_fun(_Result (_Tp::*__f)(_Arg)) { return mem_fun1_t<_Result,_Tp,_Arg>(__f); }
williamr@2
   756
williamr@2
   757
template <class _Result, class _Tp, class _Arg>
williamr@4
   758
inline const_mem_fun1_t<_Result,_Tp,_Arg>
williamr@2
   759
mem_fun(_Result (_Tp::*__f)(_Arg) const) { return const_mem_fun1_t<_Result,_Tp,_Arg>(__f); }
williamr@2
   760
williamr@2
   761
template <class _Result, class _Tp, class _Arg>
williamr@4
   762
inline mem_fun1_ref_t<_Result,_Tp,_Arg>
williamr@2
   763
mem_fun_ref(_Result (_Tp::*__f)(_Arg)) { return mem_fun1_ref_t<_Result,_Tp,_Arg>(__f); }
williamr@2
   764
williamr@2
   765
template <class _Result, class _Tp, class _Arg>
williamr@2
   766
inline const_mem_fun1_ref_t<_Result,_Tp,_Arg>
williamr@2
   767
mem_fun_ref(_Result (_Tp::*__f)(_Arg) const) { return const_mem_fun1_ref_t<_Result,_Tp,_Arg>(__f); }
williamr@2
   768
williamr@2
   769
# if !(defined (_STLP_NO_EXTENSIONS) || defined (_STLP_NO_ANACHRONISMS))
williamr@2
   770
//  mem_fun1 and mem_fun1_ref are no longer part of the C++ standard,
williamr@2
   771
//  but they are provided for backward compatibility.
williamr@2
   772
template <class _Result, class _Tp, class _Arg>
williamr@4
   773
inline mem_fun1_t<_Result,_Tp,_Arg>
williamr@2
   774
mem_fun1(_Result (_Tp::*__f)(_Arg)) { return mem_fun1_t<_Result,_Tp,_Arg>(__f); }
williamr@2
   775
williamr@2
   776
template <class _Result, class _Tp, class _Arg>
williamr@4
   777
inline const_mem_fun1_t<_Result,_Tp,_Arg>
williamr@2
   778
mem_fun1(_Result (_Tp::*__f)(_Arg) const) { return const_mem_fun1_t<_Result,_Tp,_Arg>(__f); }
williamr@2
   779
williamr@2
   780
template <class _Result, class _Tp, class _Arg>
williamr@4
   781
inline mem_fun1_ref_t<_Result,_Tp,_Arg>
williamr@2
   782
mem_fun1_ref(_Result (_Tp::*__f)(_Arg)) { return mem_fun1_ref_t<_Result,_Tp,_Arg>(__f); }
williamr@2
   783
williamr@2
   784
template <class _Result, class _Tp, class _Arg>
williamr@2
   785
inline const_mem_fun1_ref_t<_Result,_Tp,_Arg>
williamr@2
   786
mem_fun1_ref(_Result (_Tp::*__f)(_Arg) const) { return const_mem_fun1_ref_t<_Result,_Tp,_Arg>(__f); }
williamr@2
   787
williamr@2
   788
# endif /* _STLP_NO_EXTENSIONS */
williamr@2
   789
williamr@2
   790
# endif /* _STLP_MEMBER_POINTER_PARAM_BUG */
williamr@2
   791
williamr@2
   792
template <class _Arg, class _Result>
williamr@2
   793
inline pointer_to_unary_function<_Arg, _Result>
williamr@4
   794
ptr_fun(_Result (*__f)(_Arg))
williamr@2
   795
{ return pointer_to_unary_function<_Arg, _Result>(__f); }
williamr@2
   796
williamr@2
   797
template <class _Arg1, class _Arg2, class _Result>
williamr@4
   798
inline pointer_to_binary_function<_Arg1,_Arg2,_Result>
williamr@4
   799
ptr_fun(_Result (*__f)(_Arg1, _Arg2))
williamr@2
   800
{ return pointer_to_binary_function<_Arg1,_Arg2,_Result>(__f); }
williamr@2
   801
williamr@2
   802
_STLP_END_NAMESPACE