_function_adaptors.h revision 9720d5f59b9c1f5d1b9ecbc9173dbcb71bd557be
19720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/*
29720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block *
39720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Copyright (c) 1994
49720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Hewlett-Packard Company
59720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block *
69720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Copyright (c) 1996-1998
79720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Silicon Graphics Computer Systems, Inc.
89720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block *
99720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Copyright (c) 1997
109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Moscow Center for SPARC Technology
119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block *
129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Copyright (c) 1999
139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Boris Fomitchev
149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block *
159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Copyright (c) 2000
169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Pavel Kuznetsov
179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block *
189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Copyright (c) 2001
199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Meridian'93
209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block *
219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * This material is provided "as is", with absolutely no warranty expressed
229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * or implied. Any use is at your own risk.
239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block *
249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Permission to use or copy this software for any purpose is hereby granted
259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * without fee, provided the above notices are retained on all copies.
269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Permission to modify the code and to distribute modified code is granted,
279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * provided the above notices are retained, and a notice that the code was
289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * modified is included with the above copyright notice.
299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block *
309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block */
319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* NOTE: This is an internal header file, included by other STL headers.
339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block *   You should not attempt to use it directly.
349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block */
359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// This file has noo macro protection as it is meant to be included several times
379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// from other header.
389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Adaptor function objects: pointers to member functions.
399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// There are a total of 16 = 2^4 function objects in this family.
419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//  (1) Member functions taking no arguments vs member functions taking
429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//       one argument.
439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//  (2) Call through pointer vs call through reference.
449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//  (3) Member function with void return type vs member function with
459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//      non-void return type.
469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//  (4) Const vs non-const member function.
479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Note that choice (3) is nothing more than a workaround: according
499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//  to the draft, compilers should handle void and non-void the same way.
509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//  This feature is not yet widely implemented, though.  You can only use
519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//  member functions returning void if your compiler supports partial
529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//  specialization.
539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// All of this complexity is in the function objects themselves.  You can
559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//  ignore it by using the helper function mem_fun and mem_fun_ref,
569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//  which create whichever type of adaptor is appropriate.
579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_BEGIN_NAMESPACE
599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//This implementation will only be used if needed, that is to say when there is the return void bug
619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//and when there is no partial template specialization
629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined(_STLP_DONT_RETURN_VOID) && defined (_STLP_NO_CLASS_PARTIAL_SPECIALIZATION) && defined(_STLP_MEMBER_TEMPLATE_CLASSES)
639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate<class _Result, class _Tp>
659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass _Mem_fun0_ptr : public unary_function<_Tp*, _Result> {
669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprotected:
679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef _Result (_Tp::*__fun_type) ();
689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit _Mem_fun0_ptr(__fun_type __f) : _M_f(__f) {}
699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Result operator ()(_Tp* __p) const { return (__p->*_M_f)(); }
729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate:
749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __fun_type _M_f;
759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate<class _Result, class _Tp, class _Arg>
789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass _Mem_fun1_ptr : public binary_function<_Tp*,_Arg,_Result> {
799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprotected:
809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef _Result (_Tp::*__fun_type) (_Arg);
819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit _Mem_fun1_ptr(__fun_type __f) : _M_f(__f) {}
829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Result operator ()(_Tp* __p, _Arg __x) const { return (__p->*_M_f)(__x); }
859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate:
879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __fun_type _M_f;
889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate<class _Result, class _Tp>
919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass _Const_mem_fun0_ptr : public unary_function<const _Tp*,_Result> {
929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprotected:
939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef _Result (_Tp::*__fun_type) () const;
949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit _Const_mem_fun0_ptr(__fun_type __f) : _M_f(__f) {}
959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Result operator ()(const _Tp* __p) const { return (__p->*_M_f)(); }
989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate:
1009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __fun_type _M_f;
1019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
1029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate<class _Result, class _Tp, class _Arg>
1049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass _Const_mem_fun1_ptr : public binary_function<const _Tp*,_Arg,_Result> {
1059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprotected:
1069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef _Result (_Tp::*__fun_type) (_Arg) const;
1079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit _Const_mem_fun1_ptr(__fun_type __f) : _M_f(__f) {}
1089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
1109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Result operator ()(const _Tp* __p, _Arg __x) const {
1119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return (__p->*_M_f)(__x); }
1129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate:
1149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __fun_type _M_f;
1159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
1169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate<class _Result, class _Tp>
1189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass _Mem_fun0_ref : public unary_function<_Tp&,_Result> {
1199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprotected:
1209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef _Result (_Tp::*__fun_type) ();
1219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit _Mem_fun0_ref(__fun_type __f) : _M_f(__f) {}
1229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
1249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Result operator ()(_Tp& __p) const { return (__p.*_M_f)(); }
1259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate:
1279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __fun_type _M_f;
1289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
1299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate<class _Result, class _Tp, class _Arg>
1319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass _Mem_fun1_ref : public binary_function<_Tp&,_Arg,_Result> {
1329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprotected:
1339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef _Result (_Tp::*__fun_type) (_Arg);
1349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit _Mem_fun1_ref(__fun_type __f) : _M_f(__f) {}
1359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
1379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Result operator ()(_Tp& __p, _Arg __x) const { return (__p.*_M_f)(__x); }
1389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate:
1409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __fun_type _M_f;
1419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
1429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate<class _Result, class _Tp>
1449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass _Const_mem_fun0_ref : public unary_function<const _Tp&,_Result> {
1459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprotected:
1469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef _Result (_Tp::*__fun_type) () const;
1479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit _Const_mem_fun0_ref(__fun_type __f) : _M_f(__f) {}
1489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
1509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Result operator ()(const _Tp& __p) const { return (__p.*_M_f)(); }
1519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate:
1539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __fun_type _M_f;
1549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
1559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate<class _Result, class _Tp, class _Arg>
1579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass _Const_mem_fun1_ref : public binary_function<const _Tp&,_Arg,_Result> {
1589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprotected:
1599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef _Result (_Tp::*__fun_type) (_Arg) const;
1609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit _Const_mem_fun1_ref(__fun_type __f) : _M_f(__f) {}
1619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
1639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Result operator ()(const _Tp& __p, _Arg __x) const { return (__p.*_M_f)(__x); }
1649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate:
1669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __fun_type _M_f;
1679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
1689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate<class _Result>
1709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct _Mem_fun_traits {
1719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  template<class _Tp>
1729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  struct _Args0 {
1739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    typedef _Mem_fun0_ptr<_Result,_Tp>            _Ptr;
1749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    typedef _Const_mem_fun0_ptr<_Result,_Tp>      _Ptr_const;
1759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    typedef _Mem_fun0_ref<_Result,_Tp>            _Ref;
1769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    typedef _Const_mem_fun0_ref<_Result,_Tp>      _Ref_const;
1779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  };
1789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  template<class _Tp, class _Arg>
1809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  struct _Args1 {
1819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    typedef _Mem_fun1_ptr<_Result,_Tp,_Arg>       _Ptr;
1829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    typedef _Const_mem_fun1_ptr<_Result,_Tp,_Arg> _Ptr_const;
1839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    typedef _Mem_fun1_ref<_Result,_Tp,_Arg>       _Ref;
1849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    typedef _Const_mem_fun1_ref<_Result,_Tp,_Arg> _Ref_const;
1859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  };
1869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
1879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate<class _Arg, class _Result>
1899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass _Ptr_fun1_base : public unary_function<_Arg, _Result> {
1909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprotected:
1919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef _Result (*__fun_type) (_Arg);
1929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit _Ptr_fun1_base(__fun_type __f) : _M_f(__f) {}
1939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
1959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Result operator()(_Arg __x) const { return _M_f(__x); }
1969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate:
1989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __fun_type _M_f;
1999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
2009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Arg1, class _Arg2, class _Result>
2029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass _Ptr_fun2_base : public binary_function<_Arg1,_Arg2,_Result> {
2039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprotected:
2049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef _Result (*__fun_type) (_Arg1, _Arg2);
2059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit _Ptr_fun2_base(__fun_type __f) : _M_f(__f) {}
2069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
2089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Result operator()(_Arg1 __x, _Arg2 __y) const { return _M_f(__x, __y); }
2099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate:
2119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __fun_type _M_f;
2129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
2139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate<class _Result>
2159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct _Ptr_fun_traits {
2169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  template<class _Arg> struct _Args1 {
2179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    typedef _Ptr_fun1_base<_Arg,_Result> _Fun;
2189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  };
2199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  template<class _Arg1, class _Arg2> struct _Args2 {
2219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    typedef _Ptr_fun2_base<_Arg1,_Arg2,_Result> _Fun;
2229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  };
2239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
2249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/*Specialization for void return type
2269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block*/
2279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate<class _Tp>
2289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass _Void_mem_fun0_ptr : public unary_function<_Tp*,void> {
2299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprotected:
2309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef void (_Tp::*__fun_type) ();
2319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit _Void_mem_fun0_ptr(__fun_type __f) : _M_f(__f) {}
2329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
2349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  void operator ()(_Tp* __p) const { (__p->*_M_f)(); }
2359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate:
2379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __fun_type _M_f;
2389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
2399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate<class _Tp, class _Arg>
2419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass _Void_mem_fun1_ptr : public binary_function<_Tp*,_Arg,void> {
2429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprotected:
2439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef void (_Tp::*__fun_type) (_Arg);
2449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit _Void_mem_fun1_ptr(__fun_type __f) : _M_f(__f) {}
2459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
2479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  void operator ()(_Tp* __p, _Arg __x) const { (__p->*_M_f)(__x); }
2489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate:
2509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __fun_type _M_f;
2519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
2529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate<class _Tp>
2549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass _Void_const_mem_fun0_ptr : public unary_function<const _Tp*,void> {
2559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprotected:
2569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef void (_Tp::*__fun_type) () const;
2579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit _Void_const_mem_fun0_ptr(__fun_type __f) : _M_f(__f) {}
2589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
2609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  void operator ()(const _Tp* __p) const { (__p->*_M_f)(); }
2619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate:
2639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __fun_type _M_f;
2649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
2659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate<class _Tp, class _Arg>
2679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass _Void_const_mem_fun1_ptr : public binary_function<const _Tp*,_Arg,void> {
2689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprotected:
2699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef void (_Tp::*__fun_type) (_Arg) const;
2709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit _Void_const_mem_fun1_ptr(__fun_type __f) : _M_f(__f) {}
2719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
2739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  void operator ()(const _Tp* __p, _Arg __x) const { (__p->*_M_f)(__x); }
2749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate:
2769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __fun_type _M_f;
2779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
2789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate<class _Tp>
2809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass _Void_mem_fun0_ref : public unary_function<_Tp&,void> {
2819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprotected:
2829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef void (_Tp::*__fun_type) ();
2839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit _Void_mem_fun0_ref(__fun_type __f) : _M_f(__f) {}
2849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
2869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  void operator ()(_Tp& __p) const { (__p.*_M_f)(); }
2879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate:
2899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __fun_type _M_f;
2909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
2919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate<class _Tp, class _Arg>
2939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass _Void_mem_fun1_ref : public binary_function<_Tp&,_Arg,void> {
2949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprotected:
2959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef void (_Tp::*__fun_type) (_Arg);
2969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit _Void_mem_fun1_ref(__fun_type __f) : _M_f(__f) {}
2979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
2999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  void operator ()(_Tp& __p, _Arg __x) const { (__p.*_M_f)(__x); }
3009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate:
3029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __fun_type _M_f;
3039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
3049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate<class _Tp>
3069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass _Void_const_mem_fun0_ref : public unary_function<const _Tp&,void> {
3079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprotected:
3089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef void (_Tp::*__fun_type) () const;
3099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit _Void_const_mem_fun0_ref(__fun_type __f) : _M_f(__f) {}
3109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
3129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  void operator ()(const _Tp& __p) const { (__p.*_M_f)(); }
3139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate:
3159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __fun_type _M_f;
3169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
3179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate<class _Tp, class _Arg>
3199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass _Void_const_mem_fun1_ref : public binary_function<const _Tp&,_Arg,void> {
3209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprotected:
3219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef void (_Tp::*__fun_type) (_Arg) const;
3229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit _Void_const_mem_fun1_ref(__fun_type __f) : _M_f(__f) {}
3239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
3259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  void operator ()(const _Tp& __p, _Arg __x) const { (__p.*_M_f)(__x); }
3269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate:
3289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __fun_type _M_f;
3299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
3309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_TEMPLATE_NULL
3329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct _Mem_fun_traits<void> {
3339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  template<class _Tp> struct _Args0 {
3349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    typedef _Void_mem_fun0_ptr<_Tp>             _Ptr;
3359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    typedef _Void_const_mem_fun0_ptr<_Tp>       _Ptr_const;
3369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    typedef _Void_mem_fun0_ref<_Tp>             _Ref;
3379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    typedef _Void_const_mem_fun0_ref<_Tp>       _Ref_const;
3389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  };
3399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  template<class _Tp, class _Arg> struct _Args1 {
3419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    typedef _Void_mem_fun1_ptr<_Tp,_Arg>        _Ptr;
3429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    typedef _Void_const_mem_fun1_ptr<_Tp,_Arg>  _Ptr_const;
3439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    typedef _Void_mem_fun1_ref<_Tp,_Arg>        _Ref;
3449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    typedef _Void_const_mem_fun1_ref<_Tp,_Arg>  _Ref_const;
3459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  };
3469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
3479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate<class _Arg>
3499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass _Ptr_void_fun1_base : public unary_function<_Arg, void> {
3509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprotected:
3519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef void (*__fun_type) (_Arg);
3529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit _Ptr_void_fun1_base(__fun_type __f) : _M_f(__f) {}
3539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
3559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  void operator()(_Arg __x) const { _M_f(__x); }
3569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate:
3589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __fun_type _M_f;
3599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
3609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Arg1, class _Arg2>
3629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass _Ptr_void_fun2_base : public binary_function<_Arg1,_Arg2,void> {
3639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprotected:
3649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef void (*__fun_type) (_Arg1, _Arg2);
3659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit _Ptr_void_fun2_base(__fun_type __f) : _M_f(__f) {}
3669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
3689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  void operator()(_Arg1 __x, _Arg2 __y) const { _M_f(__x, __y); }
3699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate:
3719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __fun_type _M_f;
3729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
3739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_TEMPLATE_NULL
3759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct _Ptr_fun_traits<void> {
3769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  template<class _Arg> struct _Args1 {
3779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    typedef _Ptr_void_fun1_base<_Arg> _Fun;
3789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  };
3799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  template<class _Arg1, class _Arg2> struct _Args2 {
3819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    typedef _Ptr_void_fun2_base<_Arg1,_Arg2> _Fun;
3829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  };
3839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
3849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// pavel: need extra level of inheritance here since MSVC++ does not
3869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// accept traits-based fake partial specialization for template
3879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// arguments other than first
3889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate<class _Result, class _Arg>
3909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass _Ptr_fun1 :
3919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  public _Ptr_fun_traits<_Result>::_STLP_TEMPLATE _Args1<_Arg>::_Fun {
3929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprotected:
3939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef typename _Ptr_fun_traits<_Result>::_STLP_TEMPLATE _Args1<_Arg>::_Fun _Base;
3949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit _Ptr_fun1(typename _Base::__fun_type __f) : _Base(__f) {}
3959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
3969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate<class _Result, class _Arg1, class _Arg2>
3989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass _Ptr_fun2 :
3999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  public _Ptr_fun_traits<_Result>::_STLP_TEMPLATE _Args2<_Arg1,_Arg2>::_Fun {
4009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprotected:
4019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef typename _Ptr_fun_traits<_Result>::_STLP_TEMPLATE _Args2<_Arg1,_Arg2>::_Fun _Base;
4029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit _Ptr_fun2(typename _Base::__fun_type __f) : _Base(__f) {}
4039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
4049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
4059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
4069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif /*_STLP_DONT_RETURN_VOID && _STLP_NO_CLASS_PARTIAL_SPECIALIZATION && _STLP_MEMBER_TEMPLATE_CLASSES*/
4079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
4089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
4099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if !defined(_STLP_DONT_RETURN_VOID) || !defined(_STLP_NO_CLASS_PARTIAL_SPECIALIZATION) || !defined (_STLP_MEMBER_TEMPLATE_CLASSES)
4109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
4119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Ret, class _Tp>
4129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass mem_fun_t : public unary_function<_Tp*,_Ret> {
4139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef _Ret (_Tp::*__fun_type)(void);
4149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
4159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit mem_fun_t(__fun_type __pf) : _M_f(__pf) {}
4169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Ret operator()(_Tp* __p) const { return (__p->*_M_f)(); }
4179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate:
4189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __fun_type _M_f;
4199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
4209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
4219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Ret, class _Tp>
4229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass const_mem_fun_t : public unary_function<const _Tp*,_Ret> {
4239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef _Ret (_Tp::*__fun_type)(void) const;
4249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
4259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit const_mem_fun_t(__fun_type __pf) : _M_f(__pf) {}
4269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Ret operator()(const _Tp* __p) const { return (__p->*_M_f)(); }
4279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate:
4289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __fun_type _M_f;
4299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
4309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
4319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
4329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Ret, class _Tp>
4339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass mem_fun_ref_t : public unary_function<_Tp,_Ret> {
4349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef _Ret (_Tp::*__fun_type)(void);
4359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
4369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit mem_fun_ref_t(__fun_type __pf) : _M_f(__pf) {}
4379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Ret operator()(_Tp& __r) const { return (__r.*_M_f)(); }
4389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate:
4399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __fun_type _M_f;
4409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
4419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
4429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Ret, class _Tp>
4439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass const_mem_fun_ref_t : public unary_function<_Tp,_Ret> {
4449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef _Ret (_Tp::*__fun_type)(void) const;
4459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
4469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit const_mem_fun_ref_t(__fun_type __pf) : _M_f(__pf) {}
4479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Ret operator()(const _Tp& __r) const { return (__r.*_M_f)(); }
4489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate:
4499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __fun_type _M_f;
4509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
4519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
4529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Ret, class _Tp, class _Arg>
4539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass mem_fun1_t : public binary_function<_Tp*,_Arg,_Ret> {
4549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef _Ret (_Tp::*__fun_type)(_Arg);
4559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
4569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit mem_fun1_t(__fun_type __pf) : _M_f(__pf) {}
4579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Ret operator()(_Tp* __p, _Arg __x) const { return (__p->*_M_f)(__x); }
4589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate:
4599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __fun_type _M_f;
4609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
4619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
4629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Ret, class _Tp, class _Arg>
4639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass const_mem_fun1_t : public binary_function<const _Tp*,_Arg,_Ret> {
4649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef _Ret (_Tp::*__fun_type)(_Arg) const;
4659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
4669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit const_mem_fun1_t(__fun_type __pf) : _M_f(__pf) {}
4679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Ret operator()(const _Tp* __p, _Arg __x) const
4689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    { return (__p->*_M_f)(__x); }
4699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate:
4709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __fun_type _M_f;
4719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
4729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
4739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Ret, class _Tp, class _Arg>
4749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass mem_fun1_ref_t : public binary_function<_Tp,_Arg,_Ret> {
4759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef _Ret (_Tp::*__fun_type)(_Arg);
4769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
4779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit mem_fun1_ref_t(__fun_type __pf) : _M_f(__pf) {}
4789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Ret operator()(_Tp& __r, _Arg __x) const { return (__r.*_M_f)(__x); }
4799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate:
4809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __fun_type _M_f;
4819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
4829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
4839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Ret, class _Tp, class _Arg>
4849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass const_mem_fun1_ref_t : public binary_function<_Tp,_Arg,_Ret> {
4859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef _Ret (_Tp::*__fun_type)(_Arg) const;
4869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
4879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit const_mem_fun1_ref_t(__fun_type __pf) : _M_f(__pf) {}
4889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Ret operator()(const _Tp& __r, _Arg __x) const { return (__r.*_M_f)(__x); }
4899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate:
4909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __fun_type _M_f;
4919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
4929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
4939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Arg, class _Result>
4949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass pointer_to_unary_function : public unary_function<_Arg, _Result> {
4959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprotected:
4969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Result (*_M_ptr)(_Arg);
4979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
4989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  pointer_to_unary_function() {}
4999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit pointer_to_unary_function(_Result (*__x)(_Arg)) : _M_ptr(__x) {}
5009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Result operator()(_Arg __x) const { return _M_ptr(__x); }
5019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
5029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
5039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Arg1, class _Arg2, class _Result>
5049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass pointer_to_binary_function :
5059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  public binary_function<_Arg1,_Arg2,_Result> {
5069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprotected:
5079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _Result (*_M_ptr)(_Arg1, _Arg2);
5089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
5099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    pointer_to_binary_function() {}
5109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    explicit pointer_to_binary_function(_Result (*__x)(_Arg1, _Arg2))
5119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      : _M_ptr(__x) {}
5129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _Result operator()(_Arg1 __x, _Arg2 __y) const {
5139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      return _M_ptr(__x, __y);
5149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    }
5159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
5169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
5179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
5189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined(_STLP_DONT_RETURN_VOID) && !defined(_STLP_NO_CLASS_PARTIAL_SPECIALIZATION)
5199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//Partial specialization for the void type
5209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp>
5219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass mem_fun_t<void, _Tp> : public unary_function<_Tp*,void> {
5229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef void (_Tp::*__fun_type)(void);
5239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
5249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit mem_fun_t _STLP_PSPEC2(void,_Tp) (__fun_type __pf) : _M_f(__pf) {}
5259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  void operator()(_Tp* __p) const { (__p->*_M_f)(); }
5269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate:
5279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __fun_type _M_f;
5289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
5299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
5309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp>
5319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass const_mem_fun_t<void, _Tp> : public unary_function<const _Tp*,void> {
5329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef void (_Tp::*__fun_type)(void) const;
5339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
5349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit const_mem_fun_t _STLP_PSPEC2(void,_Tp) (__fun_type __pf) : _M_f(__pf) {}
5359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  void operator()(const _Tp* __p) const { (__p->*_M_f)(); }
5369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate:
5379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __fun_type _M_f;
5389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
5399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
5409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp>
5419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass mem_fun_ref_t<void, _Tp> : public unary_function<_Tp,void> {
5429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef void (_Tp::*__fun_type)(void);
5439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
5449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit mem_fun_ref_t _STLP_PSPEC2(void,_Tp) (__fun_type __pf) : _M_f(__pf) {}
5459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  void operator()(_Tp& __r) const { (__r.*_M_f)(); }
5469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate:
5479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __fun_type _M_f;
5489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
5499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
5509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp>
5519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass const_mem_fun_ref_t<void, _Tp> : public unary_function<_Tp,void> {
5529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef void (_Tp::*__fun_type)(void) const;
5539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
5549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit const_mem_fun_ref_t _STLP_PSPEC2(void,_Tp) (__fun_type __pf) : _M_f(__pf) {}
5559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  void operator()(const _Tp& __r) const { (__r.*_M_f)(); }
5569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate:
5579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __fun_type _M_f;
5589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
5599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
5609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp, class _Arg>
5619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass mem_fun1_t<void, _Tp, _Arg> : public binary_function<_Tp*,_Arg,void> {
5629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef void (_Tp::*__fun_type)(_Arg);
5639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
5649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit mem_fun1_t _STLP_PSPEC3(void,_Tp,_Arg) (__fun_type __pf) : _M_f(__pf) {}
5659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  void operator()(_Tp* __p, _Arg __x) const { (__p->*_M_f)(__x); }
5669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate:
5679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __fun_type _M_f;
5689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
5699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
5709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp, class _Arg>
5719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass const_mem_fun1_t<void, _Tp, _Arg>
5729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  : public binary_function<const _Tp*,_Arg,void> {
5739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef void (_Tp::*__fun_type)(_Arg) const;
5749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
5759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit const_mem_fun1_t _STLP_PSPEC3(void,_Tp,_Arg) (__fun_type __pf) : _M_f(__pf) {}
5769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  void operator()(const _Tp* __p, _Arg __x) const { (__p->*_M_f)(__x); }
5779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate:
5789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __fun_type _M_f;
5799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
5809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
5819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp, class _Arg>
5829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass mem_fun1_ref_t<void, _Tp, _Arg>
5839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  : public binary_function<_Tp,_Arg,void> {
5849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef void (_Tp::*__fun_type)(_Arg);
5859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
5869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit mem_fun1_ref_t _STLP_PSPEC3(void,_Tp,_Arg) (__fun_type __pf) : _M_f(__pf) {}
5879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  void operator()(_Tp& __r, _Arg __x) const { (__r.*_M_f)(__x); }
5889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate:
5899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __fun_type _M_f;
5909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
5919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
5929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp, class _Arg>
5939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass const_mem_fun1_ref_t<void, _Tp, _Arg>
5949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  : public binary_function<_Tp,_Arg,void> {
5959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef void (_Tp::*__fun_type)(_Arg) const;
5969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
5979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit const_mem_fun1_ref_t _STLP_PSPEC3(void,_Tp,_Arg) (__fun_type __pf) : _M_f(__pf) {}
5989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  void operator()(const _Tp& __r, _Arg __x) const { (__r.*_M_f)(__x); }
5999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate:
6009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __fun_type _M_f;
6019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
6029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
6039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Arg>
6049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass pointer_to_unary_function<_Arg, void> : public unary_function<_Arg, void> {
6059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef void (*__fun_type)(_Arg);
6069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __fun_type _M_ptr;
6079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
6089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  pointer_to_unary_function() {}
6099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit pointer_to_unary_function(__fun_type __x) : _M_ptr(__x) {}
6109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  void operator()(_Arg __x) const { _M_ptr(__x); }
6119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
6129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
6139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Arg1, class _Arg2>
6149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass pointer_to_binary_function<_Arg1, _Arg2, void> : public binary_function<_Arg1,_Arg2,void> {
6159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef void (*__fun_type)(_Arg1, _Arg2);
6169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __fun_type _M_ptr;
6179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
6189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  pointer_to_binary_function() {}
6199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit pointer_to_binary_function(__fun_type __x) : _M_ptr(__x) {}
6209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  void operator()(_Arg1 __x, _Arg2 __y) const { _M_ptr(__x, __y); }
6219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
6229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
6239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif /*_STLP_DONT_RETURN_VOID && !_STLP_NO_CLASS_PARTIAL_SPECIALIZATION*/
6249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
6259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else /*!_STLP_DONT_RETURN_VOID || !_STLP_NO_CLASS_PARTIAL_SPECIALIZATION || !_STLP_MEMBER_TEMPLATE_CLASSES*/
6269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
6279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//mem_fun_t
6289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Result, class _Tp>
6299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass mem_fun_t :
6309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  public _Mem_fun_traits<_Result>::_STLP_TEMPLATE _Args0<_Tp>::_Ptr {
6319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef typename
6329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _Mem_fun_traits<_Result>::_STLP_TEMPLATE _Args0<_Tp>::_Ptr _Base;
6339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
6349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit mem_fun_t(typename _Base::__fun_type __f) : _Base(__f) {}
6359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
6369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
6379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//const_mem_fun_t
6389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Result, class _Tp>
6399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass const_mem_fun_t :
6409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  public _Mem_fun_traits<_Result>::_STLP_TEMPLATE _Args0<_Tp>::_Ptr_const {
6419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef typename
6429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _Mem_fun_traits<_Result>::_STLP_TEMPLATE _Args0<_Tp>::_Ptr_const _Base;
6439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
6449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit const_mem_fun_t(typename _Base::__fun_type __f) : _Base(__f) {}
6459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
6469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
6479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//mem_fun_ref_t
6489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Result, class _Tp>
6499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass mem_fun_ref_t :
6509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  public _Mem_fun_traits<_Result>::_STLP_TEMPLATE _Args0<_Tp>::_Ref {
6519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef typename
6529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _Mem_fun_traits<_Result>::_STLP_TEMPLATE _Args0<_Tp>::_Ref _Base;
6539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
6549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit mem_fun_ref_t(typename _Base::__fun_type __f) : _Base(__f) {}
6559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
6569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
6579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//const_mem_fun_ref_t
6589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Result, class _Tp>
6599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass const_mem_fun_ref_t :
6609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  public _Mem_fun_traits<_Result>::_STLP_TEMPLATE _Args0<_Tp>::_Ref_const {
6619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef typename
6629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _Mem_fun_traits<_Result>::_STLP_TEMPLATE _Args0<_Tp>::_Ref_const _Base;
6639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
6649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit const_mem_fun_ref_t(typename _Base::__fun_type __f) : _Base(__f) {}
6659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
6669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
6679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//mem_fun1_t
6689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Result, class _Tp, class _Arg>
6699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass mem_fun1_t :
6709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  public _Mem_fun_traits<_Result>::_STLP_TEMPLATE _Args1<_Tp,_Arg>::_Ptr {
6719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef typename
6729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _Mem_fun_traits<_Result>::_STLP_TEMPLATE _Args1<_Tp,_Arg>::_Ptr _Base;
6739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
6749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit mem_fun1_t(typename _Base::__fun_type __f) : _Base(__f) {}
6759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
6769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
6779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//const_mem_fun1_t
6789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Result, class _Tp, class _Arg>
6799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass const_mem_fun1_t :
6809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  public _Mem_fun_traits<_Result>::_STLP_TEMPLATE _Args1<_Tp,_Arg>::_Ptr_const {
6819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef typename
6829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _Mem_fun_traits<_Result>::_STLP_TEMPLATE _Args1<_Tp,_Arg>::_Ptr_const _Base;
6839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
6849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit const_mem_fun1_t(typename _Base::__fun_type __f) : _Base(__f) {}
6859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
6869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
6879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//mem_fun1_ref_t
6889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Result, class _Tp, class _Arg>
6899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass mem_fun1_ref_t :
6909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  public _Mem_fun_traits<_Result>::_STLP_TEMPLATE _Args1<_Tp,_Arg>::_Ref {
6919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef typename
6929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _Mem_fun_traits<_Result>::_STLP_TEMPLATE _Args1<_Tp,_Arg>::_Ref _Base;
6939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
6949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit mem_fun1_ref_t(typename _Base::__fun_type __f) : _Base(__f) {}
6959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
6969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
6979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//const_mem_fun1_t
6989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Result, class _Tp, class _Arg>
6999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass const_mem_fun1_ref_t :
7009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  public _Mem_fun_traits<_Result>::_STLP_TEMPLATE _Args1<_Tp,_Arg>::_Ref_const {
7019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef typename
7029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _Mem_fun_traits<_Result>::_STLP_TEMPLATE _Args1<_Tp,_Arg>::_Ref_const _Base;
7039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
7049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit const_mem_fun1_ref_t(typename _Base::__fun_type __f) : _Base(__f) {}
7059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
7069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
7079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
7089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Arg, class _Result>
7099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass pointer_to_unary_function :
7109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic _Ptr_fun1<_Result,_Arg> {
7119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef typename
7129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _Ptr_fun1<_Result,_Arg>::__fun_type __fun_type;
7139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
7149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit pointer_to_unary_function(__fun_type __f)
7159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    : _Ptr_fun1<_Result,_Arg>(__f) {}
7169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
7179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
7189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Arg1, class _Arg2, class _Result>
7199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass pointer_to_binary_function :
7209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic _Ptr_fun2<_Result,_Arg1,_Arg2> {
7219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef typename
7229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _Ptr_fun2<_Result,_Arg1,_Arg2>::__fun_type __fun_type;
7239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
7249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit pointer_to_binary_function(__fun_type __f)
7259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    : _Ptr_fun2<_Result,_Arg1,_Arg2>(__f) {}
7269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
7279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
7289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif /*!_STLP_DONT_RETURN_VOID || !_STLP_NO_CLASS_PARTIAL_SPECIALIZATION || !_STLP_MEMBER_TEMPLATE_CLASSES*/
7299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
7309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
7319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# if !defined (_STLP_MEMBER_POINTER_PARAM_BUG)
7329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Mem_fun adaptor helper functions.  There are only two:
7339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//  mem_fun and mem_fun_ref.  (mem_fun1 and mem_fun1_ref
7349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//  are provided for backward compatibility, but they are no longer
7359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//  part of the C++ standard.)
7369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
7379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Result, class _Tp>
7389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline mem_fun_t<_Result,_Tp>
7399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockmem_fun(_Result (_Tp::*__f)()) { return mem_fun_t<_Result,_Tp>(__f); }
7409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
7419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Result, class _Tp>
7429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline const_mem_fun_t<_Result,_Tp>
7439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockmem_fun(_Result (_Tp::*__f)() const)  { return const_mem_fun_t<_Result,_Tp>(__f); }
7449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
7459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Result, class _Tp>
7469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline mem_fun_ref_t<_Result,_Tp>
7479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockmem_fun_ref(_Result (_Tp::*__f)())  { return mem_fun_ref_t<_Result,_Tp>(__f); }
7489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
7499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Result, class _Tp>
7509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline const_mem_fun_ref_t<_Result,_Tp>
7519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockmem_fun_ref(_Result (_Tp::*__f)() const)  { return const_mem_fun_ref_t<_Result,_Tp>(__f); }
7529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
7539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Result, class _Tp, class _Arg>
7549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline mem_fun1_t<_Result,_Tp,_Arg>
7559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockmem_fun(_Result (_Tp::*__f)(_Arg)) { return mem_fun1_t<_Result,_Tp,_Arg>(__f); }
7569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
7579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Result, class _Tp, class _Arg>
7589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline const_mem_fun1_t<_Result,_Tp,_Arg>
7599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockmem_fun(_Result (_Tp::*__f)(_Arg) const) { return const_mem_fun1_t<_Result,_Tp,_Arg>(__f); }
7609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
7619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Result, class _Tp, class _Arg>
7629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline mem_fun1_ref_t<_Result,_Tp,_Arg>
7639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockmem_fun_ref(_Result (_Tp::*__f)(_Arg)) { return mem_fun1_ref_t<_Result,_Tp,_Arg>(__f); }
7649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
7659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Result, class _Tp, class _Arg>
7669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline const_mem_fun1_ref_t<_Result,_Tp,_Arg>
7679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockmem_fun_ref(_Result (_Tp::*__f)(_Arg) const) { return const_mem_fun1_ref_t<_Result,_Tp,_Arg>(__f); }
7689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
7699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# if !(defined (_STLP_NO_EXTENSIONS) || defined (_STLP_NO_ANACHRONISMS))
7709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//  mem_fun1 and mem_fun1_ref are no longer part of the C++ standard,
7719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//  but they are provided for backward compatibility.
7729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Result, class _Tp, class _Arg>
7739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline mem_fun1_t<_Result,_Tp,_Arg>
7749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockmem_fun1(_Result (_Tp::*__f)(_Arg)) { return mem_fun1_t<_Result,_Tp,_Arg>(__f); }
7759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
7769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Result, class _Tp, class _Arg>
7779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline const_mem_fun1_t<_Result,_Tp,_Arg>
7789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockmem_fun1(_Result (_Tp::*__f)(_Arg) const) { return const_mem_fun1_t<_Result,_Tp,_Arg>(__f); }
7799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
7809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Result, class _Tp, class _Arg>
7819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline mem_fun1_ref_t<_Result,_Tp,_Arg>
7829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockmem_fun1_ref(_Result (_Tp::*__f)(_Arg)) { return mem_fun1_ref_t<_Result,_Tp,_Arg>(__f); }
7839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
7849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Result, class _Tp, class _Arg>
7859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline const_mem_fun1_ref_t<_Result,_Tp,_Arg>
7869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockmem_fun1_ref(_Result (_Tp::*__f)(_Arg) const) { return const_mem_fun1_ref_t<_Result,_Tp,_Arg>(__f); }
7879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
7889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# endif /* _STLP_NO_EXTENSIONS */
7899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
7909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# endif /* _STLP_MEMBER_POINTER_PARAM_BUG */
7919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
7929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Arg, class _Result>
7939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline pointer_to_unary_function<_Arg, _Result>
7949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockptr_fun(_Result (*__f)(_Arg))
7959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return pointer_to_unary_function<_Arg, _Result>(__f); }
7969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
7979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Arg1, class _Arg2, class _Result>
7989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline pointer_to_binary_function<_Arg1,_Arg2,_Result>
7999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockptr_fun(_Result (*__f)(_Arg1, _Arg2))
8009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return pointer_to_binary_function<_Arg1,_Arg2,_Result>(__f); }
8019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
8029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_END_NAMESPACE
803