summaryrefslogtreecommitdiff
path: root/boost/functional.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'boost/functional.hpp')
-rw-r--r--boost/functional.hpp61
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))