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
62e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#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>
118e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottclass _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>
131e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottclass _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>
144e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottclass _Const_mem_fun0_ref : public unary_function<_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>
157e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottclass _Const_mem_fun1_ref : public binary_function<_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
225e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/* Specializations for void return type */
2269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate<class _Tp>
2279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass _Void_mem_fun0_ptr : public unary_function<_Tp*,void> {
2289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprotected:
2299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef void (_Tp::*__fun_type) ();
2309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit _Void_mem_fun0_ptr(__fun_type __f) : _M_f(__f) {}
2319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
2339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  void operator ()(_Tp* __p) const { (__p->*_M_f)(); }
2349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate:
2369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __fun_type _M_f;
2379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
2389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate<class _Tp, class _Arg>
2409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass _Void_mem_fun1_ptr : public binary_function<_Tp*,_Arg,void> {
2419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprotected:
2429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef void (_Tp::*__fun_type) (_Arg);
2439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit _Void_mem_fun1_ptr(__fun_type __f) : _M_f(__f) {}
2449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
2469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  void operator ()(_Tp* __p, _Arg __x) const { (__p->*_M_f)(__x); }
2479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate:
2499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __fun_type _M_f;
2509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
2519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate<class _Tp>
2539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass _Void_const_mem_fun0_ptr : public unary_function<const _Tp*,void> {
2549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprotected:
2559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef void (_Tp::*__fun_type) () const;
2569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit _Void_const_mem_fun0_ptr(__fun_type __f) : _M_f(__f) {}
2579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
2599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  void operator ()(const _Tp* __p) const { (__p->*_M_f)(); }
2609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate:
2629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __fun_type _M_f;
2639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
2649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate<class _Tp, class _Arg>
2669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass _Void_const_mem_fun1_ptr : public binary_function<const _Tp*,_Arg,void> {
2679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprotected:
2689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef void (_Tp::*__fun_type) (_Arg) const;
2699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit _Void_const_mem_fun1_ptr(__fun_type __f) : _M_f(__f) {}
2709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
2729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  void operator ()(const _Tp* __p, _Arg __x) const { (__p->*_M_f)(__x); }
2739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate:
2759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __fun_type _M_f;
2769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
2779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate<class _Tp>
279e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottclass _Void_mem_fun0_ref : public unary_function<_Tp,void> {
2809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprotected:
2819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef void (_Tp::*__fun_type) ();
2829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit _Void_mem_fun0_ref(__fun_type __f) : _M_f(__f) {}
2839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
2859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  void operator ()(_Tp& __p) const { (__p.*_M_f)(); }
2869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate:
2889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __fun_type _M_f;
2899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
2909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate<class _Tp, class _Arg>
292e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottclass _Void_mem_fun1_ref : public binary_function<_Tp,_Arg,void> {
2939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprotected:
2949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef void (_Tp::*__fun_type) (_Arg);
2959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit _Void_mem_fun1_ref(__fun_type __f) : _M_f(__f) {}
2969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
2989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  void operator ()(_Tp& __p, _Arg __x) const { (__p.*_M_f)(__x); }
2999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate:
3019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __fun_type _M_f;
3029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
3039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate<class _Tp>
305e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottclass _Void_const_mem_fun0_ref : public unary_function<_Tp,void> {
3069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprotected:
3079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef void (_Tp::*__fun_type) () const;
3089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit _Void_const_mem_fun0_ref(__fun_type __f) : _M_f(__f) {}
3099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
3119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  void operator ()(const _Tp& __p) const { (__p.*_M_f)(); }
3129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate:
3149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __fun_type _M_f;
3159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
3169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate<class _Tp, class _Arg>
318e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottclass _Void_const_mem_fun1_ref : public binary_function<_Tp,_Arg,void> {
3199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprotected:
3209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef void (_Tp::*__fun_type) (_Arg) const;
3219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit _Void_const_mem_fun1_ref(__fun_type __f) : _M_f(__f) {}
3229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
3249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  void operator ()(const _Tp& __p, _Arg __x) const { (__p.*_M_f)(__x); }
3259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate:
3279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __fun_type _M_f;
3289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
3299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_TEMPLATE_NULL
3319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct _Mem_fun_traits<void> {
3329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  template<class _Tp> struct _Args0 {
3339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    typedef _Void_mem_fun0_ptr<_Tp>             _Ptr;
3349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    typedef _Void_const_mem_fun0_ptr<_Tp>       _Ptr_const;
3359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    typedef _Void_mem_fun0_ref<_Tp>             _Ref;
3369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    typedef _Void_const_mem_fun0_ref<_Tp>       _Ref_const;
3379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  };
3389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  template<class _Tp, class _Arg> struct _Args1 {
3409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    typedef _Void_mem_fun1_ptr<_Tp,_Arg>        _Ptr;
3419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    typedef _Void_const_mem_fun1_ptr<_Tp,_Arg>  _Ptr_const;
3429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    typedef _Void_mem_fun1_ref<_Tp,_Arg>        _Ref;
3439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    typedef _Void_const_mem_fun1_ref<_Tp,_Arg>  _Ref_const;
3449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  };
3459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
3469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate<class _Arg>
3489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass _Ptr_void_fun1_base : public unary_function<_Arg, void> {
3499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprotected:
3509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef void (*__fun_type) (_Arg);
3519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit _Ptr_void_fun1_base(__fun_type __f) : _M_f(__f) {}
3529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
3549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  void operator()(_Arg __x) const { _M_f(__x); }
3559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate:
3579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __fun_type _M_f;
3589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
3599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Arg1, class _Arg2>
3619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass _Ptr_void_fun2_base : public binary_function<_Arg1,_Arg2,void> {
3629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprotected:
3639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef void (*__fun_type) (_Arg1, _Arg2);
3649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit _Ptr_void_fun2_base(__fun_type __f) : _M_f(__f) {}
3659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
3679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  void operator()(_Arg1 __x, _Arg2 __y) const { _M_f(__x, __y); }
3689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate:
3709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __fun_type _M_f;
3719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
3729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_TEMPLATE_NULL
3749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct _Ptr_fun_traits<void> {
3759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  template<class _Arg> struct _Args1 {
3769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    typedef _Ptr_void_fun1_base<_Arg> _Fun;
3779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  };
3789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  template<class _Arg1, class _Arg2> struct _Args2 {
3809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    typedef _Ptr_void_fun2_base<_Arg1,_Arg2> _Fun;
3819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  };
3829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
3839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// pavel: need extra level of inheritance here since MSVC++ does not
3859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// accept traits-based fake partial specialization for template
3869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// arguments other than first
3879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate<class _Result, class _Arg>
3899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass _Ptr_fun1 :
3909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  public _Ptr_fun_traits<_Result>::_STLP_TEMPLATE _Args1<_Arg>::_Fun {
3919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprotected:
3929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef typename _Ptr_fun_traits<_Result>::_STLP_TEMPLATE _Args1<_Arg>::_Fun _Base;
3939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit _Ptr_fun1(typename _Base::__fun_type __f) : _Base(__f) {}
3949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
3959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate<class _Result, class _Arg1, class _Arg2>
3979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass _Ptr_fun2 :
3989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  public _Ptr_fun_traits<_Result>::_STLP_TEMPLATE _Args2<_Arg1,_Arg2>::_Fun {
3999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprotected:
4009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef typename _Ptr_fun_traits<_Result>::_STLP_TEMPLATE _Args2<_Arg1,_Arg2>::_Fun _Base;
4019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit _Ptr_fun2(typename _Base::__fun_type __f) : _Base(__f) {}
4029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
4039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
404e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scotttemplate <class _Result, class _Tp>
405e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottclass mem_fun_t :
406e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  public _Mem_fun_traits<_Result>::_STLP_TEMPLATE _Args0<_Tp>::_Ptr {
407e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  typedef typename
408e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _Mem_fun_traits<_Result>::_STLP_TEMPLATE _Args0<_Tp>::_Ptr _Base;
409e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottpublic:
410e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  explicit mem_fun_t(typename _Base::__fun_type __f) : _Base(__f) {}
411e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott};
4129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
413e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scotttemplate <class _Result, class _Tp>
414e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottclass const_mem_fun_t :
415e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  public _Mem_fun_traits<_Result>::_STLP_TEMPLATE _Args0<_Tp>::_Ptr_const {
416e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  typedef typename
417e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _Mem_fun_traits<_Result>::_STLP_TEMPLATE _Args0<_Tp>::_Ptr_const _Base;
418e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottpublic:
419e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  explicit const_mem_fun_t(typename _Base::__fun_type __f) : _Base(__f) {}
420e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott};
421e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
422e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scotttemplate <class _Result, class _Tp>
423e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottclass mem_fun_ref_t :
424e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  public _Mem_fun_traits<_Result>::_STLP_TEMPLATE _Args0<_Tp>::_Ref {
425e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  typedef typename
426e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _Mem_fun_traits<_Result>::_STLP_TEMPLATE _Args0<_Tp>::_Ref _Base;
427e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottpublic:
428e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  explicit mem_fun_ref_t(typename _Base::__fun_type __f) : _Base(__f) {}
429e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott};
4309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
431e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scotttemplate <class _Result, class _Tp>
432e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottclass const_mem_fun_ref_t :
433e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  public _Mem_fun_traits<_Result>::_STLP_TEMPLATE _Args0<_Tp>::_Ref_const {
434e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  typedef typename
435e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _Mem_fun_traits<_Result>::_STLP_TEMPLATE _Args0<_Tp>::_Ref_const _Base;
436e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottpublic:
437e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  explicit const_mem_fun_ref_t(typename _Base::__fun_type __f) : _Base(__f) {}
438e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott};
4399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
440e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scotttemplate <class _Result, class _Tp, class _Arg>
441e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottclass mem_fun1_t :
442e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  public _Mem_fun_traits<_Result>::_STLP_TEMPLATE _Args1<_Tp,_Arg>::_Ptr {
443e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  typedef typename
444e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _Mem_fun_traits<_Result>::_STLP_TEMPLATE _Args1<_Tp,_Arg>::_Ptr _Base;
445e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottpublic:
446e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  explicit mem_fun1_t(typename _Base::__fun_type __f) : _Base(__f) {}
447e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott};
448e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
449e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scotttemplate <class _Result, class _Tp, class _Arg>
450e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottclass const_mem_fun1_t :
451e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  public _Mem_fun_traits<_Result>::_STLP_TEMPLATE _Args1<_Tp,_Arg>::_Ptr_const {
452e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  typedef typename
453e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _Mem_fun_traits<_Result>::_STLP_TEMPLATE _Args1<_Tp,_Arg>::_Ptr_const _Base;
454e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottpublic:
455e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  explicit const_mem_fun1_t(typename _Base::__fun_type __f) : _Base(__f) {}
456e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott};
457e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
458e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scotttemplate <class _Result, class _Tp, class _Arg>
459e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottclass mem_fun1_ref_t :
460e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  public _Mem_fun_traits<_Result>::_STLP_TEMPLATE _Args1<_Tp,_Arg>::_Ref {
461e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  typedef typename
462e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _Mem_fun_traits<_Result>::_STLP_TEMPLATE _Args1<_Tp,_Arg>::_Ref _Base;
463e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottpublic:
464e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  explicit mem_fun1_ref_t(typename _Base::__fun_type __f) : _Base(__f) {}
465e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott};
466e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
467e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scotttemplate <class _Result, class _Tp, class _Arg>
468e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottclass const_mem_fun1_ref_t :
469e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  public _Mem_fun_traits<_Result>::_STLP_TEMPLATE _Args1<_Tp,_Arg>::_Ref_const {
470e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  typedef typename
471e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _Mem_fun_traits<_Result>::_STLP_TEMPLATE _Args1<_Tp,_Arg>::_Ref_const _Base;
472e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottpublic:
473e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  explicit const_mem_fun1_ref_t(typename _Base::__fun_type __f) : _Base(__f) {}
474e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott};
475e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
476e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scotttemplate <class _Arg, class _Result>
477e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottclass pointer_to_unary_function :
478e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  public _Ptr_fun1<_Result,_Arg> {
479e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  typedef typename
480e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _Ptr_fun1<_Result,_Arg>::__fun_type __fun_type;
481e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottpublic:
482e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  explicit pointer_to_unary_function(__fun_type __f)
483e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    : _Ptr_fun1<_Result,_Arg>(__f) {}
484e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott};
485e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
486e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scotttemplate <class _Arg1, class _Arg2, class _Result>
487e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottclass pointer_to_binary_function :
488e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  public _Ptr_fun2<_Result,_Arg1,_Arg2> {
489e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  typedef typename
490e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _Ptr_fun2<_Result,_Arg1,_Arg2>::__fun_type __fun_type;
491e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottpublic:
492e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  explicit pointer_to_binary_function(__fun_type __f)
493e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    : _Ptr_fun2<_Result,_Arg1,_Arg2>(__f) {}
494e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott};
495e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
496e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#else
4979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
4989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Ret, class _Tp>
4999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass mem_fun_t : public unary_function<_Tp*,_Ret> {
5009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef _Ret (_Tp::*__fun_type)(void);
5019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
5029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit mem_fun_t(__fun_type __pf) : _M_f(__pf) {}
5039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Ret operator()(_Tp* __p) const { return (__p->*_M_f)(); }
5049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate:
5059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __fun_type _M_f;
5069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
5079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
5089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Ret, class _Tp>
5099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass const_mem_fun_t : public unary_function<const _Tp*,_Ret> {
5109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef _Ret (_Tp::*__fun_type)(void) const;
5119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
5129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit const_mem_fun_t(__fun_type __pf) : _M_f(__pf) {}
5139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Ret operator()(const _Tp* __p) const { return (__p->*_M_f)(); }
5149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate:
5159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __fun_type _M_f;
5169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
5179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
5189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Ret, class _Tp>
5199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass mem_fun_ref_t : public unary_function<_Tp,_Ret> {
5209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef _Ret (_Tp::*__fun_type)(void);
5219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
5229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit mem_fun_ref_t(__fun_type __pf) : _M_f(__pf) {}
5239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Ret operator()(_Tp& __r) const { return (__r.*_M_f)(); }
5249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate:
5259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __fun_type _M_f;
5269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
5279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
5289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Ret, class _Tp>
5299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass const_mem_fun_ref_t : public unary_function<_Tp,_Ret> {
5309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef _Ret (_Tp::*__fun_type)(void) const;
5319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
5329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit const_mem_fun_ref_t(__fun_type __pf) : _M_f(__pf) {}
5339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Ret operator()(const _Tp& __r) const { return (__r.*_M_f)(); }
5349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate:
5359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __fun_type _M_f;
5369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
5379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
5389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Ret, class _Tp, class _Arg>
5399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass mem_fun1_t : public binary_function<_Tp*,_Arg,_Ret> {
5409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef _Ret (_Tp::*__fun_type)(_Arg);
5419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
5429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit mem_fun1_t(__fun_type __pf) : _M_f(__pf) {}
5439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Ret operator()(_Tp* __p, _Arg __x) const { return (__p->*_M_f)(__x); }
5449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate:
5459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __fun_type _M_f;
5469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
5479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
5489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Ret, class _Tp, class _Arg>
5499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass const_mem_fun1_t : public binary_function<const _Tp*,_Arg,_Ret> {
5509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef _Ret (_Tp::*__fun_type)(_Arg) const;
5519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
5529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit const_mem_fun1_t(__fun_type __pf) : _M_f(__pf) {}
5539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Ret operator()(const _Tp* __p, _Arg __x) const
5549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    { return (__p->*_M_f)(__x); }
5559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate:
5569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __fun_type _M_f;
5579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
5589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
5599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Ret, class _Tp, class _Arg>
5609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass mem_fun1_ref_t : public binary_function<_Tp,_Arg,_Ret> {
5619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef _Ret (_Tp::*__fun_type)(_Arg);
5629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
5639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit mem_fun1_ref_t(__fun_type __pf) : _M_f(__pf) {}
5649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Ret operator()(_Tp& __r, _Arg __x) const { return (__r.*_M_f)(__x); }
5659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate:
5669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __fun_type _M_f;
5679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
5689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
5699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Ret, class _Tp, class _Arg>
5709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass const_mem_fun1_ref_t : public binary_function<_Tp,_Arg,_Ret> {
5719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef _Ret (_Tp::*__fun_type)(_Arg) const;
5729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
5739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit const_mem_fun1_ref_t(__fun_type __pf) : _M_f(__pf) {}
5749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Ret operator()(const _Tp& __r, _Arg __x) const { return (__r.*_M_f)(__x); }
5759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate:
5769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __fun_type _M_f;
5779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
5789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
5799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Arg, class _Result>
5809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass pointer_to_unary_function : public unary_function<_Arg, _Result> {
5819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprotected:
5829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Result (*_M_ptr)(_Arg);
5839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
5849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  pointer_to_unary_function() {}
5859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit pointer_to_unary_function(_Result (*__x)(_Arg)) : _M_ptr(__x) {}
5869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Result operator()(_Arg __x) const { return _M_ptr(__x); }
5879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
5889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
5899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Arg1, class _Arg2, class _Result>
5909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass pointer_to_binary_function :
5919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  public binary_function<_Arg1,_Arg2,_Result> {
5929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprotected:
5939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _Result (*_M_ptr)(_Arg1, _Arg2);
5949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
5959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    pointer_to_binary_function() {}
5969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    explicit pointer_to_binary_function(_Result (*__x)(_Arg1, _Arg2))
5979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      : _M_ptr(__x) {}
5989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _Result operator()(_Arg1 __x, _Arg2 __y) const {
5999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      return _M_ptr(__x, __y);
6009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    }
6019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
6029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
603e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  if defined (_STLP_DONT_RETURN_VOID) && !defined (_STLP_NO_CLASS_PARTIAL_SPECIALIZATION)
604e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott//Partial specializations for the void type
6059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp>
6069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass mem_fun_t<void, _Tp> : public unary_function<_Tp*,void> {
6079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef void (_Tp::*__fun_type)(void);
6089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
6099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit mem_fun_t _STLP_PSPEC2(void,_Tp) (__fun_type __pf) : _M_f(__pf) {}
6109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  void operator()(_Tp* __p) const { (__p->*_M_f)(); }
6119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate:
6129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __fun_type _M_f;
6139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
6149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
6159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp>
6169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass const_mem_fun_t<void, _Tp> : public unary_function<const _Tp*,void> {
6179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef void (_Tp::*__fun_type)(void) const;
6189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
6199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit const_mem_fun_t _STLP_PSPEC2(void,_Tp) (__fun_type __pf) : _M_f(__pf) {}
6209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  void operator()(const _Tp* __p) const { (__p->*_M_f)(); }
6219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate:
6229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __fun_type _M_f;
6239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
6249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
6259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp>
6269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass mem_fun_ref_t<void, _Tp> : public unary_function<_Tp,void> {
6279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef void (_Tp::*__fun_type)(void);
6289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
6299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit mem_fun_ref_t _STLP_PSPEC2(void,_Tp) (__fun_type __pf) : _M_f(__pf) {}
6309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  void operator()(_Tp& __r) const { (__r.*_M_f)(); }
6319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate:
6329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __fun_type _M_f;
6339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
6349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
6359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp>
6369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass const_mem_fun_ref_t<void, _Tp> : public unary_function<_Tp,void> {
6379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef void (_Tp::*__fun_type)(void) const;
6389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
6399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit const_mem_fun_ref_t _STLP_PSPEC2(void,_Tp) (__fun_type __pf) : _M_f(__pf) {}
6409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  void operator()(const _Tp& __r) const { (__r.*_M_f)(); }
6419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate:
6429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __fun_type _M_f;
6439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
6449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
6459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp, class _Arg>
6469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass mem_fun1_t<void, _Tp, _Arg> : public binary_function<_Tp*,_Arg,void> {
6479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef void (_Tp::*__fun_type)(_Arg);
6489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
6499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit mem_fun1_t _STLP_PSPEC3(void,_Tp,_Arg) (__fun_type __pf) : _M_f(__pf) {}
6509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  void operator()(_Tp* __p, _Arg __x) const { (__p->*_M_f)(__x); }
6519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate:
6529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __fun_type _M_f;
6539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
6549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
6559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp, class _Arg>
6569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass const_mem_fun1_t<void, _Tp, _Arg>
6579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  : public binary_function<const _Tp*,_Arg,void> {
6589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef void (_Tp::*__fun_type)(_Arg) const;
6599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
6609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit const_mem_fun1_t _STLP_PSPEC3(void,_Tp,_Arg) (__fun_type __pf) : _M_f(__pf) {}
6619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  void operator()(const _Tp* __p, _Arg __x) const { (__p->*_M_f)(__x); }
6629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate:
6639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __fun_type _M_f;
6649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
6659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
6669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp, class _Arg>
6679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass mem_fun1_ref_t<void, _Tp, _Arg>
6689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  : public binary_function<_Tp,_Arg,void> {
6699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef void (_Tp::*__fun_type)(_Arg);
6709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
6719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit mem_fun1_ref_t _STLP_PSPEC3(void,_Tp,_Arg) (__fun_type __pf) : _M_f(__pf) {}
6729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  void operator()(_Tp& __r, _Arg __x) const { (__r.*_M_f)(__x); }
6739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate:
6749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __fun_type _M_f;
6759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
6769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
6779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp, class _Arg>
6789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass const_mem_fun1_ref_t<void, _Tp, _Arg>
6799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  : public binary_function<_Tp,_Arg,void> {
6809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef void (_Tp::*__fun_type)(_Arg) const;
6819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
6829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit const_mem_fun1_ref_t _STLP_PSPEC3(void,_Tp,_Arg) (__fun_type __pf) : _M_f(__pf) {}
6839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  void operator()(const _Tp& __r, _Arg __x) const { (__r.*_M_f)(__x); }
6849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate:
6859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __fun_type _M_f;
6869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
6879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
6889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Arg>
6899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass pointer_to_unary_function<_Arg, void> : public unary_function<_Arg, void> {
6909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef void (*__fun_type)(_Arg);
6919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __fun_type _M_ptr;
6929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
6939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  pointer_to_unary_function() {}
6949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit pointer_to_unary_function(__fun_type __x) : _M_ptr(__x) {}
6959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  void operator()(_Arg __x) const { _M_ptr(__x); }
6969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
6979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
6989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Arg1, class _Arg2>
6999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass pointer_to_binary_function<_Arg1, _Arg2, void> : public binary_function<_Arg1,_Arg2,void> {
7009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef void (*__fun_type)(_Arg1, _Arg2);
7019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __fun_type _M_ptr;
7029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
7039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  pointer_to_binary_function() {}
7049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit pointer_to_binary_function(__fun_type __x) : _M_ptr(__x) {}
7059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  void operator()(_Arg1 __x, _Arg2 __y) const { _M_ptr(__x, __y); }
7069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
7079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
708e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  endif
7099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
710e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
7119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
712e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if !defined (_STLP_MEMBER_POINTER_PARAM_BUG)
7139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Mem_fun adaptor helper functions.  There are only two:
7149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//  mem_fun and mem_fun_ref.  (mem_fun1 and mem_fun1_ref
7159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//  are provided for backward compatibility, but they are no longer
7169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//  part of the C++ standard.)
7179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
7189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Result, class _Tp>
7199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline mem_fun_t<_Result,_Tp>
7209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockmem_fun(_Result (_Tp::*__f)()) { return mem_fun_t<_Result,_Tp>(__f); }
7219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
7229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Result, class _Tp>
7239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline const_mem_fun_t<_Result,_Tp>
7249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockmem_fun(_Result (_Tp::*__f)() const)  { return const_mem_fun_t<_Result,_Tp>(__f); }
7259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
7269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Result, class _Tp>
7279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline mem_fun_ref_t<_Result,_Tp>
7289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockmem_fun_ref(_Result (_Tp::*__f)())  { return mem_fun_ref_t<_Result,_Tp>(__f); }
7299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
7309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Result, class _Tp>
7319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline const_mem_fun_ref_t<_Result,_Tp>
7329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockmem_fun_ref(_Result (_Tp::*__f)() const)  { return const_mem_fun_ref_t<_Result,_Tp>(__f); }
7339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
7349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Result, class _Tp, class _Arg>
7359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline mem_fun1_t<_Result,_Tp,_Arg>
7369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockmem_fun(_Result (_Tp::*__f)(_Arg)) { return mem_fun1_t<_Result,_Tp,_Arg>(__f); }
7379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
7389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Result, class _Tp, class _Arg>
7399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline const_mem_fun1_t<_Result,_Tp,_Arg>
7409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockmem_fun(_Result (_Tp::*__f)(_Arg) const) { return const_mem_fun1_t<_Result,_Tp,_Arg>(__f); }
7419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
7429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Result, class _Tp, class _Arg>
7439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline mem_fun1_ref_t<_Result,_Tp,_Arg>
7449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockmem_fun_ref(_Result (_Tp::*__f)(_Arg)) { return mem_fun1_ref_t<_Result,_Tp,_Arg>(__f); }
7459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
7469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Result, class _Tp, class _Arg>
7479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline const_mem_fun1_ref_t<_Result,_Tp,_Arg>
7489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockmem_fun_ref(_Result (_Tp::*__f)(_Arg) const) { return const_mem_fun1_ref_t<_Result,_Tp,_Arg>(__f); }
7499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
750e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  if !(defined (_STLP_NO_EXTENSIONS) || defined (_STLP_NO_ANACHRONISMS))
7519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//  mem_fun1 and mem_fun1_ref are no longer part of the C++ standard,
7529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//  but they are provided for backward compatibility.
7539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Result, class _Tp, class _Arg>
7549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline mem_fun1_t<_Result,_Tp,_Arg>
7559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockmem_fun1(_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_fun1(_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_fun1_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_fun1_ref(_Result (_Tp::*__f)(_Arg) const) { return const_mem_fun1_ref_t<_Result,_Tp,_Arg>(__f); }
7689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
769e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  endif
7709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
771e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
7729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
7739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Arg, class _Result>
7749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline pointer_to_unary_function<_Arg, _Result>
7759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockptr_fun(_Result (*__f)(_Arg))
7769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return pointer_to_unary_function<_Arg, _Result>(__f); }
7779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
7789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Arg1, class _Arg2, class _Result>
7799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline pointer_to_binary_function<_Arg1,_Arg2,_Result>
7809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockptr_fun(_Result (*__f)(_Arg1, _Arg2))
7819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return pointer_to_binary_function<_Arg1,_Arg2,_Result>(__f); }
7829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
7839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_END_NAMESPACE
784