diff options
Diffstat (limited to 'system/include/libcxx/functional')
-rw-r--r-- | system/include/libcxx/functional | 370 |
1 files changed, 200 insertions, 170 deletions
diff --git a/system/include/libcxx/functional b/system/include/libcxx/functional index 2130f0e3..d40f70af 100644 --- a/system/include/libcxx/functional +++ b/system/include/libcxx/functional @@ -56,7 +56,7 @@ public: // invoke template <class... ArgTypes> - typename result_of<T(ArgTypes...)>::type + typename result_of<T&(ArgTypes&&...)>::type operator() (ArgTypes&&...) const; }; @@ -358,18 +358,6 @@ template <class S, class T> const_mem_fun_ref_t<S,T> mem_fun_ref(S ( template <class S, class T, class A> const_mem_fun1_ref_t<S,T,A> mem_fun_ref(S (T::*f)(A) const); template<class R, class T> unspecified mem_fn(R T::*); -template<class R, class T, class... Args> unspecified mem_fn(R (T::*)(Args...)); -template<class R, class T, class... Args> unspecified mem_fn(R (T::*)(Args...) const); -template<class R, class T, class... Args> unspecified mem_fn(R (T::*)(Args...) volatile); -template<class R, class T, class... Args> unspecified mem_fn(R (T::*)(Args...) const volatile); -template<class R, class T, class... Args> unspecified mem_fn(R (T::*)(Args...) &); -template<class R, class T, class... Args> unspecified mem_fn(R (T::*)(Args...) const &); -template<class R, class T, class... Args> unspecified mem_fn(R (T::*)(Args...) volatile &); -template<class R, class T, class... Args> unspecified mem_fn(R (T::*)(Args...) const volatile &); -template<class R, class T, class... Args> unspecified mem_fn(R (T::*)(Args...) &&); -template<class R, class T, class... Args> unspecified mem_fn(R (T::*)(Args...) const &&); -template<class R, class T, class... Args> unspecified mem_fn(R (T::*)(Args...) volatile &&); -template<class R, class T, class... Args> unspecified mem_fn(R (T::*)(Args...) const volatile &&); class bad_function_call : public exception @@ -502,19 +490,22 @@ template <class _Tp = void> #else template <class _Tp> #endif -struct _LIBCPP_TYPE_VIS plus : binary_function<_Tp, _Tp, _Tp> +struct _LIBCPP_TYPE_VIS_ONLY plus : binary_function<_Tp, _Tp, _Tp> { - _LIBCPP_INLINE_VISIBILITY _Tp operator()(const _Tp& __x, const _Tp& __y) const + _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY + _Tp operator()(const _Tp& __x, const _Tp& __y) const {return __x + __y;} }; #if _LIBCPP_STD_VER > 11 template <> -struct _LIBCPP_TYPE_VIS plus<void> +struct _LIBCPP_TYPE_VIS_ONLY plus<void> { template <class _T1, class _T2> - _LIBCPP_INLINE_VISIBILITY auto operator()(_T1&& __t, _T2&& __u) const + _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY + auto operator()(_T1&& __t, _T2&& __u) const { return _VSTD::forward<_T1>(__t) + _VSTD::forward<_T2>(__u); } + typedef void is_transparent; }; #endif @@ -524,19 +515,22 @@ template <class _Tp = void> #else template <class _Tp> #endif -struct _LIBCPP_TYPE_VIS minus : binary_function<_Tp, _Tp, _Tp> +struct _LIBCPP_TYPE_VIS_ONLY minus : binary_function<_Tp, _Tp, _Tp> { - _LIBCPP_INLINE_VISIBILITY _Tp operator()(const _Tp& __x, const _Tp& __y) const + _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY + _Tp operator()(const _Tp& __x, const _Tp& __y) const {return __x - __y;} }; #if _LIBCPP_STD_VER > 11 template <> -struct _LIBCPP_TYPE_VIS minus<void> +struct _LIBCPP_TYPE_VIS_ONLY minus<void> { template <class _T1, class _T2> - _LIBCPP_INLINE_VISIBILITY auto operator()(_T1&& __t, _T2&& __u) const + _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY + auto operator()(_T1&& __t, _T2&& __u) const { return _VSTD::forward<_T1>(__t) - _VSTD::forward<_T2>(__u); } + typedef void is_transparent; }; #endif @@ -546,19 +540,22 @@ template <class _Tp = void> #else template <class _Tp> #endif -struct _LIBCPP_TYPE_VIS multiplies : binary_function<_Tp, _Tp, _Tp> +struct _LIBCPP_TYPE_VIS_ONLY multiplies : binary_function<_Tp, _Tp, _Tp> { - _LIBCPP_INLINE_VISIBILITY _Tp operator()(const _Tp& __x, const _Tp& __y) const + _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY + _Tp operator()(const _Tp& __x, const _Tp& __y) const {return __x * __y;} }; #if _LIBCPP_STD_VER > 11 template <> -struct _LIBCPP_TYPE_VIS multiplies<void> +struct _LIBCPP_TYPE_VIS_ONLY multiplies<void> { template <class _T1, class _T2> - _LIBCPP_INLINE_VISIBILITY auto operator()(_T1&& __t, _T2&& __u) const + _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY + auto operator()(_T1&& __t, _T2&& __u) const { return _VSTD::forward<_T1>(__t) * _VSTD::forward<_T2>(__u); } + typedef void is_transparent; }; #endif @@ -568,19 +565,22 @@ template <class _Tp = void> #else template <class _Tp> #endif -struct _LIBCPP_TYPE_VIS divides : binary_function<_Tp, _Tp, _Tp> +struct _LIBCPP_TYPE_VIS_ONLY divides : binary_function<_Tp, _Tp, _Tp> { - _LIBCPP_INLINE_VISIBILITY _Tp operator()(const _Tp& __x, const _Tp& __y) const + _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY + _Tp operator()(const _Tp& __x, const _Tp& __y) const {return __x / __y;} }; #if _LIBCPP_STD_VER > 11 template <> -struct _LIBCPP_TYPE_VIS divides<void> +struct _LIBCPP_TYPE_VIS_ONLY divides<void> { template <class _T1, class _T2> - _LIBCPP_INLINE_VISIBILITY auto operator()(_T1&& __t, _T2&& __u) const + _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY + auto operator()(_T1&& __t, _T2&& __u) const { return _VSTD::forward<_T1>(__t) / _VSTD::forward<_T2>(__u); } + typedef void is_transparent; }; #endif @@ -590,19 +590,22 @@ template <class _Tp = void> #else template <class _Tp> #endif -struct _LIBCPP_TYPE_VIS modulus : binary_function<_Tp, _Tp, _Tp> +struct _LIBCPP_TYPE_VIS_ONLY modulus : binary_function<_Tp, _Tp, _Tp> { - _LIBCPP_INLINE_VISIBILITY _Tp operator()(const _Tp& __x, const _Tp& __y) const + _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY + _Tp operator()(const _Tp& __x, const _Tp& __y) const {return __x % __y;} }; #if _LIBCPP_STD_VER > 11 template <> -struct _LIBCPP_TYPE_VIS modulus<void> +struct _LIBCPP_TYPE_VIS_ONLY modulus<void> { template <class _T1, class _T2> - _LIBCPP_INLINE_VISIBILITY auto operator()(_T1&& __t, _T2&& __u) const + _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY + auto operator()(_T1&& __t, _T2&& __u) const { return _VSTD::forward<_T1>(__t) % _VSTD::forward<_T2>(__u); } + typedef void is_transparent; }; #endif @@ -612,19 +615,22 @@ template <class _Tp = void> #else template <class _Tp> #endif -struct _LIBCPP_TYPE_VIS negate : unary_function<_Tp, _Tp> +struct _LIBCPP_TYPE_VIS_ONLY negate : unary_function<_Tp, _Tp> { - _LIBCPP_INLINE_VISIBILITY _Tp operator()(const _Tp& __x) const + _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY + _Tp operator()(const _Tp& __x) const {return -__x;} }; #if _LIBCPP_STD_VER > 11 template <> -struct _LIBCPP_TYPE_VIS negate<void> +struct _LIBCPP_TYPE_VIS_ONLY negate<void> { template <class _Tp> - _LIBCPP_INLINE_VISIBILITY auto operator()(_Tp&& __x) const + _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY + auto operator()(_Tp&& __x) const { return -_VSTD::forward<_Tp>(__x); } + typedef void is_transparent; }; #endif @@ -634,19 +640,22 @@ template <class _Tp = void> #else template <class _Tp> #endif -struct _LIBCPP_TYPE_VIS equal_to : binary_function<_Tp, _Tp, bool> +struct _LIBCPP_TYPE_VIS_ONLY equal_to : binary_function<_Tp, _Tp, bool> { - _LIBCPP_INLINE_VISIBILITY bool operator()(const _Tp& __x, const _Tp& __y) const + _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY + bool operator()(const _Tp& __x, const _Tp& __y) const {return __x == __y;} }; #if _LIBCPP_STD_VER > 11 template <> -struct _LIBCPP_TYPE_VIS equal_to<void> +struct _LIBCPP_TYPE_VIS_ONLY equal_to<void> { - template <class _T1, class _T2> _LIBCPP_INLINE_VISIBILITY + template <class _T1, class _T2> + _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY auto operator()(_T1&& __t, _T2&& __u) const { return _VSTD::forward<_T1>(__t) == _VSTD::forward<_T2>(__u); } + typedef void is_transparent; }; #endif @@ -656,19 +665,22 @@ template <class _Tp = void> #else template <class _Tp> #endif -struct _LIBCPP_TYPE_VIS not_equal_to : binary_function<_Tp, _Tp, bool> +struct _LIBCPP_TYPE_VIS_ONLY not_equal_to : binary_function<_Tp, _Tp, bool> { - _LIBCPP_INLINE_VISIBILITY bool operator()(const _Tp& __x, const _Tp& __y) const + _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY + bool operator()(const _Tp& __x, const _Tp& __y) const {return __x != __y;} }; #if _LIBCPP_STD_VER > 11 template <> -struct _LIBCPP_TYPE_VIS not_equal_to<void> +struct _LIBCPP_TYPE_VIS_ONLY not_equal_to<void> { - template <class _T1, class _T2> _LIBCPP_INLINE_VISIBILITY + template <class _T1, class _T2> + _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY auto operator()(_T1&& __t, _T2&& __u) const { return _VSTD::forward<_T1>(__t) != _VSTD::forward<_T2>(__u); } + typedef void is_transparent; }; #endif @@ -678,19 +690,22 @@ template <class _Tp = void> #else template <class _Tp> #endif -struct _LIBCPP_TYPE_VIS greater : binary_function<_Tp, _Tp, bool> +struct _LIBCPP_TYPE_VIS_ONLY greater : binary_function<_Tp, _Tp, bool> { - _LIBCPP_INLINE_VISIBILITY bool operator()(const _Tp& __x, const _Tp& __y) const + _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY + bool operator()(const _Tp& __x, const _Tp& __y) const {return __x > __y;} }; #if _LIBCPP_STD_VER > 11 template <> -struct _LIBCPP_TYPE_VIS greater<void> +struct _LIBCPP_TYPE_VIS_ONLY greater<void> { - template <class _T1, class _T2> _LIBCPP_INLINE_VISIBILITY + template <class _T1, class _T2> + _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY auto operator()(_T1&& __t, _T2&& __u) const { return _VSTD::forward<_T1>(__t) > _VSTD::forward<_T2>(__u); } + typedef void is_transparent; }; #endif @@ -702,19 +717,22 @@ template <class _Tp = void> #else template <class _Tp> #endif -struct _LIBCPP_TYPE_VIS greater_equal : binary_function<_Tp, _Tp, bool> +struct _LIBCPP_TYPE_VIS_ONLY greater_equal : binary_function<_Tp, _Tp, bool> { - _LIBCPP_INLINE_VISIBILITY bool operator()(const _Tp& __x, const _Tp& __y) const + _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY + bool operator()(const _Tp& __x, const _Tp& __y) const {return __x >= __y;} }; #if _LIBCPP_STD_VER > 11 template <> -struct _LIBCPP_TYPE_VIS greater_equal<void> +struct _LIBCPP_TYPE_VIS_ONLY greater_equal<void> { - template <class _T1, class _T2> _LIBCPP_INLINE_VISIBILITY + template <class _T1, class _T2> + _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY auto operator()(_T1&& __t, _T2&& __u) const { return _VSTD::forward<_T1>(__t) >= _VSTD::forward<_T2>(__u); } + typedef void is_transparent; }; #endif @@ -724,19 +742,22 @@ template <class _Tp = void> #else template <class _Tp> #endif -struct _LIBCPP_TYPE_VIS less_equal : binary_function<_Tp, _Tp, bool> +struct _LIBCPP_TYPE_VIS_ONLY less_equal : binary_function<_Tp, _Tp, bool> { - _LIBCPP_INLINE_VISIBILITY bool operator()(const _Tp& __x, const _Tp& __y) const + _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY + bool operator()(const _Tp& __x, const _Tp& __y) const {return __x <= __y;} }; #if _LIBCPP_STD_VER > 11 template <> -struct _LIBCPP_TYPE_VIS less_equal<void> +struct _LIBCPP_TYPE_VIS_ONLY less_equal<void> { - template <class _T1, class _T2> _LIBCPP_INLINE_VISIBILITY + template <class _T1, class _T2> + _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY auto operator()(_T1&& __t, _T2&& __u) const { return _VSTD::forward<_T1>(__t) <= _VSTD::forward<_T2>(__u); } + typedef void is_transparent; }; #endif @@ -746,19 +767,22 @@ template <class _Tp = void> #else template <class _Tp> #endif -struct _LIBCPP_TYPE_VIS logical_and : binary_function<_Tp, _Tp, bool> +struct _LIBCPP_TYPE_VIS_ONLY logical_and : binary_function<_Tp, _Tp, bool> { - _LIBCPP_INLINE_VISIBILITY bool operator()(const _Tp& __x, const _Tp& __y) const + _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY + bool operator()(const _Tp& __x, const _Tp& __y) const {return __x && __y;} }; #if _LIBCPP_STD_VER > 11 template <> -struct _LIBCPP_TYPE_VIS logical_and<void> +struct _LIBCPP_TYPE_VIS_ONLY logical_and<void> { - template <class _T1, class _T2> _LIBCPP_INLINE_VISIBILITY + template <class _T1, class _T2> + _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY auto operator()(_T1&& __t, _T2&& __u) const { return _VSTD::forward<_T1>(__t) && _VSTD::forward<_T2>(__u); } + typedef void is_transparent; }; #endif @@ -768,19 +792,22 @@ template <class _Tp = void> #else template <class _Tp> #endif -struct _LIBCPP_TYPE_VIS logical_or : binary_function<_Tp, _Tp, bool> +struct _LIBCPP_TYPE_VIS_ONLY logical_or : binary_function<_Tp, _Tp, bool> { - _LIBCPP_INLINE_VISIBILITY bool operator()(const _Tp& __x, const _Tp& __y) const + _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY + bool operator()(const _Tp& __x, const _Tp& __y) const {return __x || __y;} }; #if _LIBCPP_STD_VER > 11 template <> -struct _LIBCPP_TYPE_VIS logical_or<void> +struct _LIBCPP_TYPE_VIS_ONLY logical_or<void> { - template <class _T1, class _T2> _LIBCPP_INLINE_VISIBILITY + template <class _T1, class _T2> + _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY auto operator()(_T1&& __t, _T2&& __u) const { return _VSTD::forward<_T1>(__t) || _VSTD::forward<_T2>(__u); } + typedef void is_transparent; }; #endif @@ -790,19 +817,22 @@ template <class _Tp = void> #else template <class _Tp> #endif -struct _LIBCPP_TYPE_VIS logical_not : unary_function<_Tp, bool> +struct _LIBCPP_TYPE_VIS_ONLY logical_not : unary_function<_Tp, bool> { - _LIBCPP_INLINE_VISIBILITY bool operator()(const _Tp& __x) const + _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY + bool operator()(const _Tp& __x) const {return !__x;} }; #if _LIBCPP_STD_VER > 11 template <> -struct _LIBCPP_TYPE_VIS logical_not<void> +struct _LIBCPP_TYPE_VIS_ONLY logical_not<void> { template <class _Tp> - _LIBCPP_INLINE_VISIBILITY auto operator()(_Tp&& __x) const + _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY + auto operator()(_Tp&& __x) const { return !_VSTD::forward<_Tp>(__x); } + typedef void is_transparent; }; #endif @@ -812,19 +842,22 @@ template <class _Tp = void> #else template <class _Tp> #endif -struct _LIBCPP_TYPE_VIS bit_and : binary_function<_Tp, _Tp, _Tp> +struct _LIBCPP_TYPE_VIS_ONLY bit_and : binary_function<_Tp, _Tp, _Tp> { - _LIBCPP_INLINE_VISIBILITY _Tp operator()(const _Tp& __x, const _Tp& __y) const + _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY + _Tp operator()(const _Tp& __x, const _Tp& __y) const {return __x & __y;} }; #if _LIBCPP_STD_VER > 11 template <> -struct _LIBCPP_TYPE_VIS bit_and<void> +struct _LIBCPP_TYPE_VIS_ONLY bit_and<void> { - template <class _T1, class _T2> _LIBCPP_INLINE_VISIBILITY + template <class _T1, class _T2> + _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY auto operator()(_T1&& __t, _T2&& __u) const { return _VSTD::forward<_T1>(__t) & _VSTD::forward<_T2>(__u); } + typedef void is_transparent; }; #endif @@ -834,19 +867,22 @@ template <class _Tp = void> #else template <class _Tp> #endif -struct _LIBCPP_TYPE_VIS bit_or : binary_function<_Tp, _Tp, _Tp> +struct _LIBCPP_TYPE_VIS_ONLY bit_or : binary_function<_Tp, _Tp, _Tp> { - _LIBCPP_INLINE_VISIBILITY _Tp operator()(const _Tp& __x, const _Tp& __y) const + _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY + _Tp operator()(const _Tp& __x, const _Tp& __y) const {return __x | __y;} }; #if _LIBCPP_STD_VER > 11 template <> -struct _LIBCPP_TYPE_VIS bit_or<void> +struct _LIBCPP_TYPE_VIS_ONLY bit_or<void> { - template <class _T1, class _T2> _LIBCPP_INLINE_VISIBILITY + template <class _T1, class _T2> + _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY auto operator()(_T1&& __t, _T2&& __u) const { return _VSTD::forward<_T1>(__t) | _VSTD::forward<_T2>(__u); } + typedef void is_transparent; }; #endif @@ -856,79 +892,89 @@ template <class _Tp = void> #else template <class _Tp> #endif -struct _LIBCPP_TYPE_VIS bit_xor : binary_function<_Tp, _Tp, _Tp> +struct _LIBCPP_TYPE_VIS_ONLY bit_xor : binary_function<_Tp, _Tp, _Tp> { - _LIBCPP_INLINE_VISIBILITY _Tp operator()(const _Tp& __x, const _Tp& __y) const + _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY + _Tp operator()(const _Tp& __x, const _Tp& __y) const {return __x ^ __y;} }; #if _LIBCPP_STD_VER > 11 template <> -struct _LIBCPP_TYPE_VIS bit_xor<void> +struct _LIBCPP_TYPE_VIS_ONLY bit_xor<void> { - template <class _T1, class _T2> _LIBCPP_INLINE_VISIBILITY + template <class _T1, class _T2> + _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY auto operator()(_T1&& __t, _T2&& __u) const { return _VSTD::forward<_T1>(__t) ^ _VSTD::forward<_T2>(__u); } + typedef void is_transparent; }; #endif #if _LIBCPP_STD_VER > 11 template <class _Tp = void> -struct _LIBCPP_TYPE_VIS bit_not : unary_function<_Tp, _Tp> +struct _LIBCPP_TYPE_VIS_ONLY bit_not : unary_function<_Tp, _Tp> { - _LIBCPP_INLINE_VISIBILITY _Tp operator()(const _Tp& __x) const + _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY + _Tp operator()(const _Tp& __x) const {return ~__x;} }; template <> -struct _LIBCPP_TYPE_VIS bit_not<void> +struct _LIBCPP_TYPE_VIS_ONLY bit_not<void> { template <class _Tp> - _LIBCPP_INLINE_VISIBILITY auto operator()(_Tp&& __x) const + _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY + auto operator()(_Tp&& __x) const { return ~_VSTD::forward<_Tp>(__x); } + typedef void is_transparent; }; #endif template <class _Predicate> -class _LIBCPP_TYPE_VIS unary_negate +class _LIBCPP_TYPE_VIS_ONLY unary_negate : public unary_function<typename _Predicate::argument_type, bool> { _Predicate __pred_; public: - _LIBCPP_INLINE_VISIBILITY explicit unary_negate(const _Predicate& __pred) + _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY + explicit unary_negate(const _Predicate& __pred) : __pred_(__pred) {} - _LIBCPP_INLINE_VISIBILITY bool operator()(const typename _Predicate::argument_type& __x) const + _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY + bool operator()(const typename _Predicate::argument_type& __x) const {return !__pred_(__x);} }; template <class _Predicate> -inline _LIBCPP_INLINE_VISIBILITY +inline _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY unary_negate<_Predicate> not1(const _Predicate& __pred) {return unary_negate<_Predicate>(__pred);} template <class _Predicate> -class _LIBCPP_TYPE_VIS binary_negate +class _LIBCPP_TYPE_VIS_ONLY binary_negate : public binary_function<typename _Predicate::first_argument_type, typename _Predicate::second_argument_type, bool> { _Predicate __pred_; public: - _LIBCPP_INLINE_VISIBILITY explicit binary_negate(const _Predicate& __pred) - : __pred_(__pred) {} - _LIBCPP_INLINE_VISIBILITY bool operator()(const typename _Predicate::first_argument_type& __x, + _LIBCPP_INLINE_VISIBILITY explicit _LIBCPP_CONSTEXPR_AFTER_CXX11 + binary_negate(const _Predicate& __pred) : __pred_(__pred) {} + + _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY + bool operator()(const typename _Predicate::first_argument_type& __x, const typename _Predicate::second_argument_type& __y) const {return !__pred_(__x, __y);} }; template <class _Predicate> -inline _LIBCPP_INLINE_VISIBILITY +inline _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY binary_negate<_Predicate> not2(const _Predicate& __pred) {return binary_negate<_Predicate>(__pred);} template <class __Operation> -class _LIBCPP_TYPE_VIS binder1st +class _LIBCPP_TYPE_VIS_ONLY binder1st : public unary_function<typename __Operation::second_argument_type, typename __Operation::result_type> { @@ -954,7 +1000,7 @@ bind1st(const __Operation& __op, const _Tp& __x) {return binder1st<__Operation>(__op, __x);} template <class __Operation> -class _LIBCPP_TYPE_VIS binder2nd +class _LIBCPP_TYPE_VIS_ONLY binder2nd : public unary_function<typename __Operation::first_argument_type, typename __Operation::result_type> { @@ -980,7 +1026,7 @@ bind2nd(const __Operation& __op, const _Tp& __x) {return binder2nd<__Operation>(__op, __x);} template <class _Arg, class _Result> -class _LIBCPP_TYPE_VIS pointer_to_unary_function +class _LIBCPP_TYPE_VIS_ONLY pointer_to_unary_function : public unary_function<_Arg, _Result> { _Result (*__f_)(_Arg); @@ -998,7 +1044,7 @@ ptr_fun(_Result (*__f)(_Arg)) {return pointer_to_unary_function<_Arg,_Result>(__f);} template <class _Arg1, class _Arg2, class _Result> -class _LIBCPP_TYPE_VIS pointer_to_binary_function +class _LIBCPP_TYPE_VIS_ONLY pointer_to_binary_function : public binary_function<_Arg1, _Arg2, _Result> { _Result (*__f_)(_Arg1, _Arg2); @@ -1016,7 +1062,7 @@ ptr_fun(_Result (*__f)(_Arg1,_Arg2)) {return pointer_to_binary_function<_Arg1,_Arg2,_Result>(__f);} template<class _Sp, class _Tp> -class _LIBCPP_TYPE_VIS mem_fun_t : public unary_function<_Tp*, _Sp> +class _LIBCPP_TYPE_VIS_ONLY mem_fun_t : public unary_function<_Tp*, _Sp> { _Sp (_Tp::*__p_)(); public: @@ -1027,7 +1073,7 @@ public: }; template<class _Sp, class _Tp, class _Ap> -class _LIBCPP_TYPE_VIS mem_fun1_t : public binary_function<_Tp*, _Ap, _Sp> +class _LIBCPP_TYPE_VIS_ONLY mem_fun1_t : public binary_function<_Tp*, _Ap, _Sp> { _Sp (_Tp::*__p_)(_Ap); public: @@ -1050,7 +1096,7 @@ mem_fun(_Sp (_Tp::*__f)(_Ap)) {return mem_fun1_t<_Sp,_Tp,_Ap>(__f);} template<class _Sp, class _Tp> -class _LIBCPP_TYPE_VIS mem_fun_ref_t : public unary_function<_Tp, _Sp> +class _LIBCPP_TYPE_VIS_ONLY mem_fun_ref_t : public unary_function<_Tp, _Sp> { _Sp (_Tp::*__p_)(); public: @@ -1061,7 +1107,7 @@ public: }; template<class _Sp, class _Tp, class _Ap> -class _LIBCPP_TYPE_VIS mem_fun1_ref_t : public binary_function<_Tp, _Ap, _Sp> +class _LIBCPP_TYPE_VIS_ONLY mem_fun1_ref_t : public binary_function<_Tp, _Ap, _Sp> { _Sp (_Tp::*__p_)(_Ap); public: @@ -1084,7 +1130,7 @@ mem_fun_ref(_Sp (_Tp::*__f)(_Ap)) {return mem_fun1_ref_t<_Sp,_Tp,_Ap>(__f);} template <class _Sp, class _Tp> -class _LIBCPP_TYPE_VIS const_mem_fun_t : public unary_function<const _Tp*, _Sp> +class _LIBCPP_TYPE_VIS_ONLY const_mem_fun_t : public unary_function<const _Tp*, _Sp> { _Sp (_Tp::*__p_)() const; public: @@ -1095,7 +1141,7 @@ public: }; template <class _Sp, class _Tp, class _Ap> -class _LIBCPP_TYPE_VIS const_mem_fun1_t : public binary_function<const _Tp*, _Ap, _Sp> +class _LIBCPP_TYPE_VIS_ONLY const_mem_fun1_t : public binary_function<const _Tp*, _Ap, _Sp> { _Sp (_Tp::*__p_)(_Ap) const; public: @@ -1118,7 +1164,7 @@ mem_fun(_Sp (_Tp::*__f)(_Ap) const) {return const_mem_fun1_t<_Sp,_Tp,_Ap>(__f);} template <class _Sp, class _Tp> -class _LIBCPP_TYPE_VIS const_mem_fun_ref_t : public unary_function<_Tp, _Sp> +class _LIBCPP_TYPE_VIS_ONLY const_mem_fun_ref_t : public unary_function<_Tp, _Sp> { _Sp (_Tp::*__p_)() const; public: @@ -1129,7 +1175,7 @@ public: }; template <class _Sp, class _Tp, class _Ap> -class _LIBCPP_TYPE_VIS const_mem_fun1_ref_t +class _LIBCPP_TYPE_VIS_ONLY const_mem_fun1_ref_t : public binary_function<_Tp, _Ap, _Sp> { _Sp (_Tp::*__p_)(_Ap) const; @@ -1189,38 +1235,6 @@ mem_fn(_Rp _Tp::* __pm) return __mem_fn<_Rp _Tp::*>(__pm); } -template<class _Rp, class _Tp, class ..._Args> -inline _LIBCPP_INLINE_VISIBILITY -__mem_fn<_Rp (_Tp::*)(_Args...)> -mem_fn(_Rp (_Tp::* __pm)(_Args...)) -{ - return __mem_fn<_Rp (_Tp::*)(_Args...)>(__pm); -} - -template<class _Rp, class _Tp, class ..._Args> -inline _LIBCPP_INLINE_VISIBILITY -__mem_fn<_Rp (_Tp::*)(_Args...) const> -mem_fn(_Rp (_Tp::* __pm)(_Args...) const) -{ - return __mem_fn<_Rp (_Tp::*)(_Args...) const>(__pm); -} - -template<class _Rp, class _Tp, class ..._Args> -inline _LIBCPP_INLINE_VISIBILITY -__mem_fn<_Rp (_Tp::*)(_Args...) volatile> -mem_fn(_Rp (_Tp::* __pm)(_Args...) volatile) -{ - return __mem_fn<_Rp (_Tp::*)(_Args...) volatile>(__pm); -} - -template<class _Rp, class _Tp, class ..._Args> -inline _LIBCPP_INLINE_VISIBILITY -__mem_fn<_Rp (_Tp::*)(_Args...) const volatile> -mem_fn(_Rp (_Tp::* __pm)(_Args...) const volatile) -{ - return __mem_fn<_Rp (_Tp::*)(_Args...) const volatile>(__pm); -} - // bad_function_call class _LIBCPP_EXCEPTION_ABI bad_function_call @@ -1228,7 +1242,7 @@ class _LIBCPP_EXCEPTION_ABI bad_function_call { }; -template<class _Fp> class _LIBCPP_TYPE_VIS function; // undefined +template<class _Fp> class _LIBCPP_TYPE_VIS_ONLY function; // undefined namespace __function { @@ -1379,7 +1393,7 @@ __func<_Fp, _Alloc, _Rp(_ArgTypes...)>::target_type() const _NOEXCEPT } // __function template<class _Rp, class ..._ArgTypes> -class _LIBCPP_TYPE_VIS function<_Rp(_ArgTypes...)> +class _LIBCPP_TYPE_VIS_ONLY function<_Rp(_ArgTypes...)> : public __function::__maybe_derive_from_unary_function<_Rp(_ArgTypes...)>, public __function::__maybe_derive_from_binary_function<_Rp(_ArgTypes...)> { @@ -1801,11 +1815,11 @@ swap(function<_Rp(_ArgTypes...)>& __x, function<_Rp(_ArgTypes...)>& __y) _NOEXCE {return __x.swap(__y);} template<class _Tp> struct __is_bind_expression : public false_type {}; -template<class _Tp> struct _LIBCPP_TYPE_VIS is_bind_expression +template<class _Tp> struct _LIBCPP_TYPE_VIS_ONLY is_bind_expression : public __is_bind_expression<typename remove_cv<_Tp>::type> {}; template<class _Tp> struct __is_placeholder : public integral_constant<int, 0> {}; -template<class _Tp> struct _LIBCPP_TYPE_VIS is_placeholder +template<class _Tp> struct _LIBCPP_TYPE_VIS_ONLY is_placeholder : public __is_placeholder<typename remove_cv<_Tp>::type> {}; namespace placeholders @@ -1813,16 +1827,16 @@ namespace placeholders template <int _Np> struct __ph {}; -extern __ph<1> _1; -extern __ph<2> _2; -extern __ph<3> _3; -extern __ph<4> _4; -extern __ph<5> _5; -extern __ph<6> _6; -extern __ph<7> _7; -extern __ph<8> _8; -extern __ph<9> _9; -extern __ph<10> _10; +_LIBCPP_FUNC_VIS extern __ph<1> _1; +_LIBCPP_FUNC_VIS extern __ph<2> _2; +_LIBCPP_FUNC_VIS extern __ph<3> _3; +_LIBCPP_FUNC_VIS extern __ph<4> _4; +_LIBCPP_FUNC_VIS extern __ph<5> _5; +_LIBCPP_FUNC_VIS extern __ph<6> _6; +_LIBCPP_FUNC_VIS extern __ph<7> _7; +_LIBCPP_FUNC_VIS extern __ph<8> _8; +_LIBCPP_FUNC_VIS extern __ph<9> _9; +_LIBCPP_FUNC_VIS extern __ph<10> _10; } // placeholders @@ -2184,7 +2198,7 @@ bind(_Fp&& __f, _BoundArgs&&... __bound_args) #endif // _LIBCPP_HAS_NO_VARIADICS template <> -struct _LIBCPP_TYPE_VIS hash<bool> +struct _LIBCPP_TYPE_VIS_ONLY hash<bool> : public unary_function<bool, size_t> { _LIBCPP_INLINE_VISIBILITY @@ -2192,7 +2206,7 @@ struct _LIBCPP_TYPE_VIS hash<bool> }; template <> -struct _LIBCPP_TYPE_VIS hash<char> +struct _LIBCPP_TYPE_VIS_ONLY hash<char> : public unary_function<char, size_t> { _LIBCPP_INLINE_VISIBILITY @@ -2200,7 +2214,7 @@ struct _LIBCPP_TYPE_VIS hash<char> }; template <> -struct _LIBCPP_TYPE_VIS hash<signed char> +struct _LIBCPP_TYPE_VIS_ONLY hash<signed char> : public unary_function<signed char, size_t> { _LIBCPP_INLINE_VISIBILITY @@ -2208,7 +2222,7 @@ struct _LIBCPP_TYPE_VIS hash<signed char> }; template <> -struct _LIBCPP_TYPE_VIS hash<unsigned char> +struct _LIBCPP_TYPE_VIS_ONLY hash<unsigned char> : public unary_function<unsigned char, size_t> { _LIBCPP_INLINE_VISIBILITY @@ -2218,7 +2232,7 @@ struct _LIBCPP_TYPE_VIS hash<unsigned char> #ifndef _LIBCPP_HAS_NO_UNICODE_CHARS template <> -struct _LIBCPP_TYPE_VIS hash<char16_t> +struct _LIBCPP_TYPE_VIS_ONLY hash<char16_t> : public unary_function<char16_t, size_t> { _LIBCPP_INLINE_VISIBILITY @@ -2226,7 +2240,7 @@ struct _LIBCPP_TYPE_VIS hash<char16_t> }; template <> -struct _LIBCPP_TYPE_VIS hash<char32_t> +struct _LIBCPP_TYPE_VIS_ONLY hash<char32_t> : public unary_function<char32_t, size_t> { _LIBCPP_INLINE_VISIBILITY @@ -2236,7 +2250,7 @@ struct _LIBCPP_TYPE_VIS hash<char32_t> #endif // _LIBCPP_HAS_NO_UNICODE_CHARS template <> -struct _LIBCPP_TYPE_VIS hash<wchar_t> +struct _LIBCPP_TYPE_VIS_ONLY hash<wchar_t> : public unary_function<wchar_t, size_t> { _LIBCPP_INLINE_VISIBILITY @@ -2244,7 +2258,7 @@ struct _LIBCPP_TYPE_VIS hash<wchar_t> }; template <> -struct _LIBCPP_TYPE_VIS hash<short> +struct _LIBCPP_TYPE_VIS_ONLY hash<short> : public unary_function<short, size_t> { _LIBCPP_INLINE_VISIBILITY @@ -2252,7 +2266,7 @@ struct _LIBCPP_TYPE_VIS hash<short> }; template <> -struct _LIBCPP_TYPE_VIS hash<unsigned short> +struct _LIBCPP_TYPE_VIS_ONLY hash<unsigned short> : public unary_function<unsigned short, size_t> { _LIBCPP_INLINE_VISIBILITY @@ -2260,7 +2274,7 @@ struct _LIBCPP_TYPE_VIS hash<unsigned short> }; template <> -struct _LIBCPP_TYPE_VIS hash<int> +struct _LIBCPP_TYPE_VIS_ONLY hash<int> : public unary_function<int, size_t> { _LIBCPP_INLINE_VISIBILITY @@ -2268,7 +2282,7 @@ struct _LIBCPP_TYPE_VIS hash<int> }; template <> -struct _LIBCPP_TYPE_VIS hash<unsigned int> +struct _LIBCPP_TYPE_VIS_ONLY hash<unsigned int> : public unary_function<unsigned int, size_t> { _LIBCPP_INLINE_VISIBILITY @@ -2276,7 +2290,7 @@ struct _LIBCPP_TYPE_VIS hash<unsigned int> }; template <> -struct _LIBCPP_TYPE_VIS hash<long> +struct _LIBCPP_TYPE_VIS_ONLY hash<long> : public unary_function<long, size_t> { _LIBCPP_INLINE_VISIBILITY @@ -2284,7 +2298,7 @@ struct _LIBCPP_TYPE_VIS hash<long> }; template <> -struct _LIBCPP_TYPE_VIS hash<unsigned long> +struct _LIBCPP_TYPE_VIS_ONLY hash<unsigned long> : public unary_function<unsigned long, size_t> { _LIBCPP_INLINE_VISIBILITY @@ -2292,19 +2306,19 @@ struct _LIBCPP_TYPE_VIS hash<unsigned long> }; template <> -struct _LIBCPP_TYPE_VIS hash<long long> +struct _LIBCPP_TYPE_VIS_ONLY hash<long long> : public __scalar_hash<long long> { }; template <> -struct _LIBCPP_TYPE_VIS hash<unsigned long long> +struct _LIBCPP_TYPE_VIS_ONLY hash<unsigned long long> : public __scalar_hash<unsigned long long> { }; template <> -struct _LIBCPP_TYPE_VIS hash<float> +struct _LIBCPP_TYPE_VIS_ONLY hash<float> : public __scalar_hash<float> { _LIBCPP_INLINE_VISIBILITY @@ -2318,7 +2332,7 @@ struct _LIBCPP_TYPE_VIS hash<float> }; template <> -struct _LIBCPP_TYPE_VIS hash<double> +struct _LIBCPP_TYPE_VIS_ONLY hash<double> : public __scalar_hash<double> { _LIBCPP_INLINE_VISIBILITY @@ -2332,7 +2346,7 @@ struct _LIBCPP_TYPE_VIS hash<double> }; template <> -struct _LIBCPP_TYPE_VIS hash<long double> +struct _LIBCPP_TYPE_VIS_ONLY hash<long double> : public __scalar_hash<long double> { _LIBCPP_INLINE_VISIBILITY @@ -2381,6 +2395,22 @@ struct _LIBCPP_TYPE_VIS hash<long double> } }; +#if _LIBCPP_STD_VER > 11 +template <class _Tp> +struct _LIBCPP_TYPE_VIS_ONLY hash + : public unary_function<_Tp, size_t> +{ + static_assert(is_enum<_Tp>::value, "This hash only works for enumeration types"); + + _LIBCPP_INLINE_VISIBILITY + size_t operator()(_Tp __v) const _NOEXCEPT + { + typedef typename underlying_type<_Tp>::type type; + return hash<type>{}(static_cast<type>(__v)); + } +}; +#endif + // struct hash<T*> in <memory> _LIBCPP_END_NAMESPACE_STD |