diff options
Diffstat (limited to 'boost/functional.hpp')
-rw-r--r-- | boost/functional.hpp | 61 |
1 files changed, 47 insertions, 14 deletions
diff --git a/boost/functional.hpp b/boost/functional.hpp index b618485c10..6443078470 100644 --- a/boost/functional.hpp +++ b/boost/functional.hpp @@ -18,6 +18,36 @@ namespace boost { + namespace functional + { + namespace detail { +#if defined(_HAS_AUTO_PTR_ETC) && !_HAS_AUTO_PTR_ETC + // std::unary_function and std::binary_function were both removed + // in C++17. + + template <typename Arg1, typename Result> + struct unary_function + { + typedef Arg1 argument_type; + typedef Result result_type; + }; + + template <typename Arg1, typename Arg2, typename Result> + struct binary_function + { + typedef Arg1 first_argument_type; + typedef Arg2 second_argument_type; + typedef Result result_type; + }; +#else + // Use the standard objects when we have them. + + using std::unary_function; + using std::binary_function; +#endif + } + } + #ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION // -------------------------------------------------------------------------- // The following traits classes allow us to avoid the need for ptr_fun @@ -147,7 +177,7 @@ namespace boost // -------------------------------------------------------------------------- template <class Predicate> class unary_negate - : public std::unary_function<typename unary_traits<Predicate>::argument_type,bool> + : public boost::functional::detail::unary_function<typename unary_traits<Predicate>::argument_type,bool> { public: explicit unary_negate(typename unary_traits<Predicate>::param_type x) @@ -181,7 +211,8 @@ namespace boost // -------------------------------------------------------------------------- template <class Predicate> class binary_negate - : public std::binary_function<typename binary_traits<Predicate>::first_argument_type, + : public boost::functional::detail::binary_function< + typename binary_traits<Predicate>::first_argument_type, typename binary_traits<Predicate>::second_argument_type, bool> { @@ -218,7 +249,8 @@ namespace boost // -------------------------------------------------------------------------- template <class Operation> class binder1st - : public std::unary_function<typename binary_traits<Operation>::second_argument_type, + : public boost::functional::detail::unary_function< + typename binary_traits<Operation>::second_argument_type, typename binary_traits<Operation>::result_type> { public: @@ -264,7 +296,8 @@ namespace boost // -------------------------------------------------------------------------- template <class Operation> class binder2nd - : public std::unary_function<typename binary_traits<Operation>::first_argument_type, + : public boost::functional::detail::unary_function< + typename binary_traits<Operation>::first_argument_type, typename binary_traits<Operation>::result_type> { public: @@ -309,7 +342,7 @@ namespace boost // mem_fun, etc // -------------------------------------------------------------------------- template <class S, class T> - class mem_fun_t : public std::unary_function<T*, S> + class mem_fun_t : public boost::functional::detail::unary_function<T*, S> { public: explicit mem_fun_t(S (T::*p)()) @@ -325,7 +358,7 @@ namespace boost }; template <class S, class T, class A> - class mem_fun1_t : public std::binary_function<T*, A, S> + class mem_fun1_t : public boost::functional::detail::binary_function<T*, A, S> { public: explicit mem_fun1_t(S (T::*p)(A)) @@ -341,7 +374,7 @@ namespace boost }; template <class S, class T> - class const_mem_fun_t : public std::unary_function<const T*, S> + class const_mem_fun_t : public boost::functional::detail::unary_function<const T*, S> { public: explicit const_mem_fun_t(S (T::*p)() const) @@ -357,7 +390,7 @@ namespace boost }; template <class S, class T, class A> - class const_mem_fun1_t : public std::binary_function<const T*, A, S> + class const_mem_fun1_t : public boost::functional::detail::binary_function<const T*, A, S> { public: explicit const_mem_fun1_t(S (T::*p)(A) const) @@ -402,7 +435,7 @@ namespace boost // mem_fun_ref, etc // -------------------------------------------------------------------------- template <class S, class T> - class mem_fun_ref_t : public std::unary_function<T&, S> + class mem_fun_ref_t : public boost::functional::detail::unary_function<T&, S> { public: explicit mem_fun_ref_t(S (T::*p)()) @@ -418,7 +451,7 @@ namespace boost }; template <class S, class T, class A> - class mem_fun1_ref_t : public std::binary_function<T&, A, S> + class mem_fun1_ref_t : public boost::functional::detail::binary_function<T&, A, S> { public: explicit mem_fun1_ref_t(S (T::*p)(A)) @@ -434,7 +467,7 @@ namespace boost }; template <class S, class T> - class const_mem_fun_ref_t : public std::unary_function<const T&, S> + class const_mem_fun_ref_t : public boost::functional::detail::unary_function<const T&, S> { public: explicit const_mem_fun_ref_t(S (T::*p)() const) @@ -451,7 +484,7 @@ namespace boost }; template <class S, class T, class A> - class const_mem_fun1_ref_t : public std::binary_function<const T&, A, S> + class const_mem_fun1_ref_t : public boost::functional::detail::binary_function<const T&, A, S> { public: explicit const_mem_fun1_ref_t(S (T::*p)(A) const) @@ -497,7 +530,7 @@ namespace boost // ptr_fun // -------------------------------------------------------------------------- template <class Arg, class Result> - class pointer_to_unary_function : public std::unary_function<Arg,Result> + class pointer_to_unary_function : public boost::functional::detail::unary_function<Arg,Result> { public: explicit pointer_to_unary_function(Result (*f)(Arg)) @@ -521,7 +554,7 @@ namespace boost } template <class Arg1, class Arg2, class Result> - class pointer_to_binary_function : public std::binary_function<Arg1,Arg2,Result> + class pointer_to_binary_function : public boost::functional::detail::binary_function<Arg1,Arg2,Result> { public: explicit pointer_to_binary_function(Result (*f)(Arg1, Arg2)) |