From 4d6c0e864425d119df02edce8cb9749cca080a75 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yehuda=20Bern=C3=A1th?= Date: Mon, 31 Mar 2025 19:29:55 +0300 Subject: [PATCH 1/3] Implement P0472R3 - Move monostate to --- stl/inc/utility | 30 ++++++++++++++++++++++++++++++ stl/inc/variant | 26 -------------------------- stl/inc/xutility | 4 ---- 3 files changed, 30 insertions(+), 30 deletions(-) diff --git a/stl/inc/utility b/stl/inc/utility index 999de93c950..01260e6d905 100644 --- a/stl/inc/utility +++ b/stl/inc/utility @@ -973,6 +973,36 @@ _NODISCARD _MSVC_INTRINSIC constexpr _Forward_like_t<_Ty, _Uty> forward_like(_Ut } #endif // _HAS_CXX23 +#if _HAS_CXX17 +_EXPORT_STD struct monostate {}; + +_EXPORT_STD _NODISCARD constexpr bool operator==(monostate, monostate) noexcept { + return true; +} + +#if _HAS_CXX20 +_EXPORT_STD _NODISCARD constexpr strong_ordering operator<=>(monostate, monostate) noexcept { + return strong_ordering::equal; +} +#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv +_NODISCARD constexpr bool operator!=(monostate, monostate) noexcept { + return false; +} +_NODISCARD constexpr bool operator<(monostate, monostate) noexcept { + return false; +} +_NODISCARD constexpr bool operator>(monostate, monostate) noexcept { + return false; +} +_NODISCARD constexpr bool operator<=(monostate, monostate) noexcept { + return true; +} +_NODISCARD constexpr bool operator>=(monostate, monostate) noexcept { + return true; +} +#endif // ^^^ !_HAS_CXX20 ^^^ +#endif // _HAS_CXX17 + #if _HAS_TR1_NAMESPACE namespace _DEPRECATE_TR1_NAMESPACE tr1 { using _STD get; diff --git a/stl/inc/variant b/stl/inc/variant index e2a2e7581c6..5006458bbc2 100644 --- a/stl/inc/variant +++ b/stl/inc/variant @@ -1647,32 +1647,6 @@ constexpr _Ret visit(_Callable&& _Obj, _Variants&&... _Args) { } #endif // _HAS_CXX20 -_EXPORT_STD _NODISCARD constexpr bool operator==(monostate, monostate) noexcept { - return true; -} - -#if _HAS_CXX20 -_EXPORT_STD _NODISCARD constexpr strong_ordering operator<=>(monostate, monostate) noexcept { - return strong_ordering::equal; -} -#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv -_NODISCARD constexpr bool operator!=(monostate, monostate) noexcept { - return false; -} -_NODISCARD constexpr bool operator<(monostate, monostate) noexcept { - return false; -} -_NODISCARD constexpr bool operator>(monostate, monostate) noexcept { - return false; -} -_NODISCARD constexpr bool operator<=(monostate, monostate) noexcept { - return true; -} -_NODISCARD constexpr bool operator>=(monostate, monostate) noexcept { - return true; -} -#endif // ^^^ !_HAS_CXX20 ^^^ - _EXPORT_STD template ..., is_swappable<_Types>...>, int> = 0> _CONSTEXPR20 void swap(variant<_Types...>& _Left, variant<_Types...>& _Right) noexcept(noexcept(_Left.swap(_Right))) { diff --git a/stl/inc/xutility b/stl/inc/xutility index fbce0c9df7c..d93f3b606d5 100644 --- a/stl/inc/xutility +++ b/stl/inc/xutility @@ -7568,10 +7568,6 @@ struct _CXX17_DEPRECATE_ITERATOR_BASE_CLASS iterator { // base type for iterator using reference = _Reference; }; -#if _HAS_CXX17 -_EXPORT_STD struct monostate {}; -#endif // _HAS_CXX17 - #if _HAS_CXX23 template <_Integer_like _Int> _NODISCARD constexpr bool _Add_overflow(const _Int _Left, const _Int _Right, _Int& _Out) { From 0463c5b61b874cd164399d8bc7ff4bbdeb26e66d Mon Sep 17 00:00:00 2001 From: "Stephan T. Lavavej" Date: Mon, 31 Mar 2025 14:15:39 -0700 Subject: [PATCH 2/3] Add P0472R3 to the C++17 section of yvals_core.h. --- stl/inc/yvals_core.h | 1 + 1 file changed, 1 insertion(+) diff --git a/stl/inc/yvals_core.h b/stl/inc/yvals_core.h index 2e1f7472d11..fcbb50a4692 100644 --- a/stl/inc/yvals_core.h +++ b/stl/inc/yvals_core.h @@ -120,6 +120,7 @@ // P0426R1 constexpr For char_traits // P0433R2 Deduction Guides For The STL // P0452R1 Unifying Parallel Algorithms +// P0472R3 Put monostate In // P0504R0 Revisiting in_place_t/in_place_type_t/in_place_index_t // P0505R0 constexpr For (Again) // P0508R0 Clarifying insert_return_type From c68bd230125160ad65db0e93b709e64ed2483733 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yehuda=20Bern=C3=A1th?= Date: Tue, 1 Apr 2025 14:29:11 +0300 Subject: [PATCH 3/3] Move hash to --- stl/inc/utility | 10 ++++++++++ stl/inc/variant | 10 ---------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/stl/inc/utility b/stl/inc/utility index 01260e6d905..4570a7bb790 100644 --- a/stl/inc/utility +++ b/stl/inc/utility @@ -1001,6 +1001,16 @@ _NODISCARD constexpr bool operator>=(monostate, monostate) noexcept { return true; } #endif // ^^^ !_HAS_CXX20 ^^^ + +template <> +struct hash { + using _ARGUMENT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS = monostate; + using _RESULT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS = size_t; + + _NODISCARD _STATIC_CALL_OPERATOR size_t operator()(monostate) _CONST_CALL_OPERATOR noexcept { + return 1729; // Arbitrary value + } +}; #endif // _HAS_CXX17 #if _HAS_TR1_NAMESPACE diff --git a/stl/inc/variant b/stl/inc/variant index 5006458bbc2..c17d88fe17e 100644 --- a/stl/inc/variant +++ b/stl/inc/variant @@ -1676,16 +1676,6 @@ struct hash> : _Conditionally_enabled_hash } }; -template <> -struct hash { - using _ARGUMENT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS = monostate; - using _RESULT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS = size_t; - - _NODISCARD _STATIC_CALL_OPERATOR size_t operator()(monostate) _CONST_CALL_OPERATOR noexcept { - return 1729; // Arbitrary value - } -}; - _STD_END #undef _STL_STAMP