diff options
Diffstat (limited to 'libcxx/include/__utility')
| -rw-r--r-- | libcxx/include/__utility/as_const.h | 2 | ||||
| -rw-r--r-- | libcxx/include/__utility/auto_cast.h | 2 | ||||
| -rw-r--r-- | libcxx/include/__utility/cmp.h | 11 | ||||
| -rw-r--r-- | libcxx/include/__utility/declval.h | 2 | ||||
| -rw-r--r-- | libcxx/include/__utility/exchange.h | 2 | ||||
| -rw-r--r-- | libcxx/include/__utility/forward.h | 5 | ||||
| -rw-r--r-- | libcxx/include/__utility/in_place.h | 2 | ||||
| -rw-r--r-- | libcxx/include/__utility/integer_sequence.h | 2 | ||||
| -rw-r--r-- | libcxx/include/__utility/move.h | 7 | ||||
| -rw-r--r-- | libcxx/include/__utility/pair.h | 26 | ||||
| -rw-r--r-- | libcxx/include/__utility/piecewise_construct.h | 2 | ||||
| -rw-r--r-- | libcxx/include/__utility/priority_tag.h | 2 | ||||
| -rw-r--r-- | libcxx/include/__utility/rel_ops.h | 2 | ||||
| -rw-r--r-- | libcxx/include/__utility/swap.h | 2 | ||||
| -rw-r--r-- | libcxx/include/__utility/to_underlying.h | 2 | ||||
| -rw-r--r-- | libcxx/include/__utility/transaction.h | 2 | ||||
| -rw-r--r-- | libcxx/include/__utility/unreachable.h | 38 |
17 files changed, 79 insertions, 32 deletions
diff --git a/libcxx/include/__utility/as_const.h b/libcxx/include/__utility/as_const.h index 52da739875e3..be7dd8c7cf23 100644 --- a/libcxx/include/__utility/as_const.h +++ b/libcxx/include/__utility/as_const.h @@ -15,7 +15,7 @@ #include <type_traits> #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -#pragma GCC system_header +# pragma GCC system_header #endif _LIBCPP_BEGIN_NAMESPACE_STD diff --git a/libcxx/include/__utility/auto_cast.h b/libcxx/include/__utility/auto_cast.h index 5c368e077508..e9079443959f 100644 --- a/libcxx/include/__utility/auto_cast.h +++ b/libcxx/include/__utility/auto_cast.h @@ -14,7 +14,7 @@ #include <type_traits> #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -#pragma GCC system_header +# pragma GCC system_header #endif #define _LIBCPP_AUTO_CAST(expr) static_cast<typename decay<decltype((expr))>::type>(expr) diff --git a/libcxx/include/__utility/cmp.h b/libcxx/include/__utility/cmp.h index 4fc96b054f4d..3cfd98106705 100644 --- a/libcxx/include/__utility/cmp.h +++ b/libcxx/include/__utility/cmp.h @@ -16,7 +16,7 @@ #include <type_traits> #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -#pragma GCC system_header +# pragma GCC system_header #endif _LIBCPP_PUSH_MACROS @@ -24,19 +24,16 @@ _LIBCPP_PUSH_MACROS _LIBCPP_BEGIN_NAMESPACE_STD -#if _LIBCPP_STD_VER > 17 && !defined(_LIBCPP_HAS_NO_CONCEPTS) +#if _LIBCPP_STD_VER > 17 template<class _Tp, class... _Up> struct _IsSameAsAny : _Or<_IsSame<_Tp, _Up>...> {}; template<class _Tp> concept __is_safe_integral_cmp = is_integral_v<_Tp> && - !_IsSameAsAny<_Tp, bool, char + !_IsSameAsAny<_Tp, bool, char, char16_t, char32_t #ifndef _LIBCPP_HAS_NO_CHAR8_T , char8_t #endif -#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS - , char16_t, char32_t -#endif #ifndef _LIBCPP_HAS_NO_WIDE_CHARACTERS , wchar_t #endif @@ -101,7 +98,7 @@ bool in_range(_Up __u) noexcept return _VSTD::cmp_less_equal(__u, numeric_limits<_Tp>::max()) && _VSTD::cmp_greater_equal(__u, numeric_limits<_Tp>::min()); } -#endif +#endif // _LIBCPP_STD_VER > 17 _LIBCPP_END_NAMESPACE_STD diff --git a/libcxx/include/__utility/declval.h b/libcxx/include/__utility/declval.h index 6a9dcd9a1949..97fd1eba91c6 100644 --- a/libcxx/include/__utility/declval.h +++ b/libcxx/include/__utility/declval.h @@ -12,7 +12,7 @@ #include <__config> #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -#pragma GCC system_header +# pragma GCC system_header #endif _LIBCPP_BEGIN_NAMESPACE_STD diff --git a/libcxx/include/__utility/exchange.h b/libcxx/include/__utility/exchange.h index f9c92c622f54..d9b3c151755f 100644 --- a/libcxx/include/__utility/exchange.h +++ b/libcxx/include/__utility/exchange.h @@ -15,7 +15,7 @@ #include <type_traits> #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -#pragma GCC system_header +# pragma GCC system_header #endif _LIBCPP_BEGIN_NAMESPACE_STD diff --git a/libcxx/include/__utility/forward.h b/libcxx/include/__utility/forward.h index 7629a87d74ff..03ca16d9f955 100644 --- a/libcxx/include/__utility/forward.h +++ b/libcxx/include/__utility/forward.h @@ -11,10 +11,11 @@ #define _LIBCPP___UTILITY_FORWARD_H #include <__config> -#include <type_traits> +#include <__type_traits/is_reference.h> +#include <__type_traits/remove_reference.h> #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -#pragma GCC system_header +# pragma GCC system_header #endif _LIBCPP_BEGIN_NAMESPACE_STD diff --git a/libcxx/include/__utility/in_place.h b/libcxx/include/__utility/in_place.h index 846b4a6d4dfb..7a4973fa0407 100644 --- a/libcxx/include/__utility/in_place.h +++ b/libcxx/include/__utility/in_place.h @@ -13,7 +13,7 @@ #include <type_traits> #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -#pragma GCC system_header +# pragma GCC system_header #endif _LIBCPP_BEGIN_NAMESPACE_STD diff --git a/libcxx/include/__utility/integer_sequence.h b/libcxx/include/__utility/integer_sequence.h index 738ac6c02b05..633f1333e247 100644 --- a/libcxx/include/__utility/integer_sequence.h +++ b/libcxx/include/__utility/integer_sequence.h @@ -13,7 +13,7 @@ #include <type_traits> #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -#pragma GCC system_header +# pragma GCC system_header #endif _LIBCPP_BEGIN_NAMESPACE_STD diff --git a/libcxx/include/__utility/move.h b/libcxx/include/__utility/move.h index 75d715dc66da..da0d986093d6 100644 --- a/libcxx/include/__utility/move.h +++ b/libcxx/include/__utility/move.h @@ -14,7 +14,7 @@ #include <type_traits> #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -#pragma GCC system_header +# pragma GCC system_header #endif _LIBCPP_BEGIN_NAMESPACE_STD @@ -26,15 +26,10 @@ move(_Tp&& __t) _NOEXCEPT { return static_cast<_Up&&>(__t); } -#ifndef _LIBCPP_CXX03_LANG template <class _Tp> using __move_if_noexcept_result_t = typename conditional<!is_nothrow_move_constructible<_Tp>::value && is_copy_constructible<_Tp>::value, const _Tp&, _Tp&&>::type; -#else // _LIBCPP_CXX03_LANG -template <class _Tp> -using __move_if_noexcept_result_t = const _Tp&; -#endif template <class _Tp> _LIBCPP_NODISCARD_EXT inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11 __move_if_noexcept_result_t<_Tp> diff --git a/libcxx/include/__utility/pair.h b/libcxx/include/__utility/pair.h index f1114696884a..97635c2e61b5 100644 --- a/libcxx/include/__utility/pair.h +++ b/libcxx/include/__utility/pair.h @@ -21,7 +21,7 @@ #include <type_traits> #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -#pragma GCC system_header +# pragma GCC system_header #endif _LIBCPP_BEGIN_NAMESPACE_STD @@ -315,7 +315,7 @@ private: #endif }; -#if _LIBCPP_STD_VER >= 17 +#if _LIBCPP_STD_VER > 14 template<class _T1, class _T2> pair(_T1, _T2) -> pair<_T1, _T2>; #endif @@ -330,7 +330,7 @@ operator==(const pair<_T1,_T2>& __x, const pair<_T1,_T2>& __y) return __x.first == __y.first && __x.second == __y.second; } -#if _LIBCPP_STD_VER > 17 && !defined(_LIBCPP_HAS_NO_CONCEPTS) +#if _LIBCPP_STD_VER > 17 template <class _T1, class _T2> _LIBCPP_HIDE_FROM_ABI constexpr @@ -345,7 +345,7 @@ operator<=>(const pair<_T1,_T2>& __x, const pair<_T1,_T2>& __y) return _VSTD::__synth_three_way(__x.second, __y.second); } -#else // _LIBCPP_STD_VER > 17 && !defined(_LIBCPP_HAS_NO_CONCEPTS) +#else // _LIBCPP_STD_VER > 17 template <class _T1, class _T2> inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11 @@ -387,7 +387,23 @@ operator<=(const pair<_T1,_T2>& __x, const pair<_T1,_T2>& __y) return !(__y < __x); } -#endif // _LIBCPP_STD_VER > 17 && !defined(_LIBCPP_HAS_NO_CONCEPTS) +#endif // _LIBCPP_STD_VER > 17 + +#if _LIBCPP_STD_VER > 20 +template <class _T1, class _T2, class _U1, class _U2, template<class> class _TQual, template<class> class _UQual> + requires requires { typename pair<common_reference_t<_TQual<_T1>, _UQual<_U1>>, + common_reference_t<_TQual<_T2>, _UQual<_U2>>>; } +struct basic_common_reference<pair<_T1, _T2>, pair<_U1, _U2>, _TQual, _UQual> { + using type = pair<common_reference_t<_TQual<_T1>, _UQual<_U1>>, + common_reference_t<_TQual<_T2>, _UQual<_U2>>>; +}; + +template <class _T1, class _T2, class _U1, class _U2> + requires requires { typename pair<common_type_t<_T1, _U1>, common_type_t<_T2, _U2>>; } +struct common_type<pair<_T1, _T2>, pair<_U1, _U2>> { + using type = pair<common_type_t<_T1, _U1>, common_type_t<_T2, _U2>>; +}; +#endif // _LIBCPP_STD_VER > 20 template <class _T1, class _T2> inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17 diff --git a/libcxx/include/__utility/piecewise_construct.h b/libcxx/include/__utility/piecewise_construct.h index 4dc44b38fe99..3cc86fef2a0f 100644 --- a/libcxx/include/__utility/piecewise_construct.h +++ b/libcxx/include/__utility/piecewise_construct.h @@ -12,7 +12,7 @@ #include <__config> #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -#pragma GCC system_header +# pragma GCC system_header #endif _LIBCPP_BEGIN_NAMESPACE_STD diff --git a/libcxx/include/__utility/priority_tag.h b/libcxx/include/__utility/priority_tag.h index 45d9e5ec4c8f..e51ba6bfcc05 100644 --- a/libcxx/include/__utility/priority_tag.h +++ b/libcxx/include/__utility/priority_tag.h @@ -13,7 +13,7 @@ #include <cstddef> #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -#pragma GCC system_header +# pragma GCC system_header #endif _LIBCPP_BEGIN_NAMESPACE_STD diff --git a/libcxx/include/__utility/rel_ops.h b/libcxx/include/__utility/rel_ops.h index d59e96d72dc1..2577e94e91f6 100644 --- a/libcxx/include/__utility/rel_ops.h +++ b/libcxx/include/__utility/rel_ops.h @@ -15,7 +15,7 @@ #include <type_traits> #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -#pragma GCC system_header +# pragma GCC system_header #endif _LIBCPP_BEGIN_NAMESPACE_STD diff --git a/libcxx/include/__utility/swap.h b/libcxx/include/__utility/swap.h index 20ec1419fc97..f9e7f36678ba 100644 --- a/libcxx/include/__utility/swap.h +++ b/libcxx/include/__utility/swap.h @@ -16,7 +16,7 @@ #include <type_traits> #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -#pragma GCC system_header +# pragma GCC system_header #endif _LIBCPP_BEGIN_NAMESPACE_STD diff --git a/libcxx/include/__utility/to_underlying.h b/libcxx/include/__utility/to_underlying.h index 54f99108a38c..3428406e8d3a 100644 --- a/libcxx/include/__utility/to_underlying.h +++ b/libcxx/include/__utility/to_underlying.h @@ -14,7 +14,7 @@ #include <type_traits> #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -#pragma GCC system_header +# pragma GCC system_header #endif _LIBCPP_BEGIN_NAMESPACE_STD diff --git a/libcxx/include/__utility/transaction.h b/libcxx/include/__utility/transaction.h index 5bc3a500fdc5..87e51c0b198e 100644 --- a/libcxx/include/__utility/transaction.h +++ b/libcxx/include/__utility/transaction.h @@ -15,7 +15,7 @@ #include <type_traits> #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -#pragma GCC system_header +# pragma GCC system_header #endif _LIBCPP_BEGIN_NAMESPACE_STD diff --git a/libcxx/include/__utility/unreachable.h b/libcxx/include/__utility/unreachable.h new file mode 100644 index 000000000000..485edb227c92 --- /dev/null +++ b/libcxx/include/__utility/unreachable.h @@ -0,0 +1,38 @@ +//===----------------------------------------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// + +#ifndef _LIBCPP___UTILITY_UNREACHABLE_H +#define _LIBCPP___UTILITY_UNREACHABLE_H + +#include <__config> +#include <cstdlib> + +#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) +# pragma GCC system_header +#endif + +_LIBCPP_BEGIN_NAMESPACE_STD + +_LIBCPP_NORETURN _LIBCPP_HIDE_FROM_ABI inline void __libcpp_unreachable() +{ +#if __has_builtin(__builtin_unreachable) + __builtin_unreachable(); +#else + std::abort(); +#endif +} + +#if _LIBCPP_STD_VER > 20 + +[[noreturn]] _LIBCPP_HIDE_FROM_ABI inline void unreachable() { __libcpp_unreachable(); } + +#endif // _LIBCPP_STD_VER > 20 + +_LIBCPP_END_NAMESPACE_STD + +#endif |
