diff --git a/libcxx/docs/Cxx2aStatus.rst b/libcxx/docs/Cxx2aStatus.rst --- a/libcxx/docs/Cxx2aStatus.rst +++ b/libcxx/docs/Cxx2aStatus.rst @@ -43,7 +43,7 @@ .. [#note-P0600] P0600: The missing bits in P0600 are in |sect|\ [mem.res.class], |sect|\ [mem.poly.allocator.class], and |sect|\ [container.node.overview]. .. [#note-P0966] P0966: It was previously erroneously marked as complete in version 8.0. See `bug 45368 `__. - .. [#note-P0619] P0619: Only sections D.9 and D.10 are implemented. Section D.8 is partly implemented. Sections D.4, D.7, D.11, D.12, and D.14 remain undone. + .. [#note-P0619] P0619: Only sections D.8, D.9, and D.10 are implemented. Sections D.4, D.7, D.11, D.12, and D.14 remain undone. .. _issues-status-cxx2a: diff --git a/libcxx/docs/UsingLibcxx.rst b/libcxx/docs/UsingLibcxx.rst --- a/libcxx/docs/UsingLibcxx.rst +++ b/libcxx/docs/UsingLibcxx.rst @@ -256,6 +256,11 @@ It also re-enables the library-provided explicit specializations of `allocator` and `allocator`. +**_LIBCPP_ENABLE_CXX20_REMOVED_BINDER_TYPEDEFS**: + This macro is used to re-enable the `argument_type`, `result_type`, + `first_argument_type`, and `second_argument_type` members of class + templates such as `plus`, `logical_not`, `hash`, and `owner_less`. + **_LIBCPP_ENABLE_CXX20_REMOVED_NEGATORS**: This macro is used to re-enable `not1`, `not2`, `unary_negate`, and `binary_negate`. diff --git a/libcxx/include/__config b/libcxx/include/__config --- a/libcxx/include/__config +++ b/libcxx/include/__config @@ -94,6 +94,9 @@ # define _LIBCPP_ABI_BAD_FUNCTION_CALL_KEY_FUNCTION // Enable optimized version of __do_get_(un)signed which avoids redundant copies. # define _LIBCPP_ABI_OPTIMIZED_LOCALE_NUM_GET +// In C++20 and later, don't derive std::plus from std::binary_function, +// nor std::negate from std::unary_function. +# define _LIBCPP_ABI_NO_BINDER_BASES // Give reverse_iterator one data member of type T, not two. // Also, in C++17 and later, don't derive iterator types from std::iterator. # define _LIBCPP_ABI_NO_ITERATOR_BASES @@ -1360,6 +1363,7 @@ #if defined(_LIBCPP_ENABLE_CXX20_REMOVED_FEATURES) #define _LIBCPP_ENABLE_CXX20_REMOVED_ALLOCATOR_MEMBERS +#define _LIBCPP_ENABLE_CXX20_REMOVED_BINDER_TYPEDEFS #define _LIBCPP_ENABLE_CXX20_REMOVED_NEGATORS #define _LIBCPP_ENABLE_CXX20_REMOVED_RAW_STORAGE_ITERATOR #endif // _LIBCPP_ENABLE_CXX20_REMOVED_FEATURES diff --git a/libcxx/include/__functional_base b/libcxx/include/__functional_base --- a/libcxx/include/__functional_base +++ b/libcxx/include/__functional_base @@ -42,14 +42,24 @@ static const bool value = sizeof(__test<_Tp>(0)) == 1; }; +_LIBCPP_SUPPRESS_DEPRECATED_PUSH #if _LIBCPP_STD_VER > 11 template #else template #endif -struct _LIBCPP_TEMPLATE_VIS less : binary_function<_Tp, _Tp, bool> +struct _LIBCPP_TEMPLATE_VIS less +#if !defined(_LIBCPP_ABI_NO_BINDER_BASES) + : binary_function<_Tp, _Tp, bool> +#endif { +_LIBCPP_SUPPRESS_DEPRECATED_POP typedef bool __result_type; // used by valarray +#if _LIBCPP_STD_VER <= 17 || defined(_LIBCPP_ENABLE_CXX20_REMOVED_BINDER_TYPEDEFS) + _LIBCPP_DEPRECATED_IN_CXX17 typedef bool result_type; + _LIBCPP_DEPRECATED_IN_CXX17 typedef _Tp first_argument_type; + _LIBCPP_DEPRECATED_IN_CXX17 typedef _Tp second_argument_type; +#endif _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY bool operator()(const _Tp& __x, const _Tp& __y) const {return __x < __y;} @@ -373,7 +383,9 @@ template class _LIBCPP_TEMPLATE_VIS reference_wrapper +#if _LIBCPP_STD_VER <= 17 || !defined(_LIBCPP_ABI_NO_BINDER_BASES) : public __weak_result_type<_Tp> +#endif { public: // types diff --git a/libcxx/include/__memory/shared_ptr.h b/libcxx/include/__memory/shared_ptr.h --- a/libcxx/include/__memory/shared_ptr.h +++ b/libcxx/include/__memory/shared_ptr.h @@ -1594,11 +1594,20 @@ template struct owner_less; #endif + +_LIBCPP_SUPPRESS_DEPRECATED_PUSH template struct _LIBCPP_TEMPLATE_VIS owner_less > +#if !defined(_LIBCPP_ABI_NO_BINDER_BASES) : binary_function, shared_ptr<_Tp>, bool> +#endif { - typedef bool result_type; +_LIBCPP_SUPPRESS_DEPRECATED_POP +#if _LIBCPP_STD_VER <= 17 || defined(_LIBCPP_ENABLE_CXX20_REMOVED_BINDER_TYPEDEFS) + _LIBCPP_DEPRECATED_IN_CXX17 typedef bool result_type; + _LIBCPP_DEPRECATED_IN_CXX17 typedef shared_ptr<_Tp> first_argument_type; + _LIBCPP_DEPRECATED_IN_CXX17 typedef shared_ptr<_Tp> second_argument_type; +#endif _LIBCPP_INLINE_VISIBILITY bool operator()(shared_ptr<_Tp> const& __x, shared_ptr<_Tp> const& __y) const _NOEXCEPT {return __x.owner_before(__y);} @@ -1610,11 +1619,19 @@ {return __x.owner_before(__y);} }; +_LIBCPP_SUPPRESS_DEPRECATED_PUSH template struct _LIBCPP_TEMPLATE_VIS owner_less > +#if !defined(_LIBCPP_ABI_NO_BINDER_BASES) : binary_function, weak_ptr<_Tp>, bool> +#endif { - typedef bool result_type; +_LIBCPP_SUPPRESS_DEPRECATED_POP +#if _LIBCPP_STD_VER <= 17 || defined(_LIBCPP_ENABLE_CXX20_REMOVED_BINDER_TYPEDEFS) + _LIBCPP_DEPRECATED_IN_CXX17 typedef bool result_type; + _LIBCPP_DEPRECATED_IN_CXX17 typedef weak_ptr<_Tp> first_argument_type; + _LIBCPP_DEPRECATED_IN_CXX17 typedef weak_ptr<_Tp> second_argument_type; +#endif _LIBCPP_INLINE_VISIBILITY bool operator()( weak_ptr<_Tp> const& __x, weak_ptr<_Tp> const& __y) const _NOEXCEPT {return __x.owner_before(__y);} @@ -1690,11 +1707,13 @@ template struct _LIBCPP_TEMPLATE_VIS hash > { - typedef shared_ptr<_Tp> argument_type; - typedef size_t result_type; +#if _LIBCPP_STD_VER <= 17 || defined(_LIBCPP_ENABLE_CXX20_REMOVED_BINDER_TYPEDEFS) + _LIBCPP_DEPRECATED_IN_CXX17 typedef shared_ptr<_Tp> argument_type; + _LIBCPP_DEPRECATED_IN_CXX17 typedef size_t result_type; +#endif _LIBCPP_INLINE_VISIBILITY - result_type operator()(const argument_type& __ptr) const _NOEXCEPT + size_t operator()(const shared_ptr<_Tp>& __ptr) const _NOEXCEPT { return hash::element_type*>()(__ptr.get()); } diff --git a/libcxx/include/__memory/unique_ptr.h b/libcxx/include/__memory/unique_ptr.h --- a/libcxx/include/__memory/unique_ptr.h +++ b/libcxx/include/__memory/unique_ptr.h @@ -750,12 +750,15 @@ unique_ptr<_Tp, _Dp>, typename unique_ptr<_Tp, _Dp>::pointer> > #endif { - typedef unique_ptr<_Tp, _Dp> argument_type; - typedef size_t result_type; +#if _LIBCPP_STD_VER <= 17 || defined(_LIBCPP_ENABLE_CXX20_REMOVED_BINDER_TYPEDEFS) + _LIBCPP_DEPRECATED_IN_CXX17 typedef unique_ptr<_Tp, _Dp> argument_type; + _LIBCPP_DEPRECATED_IN_CXX17 typedef size_t result_type; +#endif + _LIBCPP_INLINE_VISIBILITY - result_type operator()(const argument_type& __ptr) const + size_t operator()(const unique_ptr<_Tp, _Dp>& __ptr) const { - typedef typename argument_type::pointer pointer; + typedef typename unique_ptr<_Tp, _Dp>::pointer pointer; return hash()(__ptr.get()); } }; diff --git a/libcxx/include/functional b/libcxx/include/functional --- a/libcxx/include/functional +++ b/libcxx/include/functional @@ -76,116 +76,97 @@ template using unwrap_ref_decay_t = typename unwrap_ref_decay::type; // since C++20 template // in C++14 -struct plus : binary_function -{ +struct plus { T operator()(const T& x, const T& y) const; }; template // in C++14 -struct minus : binary_function -{ +struct minus { T operator()(const T& x, const T& y) const; }; template // in C++14 -struct multiplies : binary_function -{ +struct multiplies { T operator()(const T& x, const T& y) const; }; template // in C++14 -struct divides : binary_function -{ +struct divides { T operator()(const T& x, const T& y) const; }; template // in C++14 -struct modulus : binary_function -{ +struct modulus { T operator()(const T& x, const T& y) const; }; template // in C++14 -struct negate : unary_function -{ +struct negate { T operator()(const T& x) const; }; template // in C++14 -struct equal_to : binary_function -{ +struct equal_to { bool operator()(const T& x, const T& y) const; }; template // in C++14 -struct not_equal_to : binary_function -{ +struct not_equal_to { bool operator()(const T& x, const T& y) const; }; template // in C++14 -struct greater : binary_function -{ +struct greater { bool operator()(const T& x, const T& y) const; }; template // in C++14 -struct less : binary_function -{ +struct less { bool operator()(const T& x, const T& y) const; }; template // in C++14 -struct greater_equal : binary_function -{ +struct greater_equal { bool operator()(const T& x, const T& y) const; }; template // in C++14 -struct less_equal : binary_function -{ +struct less_equal { bool operator()(const T& x, const T& y) const; }; template // in C++14 -struct logical_and : binary_function -{ +struct logical_and { bool operator()(const T& x, const T& y) const; }; template // in C++14 -struct logical_or : binary_function -{ +struct logical_or { bool operator()(const T& x, const T& y) const; }; template // in C++14 -struct logical_not : unary_function -{ +struct logical_not { bool operator()(const T& x) const; }; template // in C++14 -struct bit_and : binary_function -{ +struct bit_and { T operator()(const T& x, const T& y) const; }; template // in C++14 -struct bit_or : binary_function -{ +struct bit_or { T operator()(const T& x, const T& y) const; }; template // in C++14 -struct bit_xor : binary_function -{ +struct bit_xor { T operator()(const T& x, const T& y) const; }; template // C++14 -struct bit_not : unary_function -{ +struct bit_not { T operator()(const T& x) const; }; @@ -524,14 +505,24 @@ _LIBCPP_BEGIN_NAMESPACE_STD +_LIBCPP_SUPPRESS_DEPRECATED_PUSH #if _LIBCPP_STD_VER > 11 template #else template #endif -struct _LIBCPP_TEMPLATE_VIS plus : binary_function<_Tp, _Tp, _Tp> +struct _LIBCPP_TEMPLATE_VIS plus +#if !defined(_LIBCPP_ABI_NO_BINDER_BASES) + : binary_function<_Tp, _Tp, _Tp> +#endif { +_LIBCPP_SUPPRESS_DEPRECATED_POP typedef _Tp __result_type; // used by valarray +#if _LIBCPP_STD_VER <= 17 || defined(_LIBCPP_ENABLE_CXX20_REMOVED_BINDER_TYPEDEFS) + _LIBCPP_DEPRECATED_IN_CXX17 typedef _Tp result_type; + _LIBCPP_DEPRECATED_IN_CXX17 typedef _Tp first_argument_type; + _LIBCPP_DEPRECATED_IN_CXX17 typedef _Tp second_argument_type; +#endif _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY _Tp operator()(const _Tp& __x, const _Tp& __y) const {return __x + __y;} @@ -552,14 +543,24 @@ #endif +_LIBCPP_SUPPRESS_DEPRECATED_PUSH #if _LIBCPP_STD_VER > 11 template #else template #endif -struct _LIBCPP_TEMPLATE_VIS minus : binary_function<_Tp, _Tp, _Tp> +struct _LIBCPP_TEMPLATE_VIS minus +#if !defined(_LIBCPP_ABI_NO_BINDER_BASES) + : binary_function<_Tp, _Tp, _Tp> +#endif { +_LIBCPP_SUPPRESS_DEPRECATED_POP typedef _Tp __result_type; // used by valarray +#if _LIBCPP_STD_VER <= 17 || defined(_LIBCPP_ENABLE_CXX20_REMOVED_BINDER_TYPEDEFS) + _LIBCPP_DEPRECATED_IN_CXX17 typedef _Tp result_type; + _LIBCPP_DEPRECATED_IN_CXX17 typedef _Tp first_argument_type; + _LIBCPP_DEPRECATED_IN_CXX17 typedef _Tp second_argument_type; +#endif _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY _Tp operator()(const _Tp& __x, const _Tp& __y) const {return __x - __y;} @@ -580,14 +581,24 @@ #endif +_LIBCPP_SUPPRESS_DEPRECATED_PUSH #if _LIBCPP_STD_VER > 11 template #else template #endif -struct _LIBCPP_TEMPLATE_VIS multiplies : binary_function<_Tp, _Tp, _Tp> +struct _LIBCPP_TEMPLATE_VIS multiplies +#if !defined(_LIBCPP_ABI_NO_BINDER_BASES) + : binary_function<_Tp, _Tp, _Tp> +#endif { +_LIBCPP_SUPPRESS_DEPRECATED_POP typedef _Tp __result_type; // used by valarray +#if _LIBCPP_STD_VER <= 17 || defined(_LIBCPP_ENABLE_CXX20_REMOVED_BINDER_TYPEDEFS) + _LIBCPP_DEPRECATED_IN_CXX17 typedef _Tp result_type; + _LIBCPP_DEPRECATED_IN_CXX17 typedef _Tp first_argument_type; + _LIBCPP_DEPRECATED_IN_CXX17 typedef _Tp second_argument_type; +#endif _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY _Tp operator()(const _Tp& __x, const _Tp& __y) const {return __x * __y;} @@ -608,14 +619,24 @@ #endif +_LIBCPP_SUPPRESS_DEPRECATED_PUSH #if _LIBCPP_STD_VER > 11 template #else template #endif -struct _LIBCPP_TEMPLATE_VIS divides : binary_function<_Tp, _Tp, _Tp> +struct _LIBCPP_TEMPLATE_VIS divides +#if !defined(_LIBCPP_ABI_NO_BINDER_BASES) + : binary_function<_Tp, _Tp, _Tp> +#endif { +_LIBCPP_SUPPRESS_DEPRECATED_POP typedef _Tp __result_type; // used by valarray +#if _LIBCPP_STD_VER <= 17 || defined(_LIBCPP_ENABLE_CXX20_REMOVED_BINDER_TYPEDEFS) + _LIBCPP_DEPRECATED_IN_CXX17 typedef _Tp result_type; + _LIBCPP_DEPRECATED_IN_CXX17 typedef _Tp first_argument_type; + _LIBCPP_DEPRECATED_IN_CXX17 typedef _Tp second_argument_type; +#endif _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY _Tp operator()(const _Tp& __x, const _Tp& __y) const {return __x / __y;} @@ -636,14 +657,24 @@ #endif +_LIBCPP_SUPPRESS_DEPRECATED_PUSH #if _LIBCPP_STD_VER > 11 template #else template #endif -struct _LIBCPP_TEMPLATE_VIS modulus : binary_function<_Tp, _Tp, _Tp> +struct _LIBCPP_TEMPLATE_VIS modulus +#if !defined(_LIBCPP_ABI_NO_BINDER_BASES) + : binary_function<_Tp, _Tp, _Tp> +#endif { +_LIBCPP_SUPPRESS_DEPRECATED_POP typedef _Tp __result_type; // used by valarray +#if _LIBCPP_STD_VER <= 17 || defined(_LIBCPP_ENABLE_CXX20_REMOVED_BINDER_TYPEDEFS) + _LIBCPP_DEPRECATED_IN_CXX17 typedef _Tp result_type; + _LIBCPP_DEPRECATED_IN_CXX17 typedef _Tp first_argument_type; + _LIBCPP_DEPRECATED_IN_CXX17 typedef _Tp second_argument_type; +#endif _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY _Tp operator()(const _Tp& __x, const _Tp& __y) const {return __x % __y;} @@ -664,14 +695,23 @@ #endif +_LIBCPP_SUPPRESS_DEPRECATED_PUSH #if _LIBCPP_STD_VER > 11 template #else template #endif -struct _LIBCPP_TEMPLATE_VIS negate : unary_function<_Tp, _Tp> +struct _LIBCPP_TEMPLATE_VIS negate +#if !defined(_LIBCPP_ABI_NO_BINDER_BASES) + : unary_function<_Tp, _Tp> +#endif { +_LIBCPP_SUPPRESS_DEPRECATED_POP typedef _Tp __result_type; // used by valarray +#if _LIBCPP_STD_VER <= 17 || defined(_LIBCPP_ENABLE_CXX20_REMOVED_BINDER_TYPEDEFS) + _LIBCPP_DEPRECATED_IN_CXX17 typedef _Tp result_type; + _LIBCPP_DEPRECATED_IN_CXX17 typedef _Tp argument_type; +#endif _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY _Tp operator()(const _Tp& __x) const {return -__x;} @@ -692,14 +732,24 @@ #endif +_LIBCPP_SUPPRESS_DEPRECATED_PUSH #if _LIBCPP_STD_VER > 11 template #else template #endif -struct _LIBCPP_TEMPLATE_VIS equal_to : binary_function<_Tp, _Tp, bool> +struct _LIBCPP_TEMPLATE_VIS equal_to +#if !defined(_LIBCPP_ABI_NO_BINDER_BASES) + : binary_function<_Tp, _Tp, bool> +#endif { +_LIBCPP_SUPPRESS_DEPRECATED_POP typedef bool __result_type; // used by valarray +#if _LIBCPP_STD_VER <= 17 || defined(_LIBCPP_ENABLE_CXX20_REMOVED_BINDER_TYPEDEFS) + _LIBCPP_DEPRECATED_IN_CXX17 typedef bool result_type; + _LIBCPP_DEPRECATED_IN_CXX17 typedef _Tp first_argument_type; + _LIBCPP_DEPRECATED_IN_CXX17 typedef _Tp second_argument_type; +#endif _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY bool operator()(const _Tp& __x, const _Tp& __y) const {return __x == __y;} @@ -720,14 +770,24 @@ #endif +_LIBCPP_SUPPRESS_DEPRECATED_PUSH #if _LIBCPP_STD_VER > 11 template #else template #endif -struct _LIBCPP_TEMPLATE_VIS not_equal_to : binary_function<_Tp, _Tp, bool> +struct _LIBCPP_TEMPLATE_VIS not_equal_to +#if !defined(_LIBCPP_ABI_NO_BINDER_BASES) + : binary_function<_Tp, _Tp, bool> +#endif { +_LIBCPP_SUPPRESS_DEPRECATED_POP typedef bool __result_type; // used by valarray +#if _LIBCPP_STD_VER <= 17 || defined(_LIBCPP_ENABLE_CXX20_REMOVED_BINDER_TYPEDEFS) + _LIBCPP_DEPRECATED_IN_CXX17 typedef bool result_type; + _LIBCPP_DEPRECATED_IN_CXX17 typedef _Tp first_argument_type; + _LIBCPP_DEPRECATED_IN_CXX17 typedef _Tp second_argument_type; +#endif _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY bool operator()(const _Tp& __x, const _Tp& __y) const {return __x != __y;} @@ -748,14 +808,24 @@ #endif +_LIBCPP_SUPPRESS_DEPRECATED_PUSH #if _LIBCPP_STD_VER > 11 template #else template #endif -struct _LIBCPP_TEMPLATE_VIS greater : binary_function<_Tp, _Tp, bool> +struct _LIBCPP_TEMPLATE_VIS greater +#if !defined(_LIBCPP_ABI_NO_BINDER_BASES) + : binary_function<_Tp, _Tp, bool> +#endif { +_LIBCPP_SUPPRESS_DEPRECATED_POP typedef bool __result_type; // used by valarray +#if _LIBCPP_STD_VER <= 17 || defined(_LIBCPP_ENABLE_CXX20_REMOVED_BINDER_TYPEDEFS) + _LIBCPP_DEPRECATED_IN_CXX17 typedef bool result_type; + _LIBCPP_DEPRECATED_IN_CXX17 typedef _Tp first_argument_type; + _LIBCPP_DEPRECATED_IN_CXX17 typedef _Tp second_argument_type; +#endif _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY bool operator()(const _Tp& __x, const _Tp& __y) const {return __x > __y;} @@ -778,14 +848,25 @@ // less in <__functional_base> + +_LIBCPP_SUPPRESS_DEPRECATED_PUSH #if _LIBCPP_STD_VER > 11 template #else template #endif -struct _LIBCPP_TEMPLATE_VIS greater_equal : binary_function<_Tp, _Tp, bool> +struct _LIBCPP_TEMPLATE_VIS greater_equal +#if !defined(_LIBCPP_ABI_NO_BINDER_BASES) + : binary_function<_Tp, _Tp, bool> +#endif { +_LIBCPP_SUPPRESS_DEPRECATED_POP typedef bool __result_type; // used by valarray +#if _LIBCPP_STD_VER <= 17 || defined(_LIBCPP_ENABLE_CXX20_REMOVED_BINDER_TYPEDEFS) + _LIBCPP_DEPRECATED_IN_CXX17 typedef bool result_type; + _LIBCPP_DEPRECATED_IN_CXX17 typedef _Tp first_argument_type; + _LIBCPP_DEPRECATED_IN_CXX17 typedef _Tp second_argument_type; +#endif _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY bool operator()(const _Tp& __x, const _Tp& __y) const {return __x >= __y;} @@ -806,14 +887,24 @@ #endif +_LIBCPP_SUPPRESS_DEPRECATED_PUSH #if _LIBCPP_STD_VER > 11 template #else template #endif -struct _LIBCPP_TEMPLATE_VIS less_equal : binary_function<_Tp, _Tp, bool> +struct _LIBCPP_TEMPLATE_VIS less_equal +#if !defined(_LIBCPP_ABI_NO_BINDER_BASES) + : binary_function<_Tp, _Tp, bool> +#endif { +_LIBCPP_SUPPRESS_DEPRECATED_POP typedef bool __result_type; // used by valarray +#if _LIBCPP_STD_VER <= 17 || defined(_LIBCPP_ENABLE_CXX20_REMOVED_BINDER_TYPEDEFS) + _LIBCPP_DEPRECATED_IN_CXX17 typedef bool result_type; + _LIBCPP_DEPRECATED_IN_CXX17 typedef _Tp first_argument_type; + _LIBCPP_DEPRECATED_IN_CXX17 typedef _Tp second_argument_type; +#endif _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY bool operator()(const _Tp& __x, const _Tp& __y) const {return __x <= __y;} @@ -834,14 +925,24 @@ #endif +_LIBCPP_SUPPRESS_DEPRECATED_PUSH #if _LIBCPP_STD_VER > 11 template #else template #endif -struct _LIBCPP_TEMPLATE_VIS logical_and : binary_function<_Tp, _Tp, bool> +struct _LIBCPP_TEMPLATE_VIS logical_and +#if !defined(_LIBCPP_ABI_NO_BINDER_BASES) + : binary_function<_Tp, _Tp, bool> +#endif { +_LIBCPP_SUPPRESS_DEPRECATED_POP typedef bool __result_type; // used by valarray +#if _LIBCPP_STD_VER <= 17 || defined(_LIBCPP_ENABLE_CXX20_REMOVED_BINDER_TYPEDEFS) + _LIBCPP_DEPRECATED_IN_CXX17 typedef bool result_type; + _LIBCPP_DEPRECATED_IN_CXX17 typedef _Tp first_argument_type; + _LIBCPP_DEPRECATED_IN_CXX17 typedef _Tp second_argument_type; +#endif _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY bool operator()(const _Tp& __x, const _Tp& __y) const {return __x && __y;} @@ -862,14 +963,24 @@ #endif +_LIBCPP_SUPPRESS_DEPRECATED_PUSH #if _LIBCPP_STD_VER > 11 template #else template #endif -struct _LIBCPP_TEMPLATE_VIS logical_or : binary_function<_Tp, _Tp, bool> +struct _LIBCPP_TEMPLATE_VIS logical_or +#if !defined(_LIBCPP_ABI_NO_BINDER_BASES) + : binary_function<_Tp, _Tp, bool> +#endif { +_LIBCPP_SUPPRESS_DEPRECATED_POP typedef bool __result_type; // used by valarray +#if _LIBCPP_STD_VER <= 17 || defined(_LIBCPP_ENABLE_CXX20_REMOVED_BINDER_TYPEDEFS) + _LIBCPP_DEPRECATED_IN_CXX17 typedef bool result_type; + _LIBCPP_DEPRECATED_IN_CXX17 typedef _Tp first_argument_type; + _LIBCPP_DEPRECATED_IN_CXX17 typedef _Tp second_argument_type; +#endif _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY bool operator()(const _Tp& __x, const _Tp& __y) const {return __x || __y;} @@ -890,14 +1001,23 @@ #endif +_LIBCPP_SUPPRESS_DEPRECATED_PUSH #if _LIBCPP_STD_VER > 11 template #else template #endif -struct _LIBCPP_TEMPLATE_VIS logical_not : unary_function<_Tp, bool> +struct _LIBCPP_TEMPLATE_VIS logical_not +#if !defined(_LIBCPP_ABI_NO_BINDER_BASES) + : unary_function<_Tp, bool> +#endif { +_LIBCPP_SUPPRESS_DEPRECATED_POP typedef bool __result_type; // used by valarray +#if _LIBCPP_STD_VER <= 17 || defined(_LIBCPP_ENABLE_CXX20_REMOVED_BINDER_TYPEDEFS) + _LIBCPP_DEPRECATED_IN_CXX17 typedef bool result_type; + _LIBCPP_DEPRECATED_IN_CXX17 typedef _Tp argument_type; +#endif _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY bool operator()(const _Tp& __x) const {return !__x;} @@ -918,14 +1038,24 @@ #endif +_LIBCPP_SUPPRESS_DEPRECATED_PUSH #if _LIBCPP_STD_VER > 11 template #else template #endif -struct _LIBCPP_TEMPLATE_VIS bit_and : binary_function<_Tp, _Tp, _Tp> +struct _LIBCPP_TEMPLATE_VIS bit_and +#if !defined(_LIBCPP_ABI_NO_BINDER_BASES) + : binary_function<_Tp, _Tp, _Tp> +#endif { +_LIBCPP_SUPPRESS_DEPRECATED_POP typedef _Tp __result_type; // used by valarray +#if _LIBCPP_STD_VER <= 17 || defined(_LIBCPP_ENABLE_CXX20_REMOVED_BINDER_TYPEDEFS) + _LIBCPP_DEPRECATED_IN_CXX17 typedef _Tp result_type; + _LIBCPP_DEPRECATED_IN_CXX17 typedef _Tp first_argument_type; + _LIBCPP_DEPRECATED_IN_CXX17 typedef _Tp second_argument_type; +#endif _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY _Tp operator()(const _Tp& __x, const _Tp& __y) const {return __x & __y;} @@ -946,14 +1076,24 @@ #endif +_LIBCPP_SUPPRESS_DEPRECATED_PUSH #if _LIBCPP_STD_VER > 11 template #else template #endif -struct _LIBCPP_TEMPLATE_VIS bit_or : binary_function<_Tp, _Tp, _Tp> +struct _LIBCPP_TEMPLATE_VIS bit_or +#if !defined(_LIBCPP_ABI_NO_BINDER_BASES) + : binary_function<_Tp, _Tp, _Tp> +#endif { +_LIBCPP_SUPPRESS_DEPRECATED_POP typedef _Tp __result_type; // used by valarray +#if _LIBCPP_STD_VER <= 17 || defined(_LIBCPP_ENABLE_CXX20_REMOVED_BINDER_TYPEDEFS) + _LIBCPP_DEPRECATED_IN_CXX17 typedef _Tp result_type; + _LIBCPP_DEPRECATED_IN_CXX17 typedef _Tp first_argument_type; + _LIBCPP_DEPRECATED_IN_CXX17 typedef _Tp second_argument_type; +#endif _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY _Tp operator()(const _Tp& __x, const _Tp& __y) const {return __x | __y;} @@ -974,14 +1114,24 @@ #endif +_LIBCPP_SUPPRESS_DEPRECATED_PUSH #if _LIBCPP_STD_VER > 11 template #else template #endif -struct _LIBCPP_TEMPLATE_VIS bit_xor : binary_function<_Tp, _Tp, _Tp> +struct _LIBCPP_TEMPLATE_VIS bit_xor +#if !defined(_LIBCPP_ABI_NO_BINDER_BASES) + : binary_function<_Tp, _Tp, _Tp> +#endif { +_LIBCPP_SUPPRESS_DEPRECATED_POP typedef _Tp __result_type; // used by valarray +#if _LIBCPP_STD_VER <= 17 || defined(_LIBCPP_ENABLE_CXX20_REMOVED_BINDER_TYPEDEFS) + _LIBCPP_DEPRECATED_IN_CXX17 typedef _Tp result_type; + _LIBCPP_DEPRECATED_IN_CXX17 typedef _Tp first_argument_type; + _LIBCPP_DEPRECATED_IN_CXX17 typedef _Tp second_argument_type; +#endif _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY _Tp operator()(const _Tp& __x, const _Tp& __y) const {return __x ^ __y;} @@ -1003,9 +1153,18 @@ #if _LIBCPP_STD_VER > 11 +_LIBCPP_SUPPRESS_DEPRECATED_PUSH template -struct _LIBCPP_TEMPLATE_VIS bit_not : unary_function<_Tp, _Tp> +struct _LIBCPP_TEMPLATE_VIS bit_not +#if !defined(_LIBCPP_ABI_NO_BINDER_BASES) + : unary_function<_Tp, _Tp> +#endif { +_LIBCPP_SUPPRESS_DEPRECATED_POP +#if _LIBCPP_STD_VER <= 17 || defined(_LIBCPP_ENABLE_CXX20_REMOVED_BINDER_TYPEDEFS) + _LIBCPP_DEPRECATED_IN_CXX17 typedef _Tp result_type; + _LIBCPP_DEPRECATED_IN_CXX17 typedef _Tp argument_type; +#endif _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY _Tp operator()(const _Tp& __x) const {return ~__x;} @@ -1307,7 +1466,9 @@ template class __mem_fn +#if _LIBCPP_STD_VER <= 17 || !defined(_LIBCPP_ABI_NO_BINDER_BASES) : public __weak_result_type<_Tp> +#endif { public: // types @@ -2354,8 +2515,10 @@ template class _LIBCPP_TEMPLATE_VIS function<_Rp(_ArgTypes...)> +#if _LIBCPP_STD_VER <= 17 || !defined(_LIBCPP_ABI_NO_BINDER_BASES) : public __function::__maybe_derive_from_unary_function<_Rp(_ArgTypes...)>, public __function::__maybe_derive_from_binary_function<_Rp(_ArgTypes...)> +#endif { #ifndef _LIBCPP_ABI_OPTIMIZED_FUNCTION typedef __function::__value_func<_Rp(_ArgTypes...)> __func; @@ -2884,7 +3047,9 @@ template class __bind +#if _LIBCPP_STD_VER <= 17 || !defined(_LIBCPP_ABI_NO_BINDER_BASES) : public __weak_result_type::type> +#endif { protected: typedef typename decay<_Fp>::type _Fd; diff --git a/libcxx/include/map b/libcxx/include/map --- a/libcxx/include/map +++ b/libcxx/include/map @@ -43,7 +43,6 @@ typedef INSERT_RETURN_TYPE insert_return_type; // C++17 class value_compare - : public binary_function { friend class map; protected: @@ -51,6 +50,9 @@ value_compare(key_compare c); public: + typedef bool result_type; // deprecated in C++17, removed in C++20 + typedef value_type first_argument_type; // deprecated in C++17, removed in C++20 + typedef value_type second_argument_type; // deprecated in C++17, removed in C++20 bool operator()(const value_type& x, const value_type& y) const; }; @@ -287,13 +289,15 @@ typedef unspecified node_type; // C++17 class value_compare - : public binary_function { friend class multimap; protected: key_compare comp; value_compare(key_compare c); public: + typedef bool result_type; // deprecated in C++17, removed in C++20 + typedef value_type first_argument_type; // deprecated in C++17, removed in C++20 + typedef value_type second_argument_type; // deprecated in C++17, removed in C++20 bool operator()(const value_type& x, const value_type& y) const; }; @@ -922,15 +926,24 @@ static_assert((is_same::value), "Allocator::value_type must be same type as value_type"); +_LIBCPP_SUPPRESS_DEPRECATED_PUSH class _LIBCPP_TEMPLATE_VIS value_compare +#if defined(_LIBCPP_ENABLE_CXX20_REMOVED_BINDER_TYPEDEFS) : public binary_function +#endif { +_LIBCPP_SUPPRESS_DEPRECATED_POP friend class map; protected: key_compare comp; _LIBCPP_INLINE_VISIBILITY value_compare(key_compare c) : comp(c) {} public: +#if _LIBCPP_STD_VER <= 17 || defined(_LIBCPP_ENABLE_CXX20_REMOVED_BINDER_TYPEDEFS) + _LIBCPP_DEPRECATED_IN_CXX17 typedef bool result_type; + _LIBCPP_DEPRECATED_IN_CXX17 typedef value_type first_argument_type; + _LIBCPP_DEPRECATED_IN_CXX17 typedef value_type second_argument_type; +#endif _LIBCPP_INLINE_VISIBILITY bool operator()(const value_type& __x, const value_type& __y) const {return comp(__x.first, __y.first);} @@ -1696,9 +1709,13 @@ static_assert((is_same::value), "Allocator::value_type must be same type as value_type"); +_LIBCPP_SUPPRESS_DEPRECATED_PUSH class _LIBCPP_TEMPLATE_VIS value_compare +#if defined(_LIBCPP_ENABLE_CXX20_REMOVED_BINDER_TYPEDEFS) : public binary_function +#endif { +_LIBCPP_SUPPRESS_DEPRECATED_POP friend class multimap; protected: key_compare comp; @@ -1706,6 +1723,11 @@ _LIBCPP_INLINE_VISIBILITY value_compare(key_compare c) : comp(c) {} public: +#if _LIBCPP_STD_VER <= 17 || defined(_LIBCPP_ENABLE_CXX20_REMOVED_BINDER_TYPEDEFS) + _LIBCPP_DEPRECATED_IN_CXX17 typedef bool result_type; + _LIBCPP_DEPRECATED_IN_CXX17 typedef value_type first_argument_type; + _LIBCPP_DEPRECATED_IN_CXX17 typedef value_type second_argument_type; +#endif _LIBCPP_INLINE_VISIBILITY bool operator()(const value_type& __x, const value_type& __y) const {return comp(__x.first, __y.first);} diff --git a/libcxx/include/optional b/libcxx/include/optional --- a/libcxx/include/optional +++ b/libcxx/include/optional @@ -1407,11 +1407,13 @@ __enable_hash_helper, remove_const_t<_Tp>> > { - typedef optional<_Tp> argument_type; - typedef size_t result_type; +#if _LIBCPP_STD_VER <= 17 || defined(_LIBCPP_ENABLE_CXX20_REMOVED_BINDER_TYPEDEFS) + _LIBCPP_DEPRECATED_IN_CXX17 typedef optional<_Tp> argument_type; + _LIBCPP_DEPRECATED_IN_CXX17 typedef size_t result_type; +#endif _LIBCPP_INLINE_VISIBILITY - result_type operator()(const argument_type& __opt) const + size_t operator()(const optional<_Tp>& __opt) const { return static_cast(__opt) ? hash>()(*__opt) : 0; } diff --git a/libcxx/include/utility b/libcxx/include/utility --- a/libcxx/include/utility +++ b/libcxx/include/utility @@ -1298,10 +1298,18 @@ template struct __scalar_hash; +_LIBCPP_SUPPRESS_DEPRECATED_PUSH template struct __scalar_hash<_Tp, 0> +#if !defined(_LIBCPP_ABI_NO_BINDER_BASES) : public unary_function<_Tp, size_t> +#endif { +_LIBCPP_SUPPRESS_DEPRECATED_POP +#if _LIBCPP_STD_VER <= 17 || defined(_LIBCPP_ENABLE_CXX20_REMOVED_BINDER_TYPEDEFS) + _LIBCPP_DEPRECATED_IN_CXX17 typedef size_t result_type; + _LIBCPP_DEPRECATED_IN_CXX17 typedef _Tp argument_type; +#endif _LIBCPP_INLINE_VISIBILITY size_t operator()(_Tp __v) const _NOEXCEPT { @@ -1316,10 +1324,18 @@ } }; +_LIBCPP_SUPPRESS_DEPRECATED_PUSH template struct __scalar_hash<_Tp, 1> +#if !defined(_LIBCPP_ABI_NO_BINDER_BASES) : public unary_function<_Tp, size_t> +#endif { +_LIBCPP_SUPPRESS_DEPRECATED_POP +#if _LIBCPP_STD_VER <= 17 || defined(_LIBCPP_ENABLE_CXX20_REMOVED_BINDER_TYPEDEFS) + _LIBCPP_DEPRECATED_IN_CXX17 typedef size_t result_type; + _LIBCPP_DEPRECATED_IN_CXX17 typedef _Tp argument_type; +#endif _LIBCPP_INLINE_VISIBILITY size_t operator()(_Tp __v) const _NOEXCEPT { @@ -1333,10 +1349,18 @@ } }; +_LIBCPP_SUPPRESS_DEPRECATED_PUSH template struct __scalar_hash<_Tp, 2> +#if !defined(_LIBCPP_ABI_NO_BINDER_BASES) : public unary_function<_Tp, size_t> +#endif { +_LIBCPP_SUPPRESS_DEPRECATED_POP +#if _LIBCPP_STD_VER <= 17 || defined(_LIBCPP_ENABLE_CXX20_REMOVED_BINDER_TYPEDEFS) + _LIBCPP_DEPRECATED_IN_CXX17 typedef size_t result_type; + _LIBCPP_DEPRECATED_IN_CXX17 typedef _Tp argument_type; +#endif _LIBCPP_INLINE_VISIBILITY size_t operator()(_Tp __v) const _NOEXCEPT { @@ -1354,10 +1378,18 @@ } }; +_LIBCPP_SUPPRESS_DEPRECATED_PUSH template struct __scalar_hash<_Tp, 3> +#if !defined(_LIBCPP_ABI_NO_BINDER_BASES) : public unary_function<_Tp, size_t> +#endif { +_LIBCPP_SUPPRESS_DEPRECATED_POP +#if _LIBCPP_STD_VER <= 17 || defined(_LIBCPP_ENABLE_CXX20_REMOVED_BINDER_TYPEDEFS) + _LIBCPP_DEPRECATED_IN_CXX17 typedef size_t result_type; + _LIBCPP_DEPRECATED_IN_CXX17 typedef _Tp argument_type; +#endif _LIBCPP_INLINE_VISIBILITY size_t operator()(_Tp __v) const _NOEXCEPT { @@ -1376,10 +1408,18 @@ } }; +_LIBCPP_SUPPRESS_DEPRECATED_PUSH template struct __scalar_hash<_Tp, 4> +#if !defined(_LIBCPP_ABI_NO_BINDER_BASES) : public unary_function<_Tp, size_t> +#endif { +_LIBCPP_SUPPRESS_DEPRECATED_POP +#if _LIBCPP_STD_VER <= 17 || defined(_LIBCPP_ENABLE_CXX20_REMOVED_BINDER_TYPEDEFS) + _LIBCPP_DEPRECATED_IN_CXX17 typedef size_t result_type; + _LIBCPP_DEPRECATED_IN_CXX17 typedef _Tp argument_type; +#endif _LIBCPP_INLINE_VISIBILITY size_t operator()(_Tp __v) const _NOEXCEPT { @@ -1411,10 +1451,18 @@ return _HashT()(__p); } +_LIBCPP_SUPPRESS_DEPRECATED_PUSH template struct _LIBCPP_TEMPLATE_VIS hash<_Tp*> +#if !defined(_LIBCPP_ABI_NO_BINDER_BASES) : public unary_function<_Tp*, size_t> +#endif { +_LIBCPP_SUPPRESS_DEPRECATED_POP +#if _LIBCPP_STD_VER <= 17 || defined(_LIBCPP_ENABLE_CXX20_REMOVED_BINDER_TYPEDEFS) + _LIBCPP_DEPRECATED_IN_CXX17 typedef size_t result_type; + _LIBCPP_DEPRECATED_IN_CXX17 typedef _Tp* argument_type; +#endif _LIBCPP_INLINE_VISIBILITY size_t operator()(_Tp* __v) const _NOEXCEPT { @@ -1428,44 +1476,83 @@ } }; - +_LIBCPP_SUPPRESS_DEPRECATED_PUSH template <> struct _LIBCPP_TEMPLATE_VIS hash +#if !defined(_LIBCPP_ABI_NO_BINDER_BASES) : public unary_function +#endif { +_LIBCPP_SUPPRESS_DEPRECATED_POP +#if _LIBCPP_STD_VER <= 17 || defined(_LIBCPP_ENABLE_CXX20_REMOVED_BINDER_TYPEDEFS) + _LIBCPP_DEPRECATED_IN_CXX17 typedef size_t result_type; + _LIBCPP_DEPRECATED_IN_CXX17 typedef bool argument_type; +#endif _LIBCPP_INLINE_VISIBILITY size_t operator()(bool __v) const _NOEXCEPT {return static_cast(__v);} }; +_LIBCPP_SUPPRESS_DEPRECATED_PUSH template <> struct _LIBCPP_TEMPLATE_VIS hash +#if !defined(_LIBCPP_ABI_NO_BINDER_BASES) : public unary_function +#endif { +_LIBCPP_SUPPRESS_DEPRECATED_POP +#if _LIBCPP_STD_VER <= 17 || defined(_LIBCPP_ENABLE_CXX20_REMOVED_BINDER_TYPEDEFS) + _LIBCPP_DEPRECATED_IN_CXX17 typedef size_t result_type; + _LIBCPP_DEPRECATED_IN_CXX17 typedef char argument_type; +#endif _LIBCPP_INLINE_VISIBILITY size_t operator()(char __v) const _NOEXCEPT {return static_cast(__v);} }; +_LIBCPP_SUPPRESS_DEPRECATED_PUSH template <> struct _LIBCPP_TEMPLATE_VIS hash +#if !defined(_LIBCPP_ABI_NO_BINDER_BASES) : public unary_function +#endif { +_LIBCPP_SUPPRESS_DEPRECATED_POP +#if _LIBCPP_STD_VER <= 17 || defined(_LIBCPP_ENABLE_CXX20_REMOVED_BINDER_TYPEDEFS) + _LIBCPP_DEPRECATED_IN_CXX17 typedef size_t result_type; + _LIBCPP_DEPRECATED_IN_CXX17 typedef signed char argument_type; +#endif _LIBCPP_INLINE_VISIBILITY size_t operator()(signed char __v) const _NOEXCEPT {return static_cast(__v);} }; +_LIBCPP_SUPPRESS_DEPRECATED_PUSH template <> struct _LIBCPP_TEMPLATE_VIS hash +#if !defined(_LIBCPP_ABI_NO_BINDER_BASES) : public unary_function +#endif { +_LIBCPP_SUPPRESS_DEPRECATED_POP +#if _LIBCPP_STD_VER <= 17 || defined(_LIBCPP_ENABLE_CXX20_REMOVED_BINDER_TYPEDEFS) + _LIBCPP_DEPRECATED_IN_CXX17 typedef size_t result_type; + _LIBCPP_DEPRECATED_IN_CXX17 typedef unsigned char argument_type; +#endif _LIBCPP_INLINE_VISIBILITY size_t operator()(unsigned char __v) const _NOEXCEPT {return static_cast(__v);} }; #ifndef _LIBCPP_HAS_NO_CHAR8_T +_LIBCPP_SUPPRESS_DEPRECATED_PUSH template <> struct _LIBCPP_TEMPLATE_VIS hash +#if !defined(_LIBCPP_ABI_NO_BINDER_BASES) : public unary_function +#endif { +_LIBCPP_SUPPRESS_DEPRECATED_POP +#if _LIBCPP_STD_VER <= 17 || defined(_LIBCPP_ENABLE_CXX20_REMOVED_BINDER_TYPEDEFS) + _LIBCPP_DEPRECATED_IN_CXX17 typedef size_t result_type; + _LIBCPP_DEPRECATED_IN_CXX17 typedef char8_t argument_type; +#endif _LIBCPP_INLINE_VISIBILITY size_t operator()(char8_t __v) const _NOEXCEPT {return static_cast(__v);} }; @@ -1473,76 +1560,148 @@ #ifndef _LIBCPP_HAS_NO_UNICODE_CHARS +_LIBCPP_SUPPRESS_DEPRECATED_PUSH template <> struct _LIBCPP_TEMPLATE_VIS hash +#if !defined(_LIBCPP_ABI_NO_BINDER_BASES) : public unary_function +#endif { +_LIBCPP_SUPPRESS_DEPRECATED_POP +#if _LIBCPP_STD_VER <= 17 || defined(_LIBCPP_ENABLE_CXX20_REMOVED_BINDER_TYPEDEFS) + _LIBCPP_DEPRECATED_IN_CXX17 typedef size_t result_type; + _LIBCPP_DEPRECATED_IN_CXX17 typedef char16_t argument_type; +#endif _LIBCPP_INLINE_VISIBILITY size_t operator()(char16_t __v) const _NOEXCEPT {return static_cast(__v);} }; +_LIBCPP_SUPPRESS_DEPRECATED_PUSH template <> struct _LIBCPP_TEMPLATE_VIS hash +#if !defined(_LIBCPP_ABI_NO_BINDER_BASES) : public unary_function +#endif { +_LIBCPP_SUPPRESS_DEPRECATED_POP +#if _LIBCPP_STD_VER <= 17 || defined(_LIBCPP_ENABLE_CXX20_REMOVED_BINDER_TYPEDEFS) + _LIBCPP_DEPRECATED_IN_CXX17 typedef size_t result_type; + _LIBCPP_DEPRECATED_IN_CXX17 typedef char32_t argument_type; +#endif _LIBCPP_INLINE_VISIBILITY size_t operator()(char32_t __v) const _NOEXCEPT {return static_cast(__v);} }; #endif // _LIBCPP_HAS_NO_UNICODE_CHARS +_LIBCPP_SUPPRESS_DEPRECATED_PUSH template <> struct _LIBCPP_TEMPLATE_VIS hash +#if !defined(_LIBCPP_ABI_NO_BINDER_BASES) : public unary_function +#endif { +_LIBCPP_SUPPRESS_DEPRECATED_POP +#if _LIBCPP_STD_VER <= 17 || defined(_LIBCPP_ENABLE_CXX20_REMOVED_BINDER_TYPEDEFS) + _LIBCPP_DEPRECATED_IN_CXX17 typedef size_t result_type; + _LIBCPP_DEPRECATED_IN_CXX17 typedef wchar_t argument_type; +#endif _LIBCPP_INLINE_VISIBILITY size_t operator()(wchar_t __v) const _NOEXCEPT {return static_cast(__v);} }; +_LIBCPP_SUPPRESS_DEPRECATED_PUSH template <> struct _LIBCPP_TEMPLATE_VIS hash +#if !defined(_LIBCPP_ABI_NO_BINDER_BASES) : public unary_function +#endif { +_LIBCPP_SUPPRESS_DEPRECATED_POP +#if _LIBCPP_STD_VER <= 17 || defined(_LIBCPP_ENABLE_CXX20_REMOVED_BINDER_TYPEDEFS) + _LIBCPP_DEPRECATED_IN_CXX17 typedef size_t result_type; + _LIBCPP_DEPRECATED_IN_CXX17 typedef short argument_type; +#endif _LIBCPP_INLINE_VISIBILITY size_t operator()(short __v) const _NOEXCEPT {return static_cast(__v);} }; +_LIBCPP_SUPPRESS_DEPRECATED_PUSH template <> struct _LIBCPP_TEMPLATE_VIS hash +#if !defined(_LIBCPP_ABI_NO_BINDER_BASES) : public unary_function +#endif { +_LIBCPP_SUPPRESS_DEPRECATED_POP +#if _LIBCPP_STD_VER <= 17 || defined(_LIBCPP_ENABLE_CXX20_REMOVED_BINDER_TYPEDEFS) + _LIBCPP_DEPRECATED_IN_CXX17 typedef size_t result_type; + _LIBCPP_DEPRECATED_IN_CXX17 typedef unsigned short argument_type; +#endif _LIBCPP_INLINE_VISIBILITY size_t operator()(unsigned short __v) const _NOEXCEPT {return static_cast(__v);} }; +_LIBCPP_SUPPRESS_DEPRECATED_PUSH template <> struct _LIBCPP_TEMPLATE_VIS hash +#if !defined(_LIBCPP_ABI_NO_BINDER_BASES) : public unary_function +#endif { +_LIBCPP_SUPPRESS_DEPRECATED_POP +#if _LIBCPP_STD_VER <= 17 || defined(_LIBCPP_ENABLE_CXX20_REMOVED_BINDER_TYPEDEFS) + _LIBCPP_DEPRECATED_IN_CXX17 typedef size_t result_type; + _LIBCPP_DEPRECATED_IN_CXX17 typedef int argument_type; +#endif _LIBCPP_INLINE_VISIBILITY size_t operator()(int __v) const _NOEXCEPT {return static_cast(__v);} }; +_LIBCPP_SUPPRESS_DEPRECATED_PUSH template <> struct _LIBCPP_TEMPLATE_VIS hash +#if !defined(_LIBCPP_ABI_NO_BINDER_BASES) : public unary_function +#endif { +_LIBCPP_SUPPRESS_DEPRECATED_POP +#if _LIBCPP_STD_VER <= 17 || defined(_LIBCPP_ENABLE_CXX20_REMOVED_BINDER_TYPEDEFS) + _LIBCPP_DEPRECATED_IN_CXX17 typedef size_t result_type; + _LIBCPP_DEPRECATED_IN_CXX17 typedef unsigned int argument_type; +#endif _LIBCPP_INLINE_VISIBILITY size_t operator()(unsigned int __v) const _NOEXCEPT {return static_cast(__v);} }; +_LIBCPP_SUPPRESS_DEPRECATED_PUSH template <> struct _LIBCPP_TEMPLATE_VIS hash +#if !defined(_LIBCPP_ABI_NO_BINDER_BASES) : public unary_function +#endif { +_LIBCPP_SUPPRESS_DEPRECATED_POP +#if _LIBCPP_STD_VER <= 17 || defined(_LIBCPP_ENABLE_CXX20_REMOVED_BINDER_TYPEDEFS) + _LIBCPP_DEPRECATED_IN_CXX17 typedef size_t result_type; + _LIBCPP_DEPRECATED_IN_CXX17 typedef long argument_type; +#endif _LIBCPP_INLINE_VISIBILITY size_t operator()(long __v) const _NOEXCEPT {return static_cast(__v);} }; +_LIBCPP_SUPPRESS_DEPRECATED_PUSH template <> struct _LIBCPP_TEMPLATE_VIS hash +#if !defined(_LIBCPP_ABI_NO_BINDER_BASES) : public unary_function +#endif { +_LIBCPP_SUPPRESS_DEPRECATED_POP +#if _LIBCPP_STD_VER <= 17 || defined(_LIBCPP_ENABLE_CXX20_REMOVED_BINDER_TYPEDEFS) + _LIBCPP_DEPRECATED_IN_CXX17 typedef size_t result_type; + _LIBCPP_DEPRECATED_IN_CXX17 typedef unsigned long argument_type; +#endif _LIBCPP_INLINE_VISIBILITY size_t operator()(unsigned long __v) const _NOEXCEPT {return static_cast(__v);} }; @@ -1655,10 +1814,18 @@ #if _LIBCPP_STD_VER > 11 +_LIBCPP_SUPPRESS_DEPRECATED_PUSH template ::value> struct _LIBCPP_TEMPLATE_VIS __enum_hash +#if !defined(_LIBCPP_ABI_NO_BINDER_BASES) : public unary_function<_Tp, size_t> +#endif { +_LIBCPP_SUPPRESS_DEPRECATED_POP +#if _LIBCPP_STD_VER <= 17 || defined(_LIBCPP_ENABLE_CXX20_REMOVED_BINDER_TYPEDEFS) + _LIBCPP_DEPRECATED_IN_CXX17 typedef size_t result_type; + _LIBCPP_DEPRECATED_IN_CXX17 typedef _Tp argument_type; +#endif _LIBCPP_INLINE_VISIBILITY size_t operator()(_Tp __v) const _NOEXCEPT { @@ -1681,14 +1848,22 @@ #if _LIBCPP_STD_VER > 14 +_LIBCPP_SUPPRESS_DEPRECATED_PUSH template <> struct _LIBCPP_TEMPLATE_VIS hash +#if !defined(_LIBCPP_ABI_NO_BINDER_BASES) : public unary_function +#endif { - _LIBCPP_INLINE_VISIBILITY - size_t operator()(nullptr_t) const _NOEXCEPT { - return 662607004ull; - } +_LIBCPP_SUPPRESS_DEPRECATED_POP +#if _LIBCPP_STD_VER <= 17 || defined(_LIBCPP_ENABLE_CXX20_REMOVED_BINDER_TYPEDEFS) + _LIBCPP_DEPRECATED_IN_CXX17 typedef size_t result_type; + _LIBCPP_DEPRECATED_IN_CXX17 typedef nullptr_t argument_type; +#endif + _LIBCPP_INLINE_VISIBILITY + size_t operator()(nullptr_t) const _NOEXCEPT { + return 662607004ull; + } }; #endif diff --git a/libcxx/test/libcxx/depr/depr.func.adaptor.typedefs/typedefs.depr_in_cxx17.verify.cpp b/libcxx/test/libcxx/depr/depr.func.adaptor.typedefs/typedefs.depr_in_cxx17.verify.cpp new file mode 100644 --- /dev/null +++ b/libcxx/test/libcxx/depr/depr.func.adaptor.typedefs/typedefs.depr_in_cxx17.verify.cpp @@ -0,0 +1,125 @@ +//===----------------------------------------------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +// + +// UNSUPPORTED: c++03, c++11, c++14 + +// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_CXX20_REMOVED_BINDER_TYPEDEFS + +#include +#include +#include +#include +#include +#include "test_macros.h" + +void test_functional() +{ + { + using T = std::plus; + T::result_type a; // expected-warning {{is deprecated}} + T::first_argument_type b; // expected-warning {{is deprecated}} + T::second_argument_type c; // expected-warning {{is deprecated}} + (void)a; + (void)b; + (void)c; + } + { + using T = std::less; + T::result_type a; // expected-warning {{is deprecated}} + T::first_argument_type b; // expected-warning {{is deprecated}} + T::second_argument_type c; // expected-warning {{is deprecated}} + (void)a; + (void)b; + (void)c; + } + { + using T = std::logical_not; + T::result_type a; // expected-warning {{is deprecated}} + T::argument_type b; // expected-warning {{is deprecated}} + (void)a; + (void)b; + } +} + +void test_owner_less() +{ + { + using T = std::owner_less>; + T::result_type a; // expected-warning {{is deprecated}} + T::first_argument_type b; // expected-warning {{is deprecated}} + T::second_argument_type c; // expected-warning {{is deprecated}} + (void)a; + (void)b; + (void)c; + } + { + using T = std::owner_less>; + T::result_type a; // expected-warning {{is deprecated}} + T::first_argument_type b; // expected-warning {{is deprecated}} + T::second_argument_type c; // expected-warning {{is deprecated}} + (void)a; + (void)b; + (void)c; + } +} + +void test_hash() +{ + { + using T = std::hash; + T::result_type a; // expected-warning {{is deprecated}} + T::argument_type b; // expected-warning {{is deprecated}} + (void)a; + (void)b; + } + { + using T = std::hash>; + T::result_type a; // expected-warning {{is deprecated}} + T::argument_type b; // expected-warning {{is deprecated}} + (void)a; + (void)b; + } + { + using T = std::hash>; + T::result_type a; // expected-warning {{is deprecated}} + T::argument_type b; // expected-warning {{is deprecated}} + (void)a; + (void)b; + } + { + using T = std::hash>; + T::result_type a; // expected-warning {{is deprecated}} + T::argument_type b; // expected-warning {{is deprecated}} + (void)a; + (void)b; + } +} + +void test_map() +{ + { + using T = std::map::value_compare; + T::result_type a; // expected-warning {{is deprecated}} + T::first_argument_type b; // expected-warning {{is deprecated}} + T::second_argument_type c; // expected-warning {{is deprecated}} + (void)a; + (void)b; + (void)c; + } + { + using T = std::multimap::value_compare; + T::result_type a; // expected-warning {{is deprecated}} + T::first_argument_type b; // expected-warning {{is deprecated}} + T::second_argument_type c; // expected-warning {{is deprecated}} + (void)a; + (void)b; + (void)c; + } +} diff --git a/libcxx/test/libcxx/utilities/function.objects/refwrap/binary.pass.cpp b/libcxx/test/libcxx/utilities/function.objects/refwrap/binary.pass.cpp --- a/libcxx/test/libcxx/utilities/function.objects/refwrap/binary.pass.cpp +++ b/libcxx/test/libcxx/utilities/function.objects/refwrap/binary.pass.cpp @@ -6,6 +6,8 @@ // //===----------------------------------------------------------------------===// +// REQUIRES: c++03 || c++11 || c++14 || c++17 + // // reference_wrapper diff --git a/libcxx/test/libcxx/utilities/function.objects/refwrap/unary.pass.cpp b/libcxx/test/libcxx/utilities/function.objects/refwrap/unary.pass.cpp --- a/libcxx/test/libcxx/utilities/function.objects/refwrap/unary.pass.cpp +++ b/libcxx/test/libcxx/utilities/function.objects/refwrap/unary.pass.cpp @@ -6,6 +6,8 @@ // //===----------------------------------------------------------------------===// +// REQUIRES: c++03 || c++11 || c++14 || c++17 + // // reference_wrapper diff --git a/libcxx/test/std/utilities/function.objects/arithmetic.operations/divides.pass.cpp b/libcxx/test/std/utilities/function.objects/arithmetic.operations/divides.pass.cpp --- a/libcxx/test/std/utilities/function.objects/arithmetic.operations/divides.pass.cpp +++ b/libcxx/test/std/utilities/function.objects/arithmetic.operations/divides.pass.cpp @@ -6,6 +6,8 @@ // //===----------------------------------------------------------------------===// +// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DISABLE_DEPRECATION_WARNINGS + // // divides @@ -20,9 +22,11 @@ { typedef std::divides F; const F f = F(); +#if TEST_STD_VER <= 17 static_assert((std::is_same::value), "" ); static_assert((std::is_same::value), "" ); static_assert((std::is_same::value), "" ); +#endif assert(f(36, 4) == 9); #if TEST_STD_VER > 11 typedef std::divides<> F2; diff --git a/libcxx/test/std/utilities/function.objects/arithmetic.operations/minus.pass.cpp b/libcxx/test/std/utilities/function.objects/arithmetic.operations/minus.pass.cpp --- a/libcxx/test/std/utilities/function.objects/arithmetic.operations/minus.pass.cpp +++ b/libcxx/test/std/utilities/function.objects/arithmetic.operations/minus.pass.cpp @@ -6,6 +6,8 @@ // //===----------------------------------------------------------------------===// +// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DISABLE_DEPRECATION_WARNINGS + // // minus @@ -20,9 +22,11 @@ { typedef std::minus F; const F f = F(); +#if TEST_STD_VER <= 17 static_assert((std::is_same::value), "" ); static_assert((std::is_same::value), "" ); static_assert((std::is_same::value), "" ); +#endif assert(f(3, 2) == 1); #if TEST_STD_VER > 11 typedef std::minus<> F2; diff --git a/libcxx/test/std/utilities/function.objects/arithmetic.operations/modulus.pass.cpp b/libcxx/test/std/utilities/function.objects/arithmetic.operations/modulus.pass.cpp --- a/libcxx/test/std/utilities/function.objects/arithmetic.operations/modulus.pass.cpp +++ b/libcxx/test/std/utilities/function.objects/arithmetic.operations/modulus.pass.cpp @@ -6,6 +6,8 @@ // //===----------------------------------------------------------------------===// +// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DISABLE_DEPRECATION_WARNINGS + // // modulus @@ -20,9 +22,11 @@ { typedef std::modulus F; const F f = F(); +#if TEST_STD_VER <= 17 static_assert((std::is_same::value), "" ); static_assert((std::is_same::value), "" ); static_assert((std::is_same::value), "" ); +#endif assert(f(36, 8) == 4); #if TEST_STD_VER > 11 typedef std::modulus<> F2; diff --git a/libcxx/test/std/utilities/function.objects/arithmetic.operations/multiplies.pass.cpp b/libcxx/test/std/utilities/function.objects/arithmetic.operations/multiplies.pass.cpp --- a/libcxx/test/std/utilities/function.objects/arithmetic.operations/multiplies.pass.cpp +++ b/libcxx/test/std/utilities/function.objects/arithmetic.operations/multiplies.pass.cpp @@ -6,6 +6,8 @@ // //===----------------------------------------------------------------------===// +// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DISABLE_DEPRECATION_WARNINGS + // // multiplies @@ -20,9 +22,11 @@ { typedef std::multiplies F; const F f = F(); +#if TEST_STD_VER <= 17 static_assert((std::is_same::value), "" ); static_assert((std::is_same::value), "" ); static_assert((std::is_same::value), "" ); +#endif assert(f(3, 2) == 6); #if TEST_STD_VER > 11 typedef std::multiplies<> F2; diff --git a/libcxx/test/std/utilities/function.objects/arithmetic.operations/negate.pass.cpp b/libcxx/test/std/utilities/function.objects/arithmetic.operations/negate.pass.cpp --- a/libcxx/test/std/utilities/function.objects/arithmetic.operations/negate.pass.cpp +++ b/libcxx/test/std/utilities/function.objects/arithmetic.operations/negate.pass.cpp @@ -6,6 +6,8 @@ // //===----------------------------------------------------------------------===// +// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DISABLE_DEPRECATION_WARNINGS + // // negate @@ -20,8 +22,10 @@ { typedef std::negate F; const F f = F(); +#if TEST_STD_VER <= 17 static_assert((std::is_same::value), "" ); static_assert((std::is_same::value), "" ); +#endif assert(f(36) == -36); #if TEST_STD_VER > 11 typedef std::negate<> F2; diff --git a/libcxx/test/std/utilities/function.objects/arithmetic.operations/plus.pass.cpp b/libcxx/test/std/utilities/function.objects/arithmetic.operations/plus.pass.cpp --- a/libcxx/test/std/utilities/function.objects/arithmetic.operations/plus.pass.cpp +++ b/libcxx/test/std/utilities/function.objects/arithmetic.operations/plus.pass.cpp @@ -6,6 +6,8 @@ // //===----------------------------------------------------------------------===// +// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DISABLE_DEPRECATION_WARNINGS + // // plus @@ -20,9 +22,11 @@ { typedef std::plus F; const F f = F(); - static_assert((std::is_same::value), "" ); - static_assert((std::is_same::value), "" ); - static_assert((std::is_same::value), "" ); +#if TEST_STD_VER <= 17 + static_assert((std::is_same::value), ""); + static_assert((std::is_same::value), ""); + static_assert((std::is_same::value), ""); +#endif assert(f(3, 2) == 5); #if TEST_STD_VER > 11 typedef std::plus<> F2; diff --git a/libcxx/test/std/utilities/function.objects/bitwise.operations/bit_and.pass.cpp b/libcxx/test/std/utilities/function.objects/bitwise.operations/bit_and.pass.cpp --- a/libcxx/test/std/utilities/function.objects/bitwise.operations/bit_and.pass.cpp +++ b/libcxx/test/std/utilities/function.objects/bitwise.operations/bit_and.pass.cpp @@ -6,6 +6,8 @@ // //===----------------------------------------------------------------------===// +// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DISABLE_DEPRECATION_WARNINGS + // // bit_and @@ -20,9 +22,11 @@ { typedef std::bit_and F; const F f = F(); +#if TEST_STD_VER <= 17 static_assert((std::is_same::value), "" ); static_assert((std::is_same::value), "" ); static_assert((std::is_same::value), "" ); +#endif assert(f(0xEA95, 0xEA95) == 0xEA95); assert(f(0xEA95, 0x58D3) == 0x4891); assert(f(0x58D3, 0xEA95) == 0x4891); diff --git a/libcxx/test/std/utilities/function.objects/bitwise.operations/bit_not.pass.cpp b/libcxx/test/std/utilities/function.objects/bitwise.operations/bit_not.pass.cpp --- a/libcxx/test/std/utilities/function.objects/bitwise.operations/bit_not.pass.cpp +++ b/libcxx/test/std/utilities/function.objects/bitwise.operations/bit_not.pass.cpp @@ -7,6 +7,8 @@ //===----------------------------------------------------------------------===// // UNSUPPORTED: c++03, c++11 +// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DISABLE_DEPRECATION_WARNINGS + // // bit_not @@ -21,8 +23,10 @@ { typedef std::bit_not F; const F f = F(); +#if TEST_STD_VER <= 17 static_assert((std::is_same::value), "" ); static_assert((std::is_same::value), "" ); +#endif assert((f(0xEA95) & 0xFFFF ) == 0x156A); assert((f(0x58D3) & 0xFFFF ) == 0xA72C); assert((f(0) & 0xFFFF ) == 0xFFFF); diff --git a/libcxx/test/std/utilities/function.objects/bitwise.operations/bit_or.pass.cpp b/libcxx/test/std/utilities/function.objects/bitwise.operations/bit_or.pass.cpp --- a/libcxx/test/std/utilities/function.objects/bitwise.operations/bit_or.pass.cpp +++ b/libcxx/test/std/utilities/function.objects/bitwise.operations/bit_or.pass.cpp @@ -6,6 +6,8 @@ // //===----------------------------------------------------------------------===// +// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DISABLE_DEPRECATION_WARNINGS + // // bit_or @@ -20,9 +22,11 @@ { typedef std::bit_or F; const F f = F(); +#if TEST_STD_VER <= 17 static_assert((std::is_same::value), "" ); static_assert((std::is_same::value), "" ); static_assert((std::is_same::value), "" ); +#endif assert(f(0xEA95, 0xEA95) == 0xEA95); assert(f(0xEA95, 0x58D3) == 0xFAD7); assert(f(0x58D3, 0xEA95) == 0xFAD7); diff --git a/libcxx/test/std/utilities/function.objects/bitwise.operations/bit_xor.pass.cpp b/libcxx/test/std/utilities/function.objects/bitwise.operations/bit_xor.pass.cpp --- a/libcxx/test/std/utilities/function.objects/bitwise.operations/bit_xor.pass.cpp +++ b/libcxx/test/std/utilities/function.objects/bitwise.operations/bit_xor.pass.cpp @@ -6,6 +6,8 @@ // //===----------------------------------------------------------------------===// +// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DISABLE_DEPRECATION_WARNINGS + // // bit_xor @@ -21,9 +23,11 @@ { typedef std::bit_xor F; const F f = F(); +#if TEST_STD_VER <= 17 static_assert((std::is_same::value), "" ); static_assert((std::is_same::value), "" ); static_assert((std::is_same::value), "" ); +#endif assert(f(0xEA95, 0xEA95) == 0); assert(f(0xEA95, 0x58D3) == 0xB246); assert(f(0x58D3, 0xEA95) == 0xB246); diff --git a/libcxx/test/std/utilities/function.objects/comparisons/equal_to.pass.cpp b/libcxx/test/std/utilities/function.objects/comparisons/equal_to.pass.cpp --- a/libcxx/test/std/utilities/function.objects/comparisons/equal_to.pass.cpp +++ b/libcxx/test/std/utilities/function.objects/comparisons/equal_to.pass.cpp @@ -6,6 +6,8 @@ // //===----------------------------------------------------------------------===// +// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DISABLE_DEPRECATION_WARNINGS + // // equal_to @@ -20,9 +22,11 @@ { typedef std::equal_to F; const F f = F(); +#if TEST_STD_VER <= 17 static_assert((std::is_same::value), "" ); static_assert((std::is_same::value), "" ); static_assert((std::is_same::value), "" ); +#endif assert(f(36, 36)); assert(!f(36, 6)); #if TEST_STD_VER > 11 diff --git a/libcxx/test/std/utilities/function.objects/comparisons/greater.pass.cpp b/libcxx/test/std/utilities/function.objects/comparisons/greater.pass.cpp --- a/libcxx/test/std/utilities/function.objects/comparisons/greater.pass.cpp +++ b/libcxx/test/std/utilities/function.objects/comparisons/greater.pass.cpp @@ -6,6 +6,8 @@ // //===----------------------------------------------------------------------===// +// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DISABLE_DEPRECATION_WARNINGS + // // greater @@ -21,9 +23,11 @@ { typedef std::greater F; const F f = F(); +#if TEST_STD_VER <= 17 static_assert((std::is_same::value), "" ); static_assert((std::is_same::value), "" ); static_assert((std::is_same::value), "" ); +#endif assert(!f(36, 36)); assert(f(36, 6)); assert(!f(6, 36)); diff --git a/libcxx/test/std/utilities/function.objects/comparisons/greater_equal.pass.cpp b/libcxx/test/std/utilities/function.objects/comparisons/greater_equal.pass.cpp --- a/libcxx/test/std/utilities/function.objects/comparisons/greater_equal.pass.cpp +++ b/libcxx/test/std/utilities/function.objects/comparisons/greater_equal.pass.cpp @@ -6,6 +6,8 @@ // //===----------------------------------------------------------------------===// +// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DISABLE_DEPRECATION_WARNINGS + // // greater_equal @@ -21,9 +23,11 @@ { typedef std::greater_equal F; const F f = F(); +#if TEST_STD_VER <= 17 static_assert((std::is_same::value), "" ); static_assert((std::is_same::value), "" ); static_assert((std::is_same::value), "" ); +#endif assert(f(36, 36)); assert(f(36, 6)); assert(!f(6, 36)); diff --git a/libcxx/test/std/utilities/function.objects/comparisons/less.pass.cpp b/libcxx/test/std/utilities/function.objects/comparisons/less.pass.cpp --- a/libcxx/test/std/utilities/function.objects/comparisons/less.pass.cpp +++ b/libcxx/test/std/utilities/function.objects/comparisons/less.pass.cpp @@ -6,6 +6,8 @@ // //===----------------------------------------------------------------------===// +// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DISABLE_DEPRECATION_WARNINGS + // // less @@ -21,9 +23,11 @@ { typedef std::less F; const F f = F(); +#if TEST_STD_VER <= 17 static_assert((std::is_same::value), "" ); static_assert((std::is_same::value), "" ); static_assert((std::is_same::value), "" ); +#endif assert(!f(36, 36)); assert(!f(36, 6)); assert(f(6, 36)); diff --git a/libcxx/test/std/utilities/function.objects/comparisons/less_equal.pass.cpp b/libcxx/test/std/utilities/function.objects/comparisons/less_equal.pass.cpp --- a/libcxx/test/std/utilities/function.objects/comparisons/less_equal.pass.cpp +++ b/libcxx/test/std/utilities/function.objects/comparisons/less_equal.pass.cpp @@ -6,6 +6,8 @@ // //===----------------------------------------------------------------------===// +// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DISABLE_DEPRECATION_WARNINGS + // // less_equal @@ -21,9 +23,11 @@ { typedef std::less_equal F; const F f = F(); +#if TEST_STD_VER <= 17 static_assert((std::is_same::value), "" ); static_assert((std::is_same::value), "" ); static_assert((std::is_same::value), "" ); +#endif assert(f(36, 36)); assert(!f(36, 6)); assert(f(6, 36)); diff --git a/libcxx/test/std/utilities/function.objects/comparisons/not_equal_to.pass.cpp b/libcxx/test/std/utilities/function.objects/comparisons/not_equal_to.pass.cpp --- a/libcxx/test/std/utilities/function.objects/comparisons/not_equal_to.pass.cpp +++ b/libcxx/test/std/utilities/function.objects/comparisons/not_equal_to.pass.cpp @@ -6,6 +6,8 @@ // //===----------------------------------------------------------------------===// +// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DISABLE_DEPRECATION_WARNINGS + // // not_equal_to @@ -20,9 +22,11 @@ { typedef std::not_equal_to F; const F f = F(); +#if TEST_STD_VER <= 17 static_assert((std::is_same::value), "" ); static_assert((std::is_same::value), "" ); static_assert((std::is_same::value), "" ); +#endif assert(!f(36, 36)); assert(f(36, 6)); #if TEST_STD_VER > 11 diff --git a/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/types.pass.cpp b/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/types.pass.cpp --- a/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/types.pass.cpp +++ b/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/types.pass.cpp @@ -70,7 +70,9 @@ template void test_nullary_function () { +#if TEST_STD_VER <= 17 static_assert((std::is_same::value), "" ); +#endif static_assert((!has_argument_type::value), "" ); static_assert((!has_first_argument_type::value), "" ); static_assert((!has_second_argument_type::value), "" ); @@ -79,8 +81,10 @@ template void test_unary_function () { +#if TEST_STD_VER <= 17 static_assert((std::is_same::value), "" ); static_assert((std::is_same::value), "" ); +#endif static_assert((!has_first_argument_type::value), "" ); static_assert((!has_second_argument_type::value), "" ); } @@ -88,16 +92,20 @@ template void test_binary_function () { +#if TEST_STD_VER <= 17 static_assert((std::is_same::value), "" ); static_assert((std::is_same::value), "" ); static_assert((std::is_same::value), "" ); +#endif static_assert((!has_argument_type::value), "" ); } template void test_other_function () { +#if TEST_STD_VER <= 17 static_assert((std::is_same::value), "" ); +#endif static_assert((!has_argument_type::value), "" ); static_assert((!has_first_argument_type::value), "" ); static_assert((!has_second_argument_type::value), "" ); diff --git a/libcxx/test/std/utilities/function.objects/logical.operations/logical_and.pass.cpp b/libcxx/test/std/utilities/function.objects/logical.operations/logical_and.pass.cpp --- a/libcxx/test/std/utilities/function.objects/logical.operations/logical_and.pass.cpp +++ b/libcxx/test/std/utilities/function.objects/logical.operations/logical_and.pass.cpp @@ -6,6 +6,8 @@ // //===----------------------------------------------------------------------===// +// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DISABLE_DEPRECATION_WARNINGS + // // logical_and @@ -20,9 +22,11 @@ { typedef std::logical_and F; const F f = F(); +#if TEST_STD_VER <= 17 static_assert((std::is_same::value), "" ); static_assert((std::is_same::value), "" ); static_assert((std::is_same::value), "" ); +#endif assert(f(36, 36)); assert(!f(36, 0)); assert(!f(0, 36)); diff --git a/libcxx/test/std/utilities/function.objects/logical.operations/logical_not.pass.cpp b/libcxx/test/std/utilities/function.objects/logical.operations/logical_not.pass.cpp --- a/libcxx/test/std/utilities/function.objects/logical.operations/logical_not.pass.cpp +++ b/libcxx/test/std/utilities/function.objects/logical.operations/logical_not.pass.cpp @@ -6,6 +6,8 @@ // //===----------------------------------------------------------------------===// +// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DISABLE_DEPRECATION_WARNINGS + // // logical_not @@ -20,8 +22,10 @@ { typedef std::logical_not F; const F f = F(); +#if TEST_STD_VER <= 17 static_assert((std::is_same::value), "" ); static_assert((std::is_same::value), "" ); +#endif assert(!f(36)); assert(f(0)); #if TEST_STD_VER > 11 diff --git a/libcxx/test/std/utilities/function.objects/logical.operations/logical_or.pass.cpp b/libcxx/test/std/utilities/function.objects/logical.operations/logical_or.pass.cpp --- a/libcxx/test/std/utilities/function.objects/logical.operations/logical_or.pass.cpp +++ b/libcxx/test/std/utilities/function.objects/logical.operations/logical_or.pass.cpp @@ -6,6 +6,8 @@ // //===----------------------------------------------------------------------===// +// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DISABLE_DEPRECATION_WARNINGS + // // logical_or @@ -20,9 +22,11 @@ { typedef std::logical_or F; const F f = F(); +#if TEST_STD_VER <= 17 static_assert((std::is_same::value), "" ); static_assert((std::is_same::value), "" ); static_assert((std::is_same::value), "" ); +#endif assert(f(36, 36)); assert(f(36, 0)); assert(f(0, 36)); diff --git a/libcxx/test/std/utilities/function.objects/negators/binary_negate.pass.cpp b/libcxx/test/std/utilities/function.objects/negators/binary_negate.pass.cpp --- a/libcxx/test/std/utilities/function.objects/negators/binary_negate.pass.cpp +++ b/libcxx/test/std/utilities/function.objects/negators/binary_negate.pass.cpp @@ -10,6 +10,7 @@ // binary_negate +// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_CXX20_REMOVED_BINDER_TYPEDEFS // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_CXX20_REMOVED_NEGATORS // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DISABLE_DEPRECATION_WARNINGS diff --git a/libcxx/test/std/utilities/function.objects/negators/not1.pass.cpp b/libcxx/test/std/utilities/function.objects/negators/not1.pass.cpp --- a/libcxx/test/std/utilities/function.objects/negators/not1.pass.cpp +++ b/libcxx/test/std/utilities/function.objects/negators/not1.pass.cpp @@ -10,6 +10,7 @@ // not1 +// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_CXX20_REMOVED_BINDER_TYPEDEFS // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_CXX20_REMOVED_NEGATORS // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DISABLE_DEPRECATION_WARNINGS diff --git a/libcxx/test/std/utilities/function.objects/negators/not2.pass.cpp b/libcxx/test/std/utilities/function.objects/negators/not2.pass.cpp --- a/libcxx/test/std/utilities/function.objects/negators/not2.pass.cpp +++ b/libcxx/test/std/utilities/function.objects/negators/not2.pass.cpp @@ -10,6 +10,7 @@ // not2 +// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_CXX20_REMOVED_BINDER_TYPEDEFS // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_CXX20_REMOVED_NEGATORS // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DISABLE_DEPRECATION_WARNINGS diff --git a/libcxx/test/std/utilities/function.objects/negators/unary_negate.pass.cpp b/libcxx/test/std/utilities/function.objects/negators/unary_negate.pass.cpp --- a/libcxx/test/std/utilities/function.objects/negators/unary_negate.pass.cpp +++ b/libcxx/test/std/utilities/function.objects/negators/unary_negate.pass.cpp @@ -10,6 +10,7 @@ // unary_negate +// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_CXX20_REMOVED_BINDER_TYPEDEFS // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_CXX20_REMOVED_NEGATORS // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DISABLE_DEPRECATION_WARNINGS diff --git a/libcxx/test/std/utilities/function.objects/unord.hash/enum.pass.cpp b/libcxx/test/std/utilities/function.objects/unord.hash/enum.pass.cpp --- a/libcxx/test/std/utilities/function.objects/unord.hash/enum.pass.cpp +++ b/libcxx/test/std/utilities/function.objects/unord.hash/enum.pass.cpp @@ -6,6 +6,8 @@ // //===----------------------------------------------------------------------===// +// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DISABLE_DEPRECATION_WARNINGS + // UNSUPPORTED: c++03, c++11 // @@ -33,8 +35,10 @@ test() { typedef std::hash H; - static_assert((std::is_same::value), "" ); - static_assert((std::is_same::value), "" ); +#if TEST_STD_VER <= 17 + static_assert((std::is_same::value), ""); + static_assert((std::is_same::value), ""); +#endif ASSERT_NOEXCEPT(H()(T())); typedef typename std::underlying_type::type under_type; diff --git a/libcxx/test/std/utilities/function.objects/unord.hash/floating.pass.cpp b/libcxx/test/std/utilities/function.objects/unord.hash/floating.pass.cpp --- a/libcxx/test/std/utilities/function.objects/unord.hash/floating.pass.cpp +++ b/libcxx/test/std/utilities/function.objects/unord.hash/floating.pass.cpp @@ -6,6 +6,8 @@ // //===----------------------------------------------------------------------===// +// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DISABLE_DEPRECATION_WARNINGS + // // template @@ -30,8 +32,10 @@ test() { typedef std::hash H; - static_assert((std::is_same::value), "" ); - static_assert((std::is_same::value), "" ); +#if TEST_STD_VER <= 17 + static_assert((std::is_same::value), ""); + static_assert((std::is_same::value), ""); +#endif ASSERT_NOEXCEPT(H()(T())); H h; diff --git a/libcxx/test/std/utilities/function.objects/unord.hash/integral.pass.cpp b/libcxx/test/std/utilities/function.objects/unord.hash/integral.pass.cpp --- a/libcxx/test/std/utilities/function.objects/unord.hash/integral.pass.cpp +++ b/libcxx/test/std/utilities/function.objects/unord.hash/integral.pass.cpp @@ -6,6 +6,8 @@ // //===----------------------------------------------------------------------===// +// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DISABLE_DEPRECATION_WARNINGS + // // template @@ -28,8 +30,10 @@ test() { typedef std::hash H; - static_assert((std::is_same::value), "" ); - static_assert((std::is_same::value), "" ); +#if TEST_STD_VER <= 17 + static_assert((std::is_same::value), ""); + static_assert((std::is_same::value), ""); +#endif ASSERT_NOEXCEPT(H()(T())); H h; diff --git a/libcxx/test/std/utilities/function.objects/unord.hash/pointer.pass.cpp b/libcxx/test/std/utilities/function.objects/unord.hash/pointer.pass.cpp --- a/libcxx/test/std/utilities/function.objects/unord.hash/pointer.pass.cpp +++ b/libcxx/test/std/utilities/function.objects/unord.hash/pointer.pass.cpp @@ -6,6 +6,8 @@ // //===----------------------------------------------------------------------===// +// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DISABLE_DEPRECATION_WARNINGS + // // template @@ -29,8 +31,10 @@ test() { typedef std::hash H; - static_assert((std::is_same::value), "" ); - static_assert((std::is_same::value), "" ); +#if TEST_STD_VER <= 17 + static_assert((std::is_same::value), ""); + static_assert((std::is_same::value), ""); +#endif ASSERT_NOEXCEPT(H()(T())); H h; @@ -46,8 +50,10 @@ #if TEST_STD_VER > 14 typedef std::nullptr_t T; typedef std::hash H; +#if TEST_STD_VER <= 17 static_assert((std::is_same::value), "" ); static_assert((std::is_same::value), "" ); +#endif ASSERT_NOEXCEPT(H()(T())); #endif } diff --git a/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.ownerless/owner_less.pass.cpp b/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.ownerless/owner_less.pass.cpp --- a/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.ownerless/owner_less.pass.cpp +++ b/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.ownerless/owner_less.pass.cpp @@ -6,6 +6,8 @@ // //===----------------------------------------------------------------------===// +// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DISABLE_DEPRECATION_WARNINGS + // // template struct owner_less; @@ -65,9 +67,11 @@ typedef std::owner_less > CS; CS cs; +#if TEST_STD_VER <= 17 static_assert((std::is_same, CS::first_argument_type>::value), "" ); static_assert((std::is_same, CS::second_argument_type>::value), "" ); static_assert((std::is_same::value), "" ); +#endif assert(!cs(p1, p2)); assert(!cs(p2, p1)); @@ -86,9 +90,11 @@ typedef std::owner_less > CS; CS cs; +#if TEST_STD_VER <= 17 static_assert((std::is_same, CS::first_argument_type>::value), "" ); static_assert((std::is_same, CS::second_argument_type>::value), "" ); static_assert((std::is_same::value), "" ); +#endif assert(!cs(w1, w2)); assert(!cs(w2, w1));