[libcxx-commits] [libcxx] [libcxx] Put `std::monostate` in `<utility>` (PR #128373)
Amr Hesham via libcxx-commits
libcxx-commits at lists.llvm.org
Mon Feb 24 11:03:03 PST 2025
https://github.com/AmrDeveloper updated https://github.com/llvm/llvm-project/pull/128373
>From 949df004d4d73bdc8d99536eaf6ccad8200e3f35 Mon Sep 17 00:00:00 2001
From: AmrDeveloper <amr96 at programmer.net>
Date: Sat, 22 Feb 2025 23:13:20 +0100
Subject: [PATCH 01/11] [libcxx] Put `std::monostate` in `<utility>`
---
libcxx/docs/ReleaseNotes/21.rst | 1 +
libcxx/docs/Status/Cxx2cPapers.csv | 2 +-
libcxx/include/__cxx03/__utility/monostate.h | 65 ++++++++++++++++++
libcxx/include/__utility/monostate.h | 66 +++++++++++++++++++
.../utility.monostate.relpos/relops.pass.cpp | 47 +++++++++++++
.../utility.monostate/monostate.pass.cpp | 31 +++++++++
6 files changed, 211 insertions(+), 1 deletion(-)
create mode 100644 libcxx/include/__cxx03/__utility/monostate.h
create mode 100644 libcxx/include/__utility/monostate.h
create mode 100644 libcxx/test/std/utilities/utility/utility.monostate.relpos/relops.pass.cpp
create mode 100644 libcxx/test/std/utilities/utility/utility.monostate/monostate.pass.cpp
diff --git a/libcxx/docs/ReleaseNotes/21.rst b/libcxx/docs/ReleaseNotes/21.rst
index 30c6cc5eaf0c2..d1935c8af02e0 100644
--- a/libcxx/docs/ReleaseNotes/21.rst
+++ b/libcxx/docs/ReleaseNotes/21.rst
@@ -40,6 +40,7 @@ Implemented Papers
- N4258: Cleaning-up noexcept in the Library (`Github <https://github.com/llvm/llvm-project/issues/99937>`__)
- P1361R2: Integration of chrono with text formatting (`Github <https://github.com/llvm/llvm-project/issues/100014>`__)
+- P0472R3: Put std::monostate in <utility> (`Github <https://github.com/llvm/llvm-project/issues/127874`__)
Improvements and New Features
-----------------------------
diff --git a/libcxx/docs/Status/Cxx2cPapers.csv b/libcxx/docs/Status/Cxx2cPapers.csv
index 1436db6cf2b45..a47cc193382da 100644
--- a/libcxx/docs/Status/Cxx2cPapers.csv
+++ b/libcxx/docs/Status/Cxx2cPapers.csv
@@ -102,7 +102,7 @@
"`P3475R2 <https://wg21.link/P3475R2>`__","Defang and deprecate ``memory_order::consume``","2025-02 (Hagenberg)","","",""
"`P2786R13 <https://wg21.link/P2786R13>`__","Trivial Relocatability For C++26","2025-02 (Hagenberg)","","",""
"`P3137R3 <https://wg21.link/P3137R3>`__","``views::to_input``","2025-02 (Hagenberg)","","",""
-"`P0472R3 <https://wg21.link/P0472R3>`__","Put ``std::monostate`` in ``<utility>``","2025-02 (Hagenberg)","","",""
+"`P0472R3 <https://wg21.link/P0472R3>`__","Put ``std::monostate`` in ``<utility>``","2025-02 (Hagenberg)","|Complete|","21",""
"`P3349R1 <https://wg21.link/P3349R1>`__","Converting contiguous iterators to pointers","2025-02 (Hagenberg)","","",""
"`P3372R3 <https://wg21.link/P3372R3>`__","constexpr containers and adaptors","2025-02 (Hagenberg)","","",""
"`P3378R2 <https://wg21.link/P3378R2>`__","constexpr exception types","2025-02 (Hagenberg)","","",""
diff --git a/libcxx/include/__cxx03/__utility/monostate.h b/libcxx/include/__cxx03/__utility/monostate.h
new file mode 100644
index 0000000000000..486a18bfa54ca
--- /dev/null
+++ b/libcxx/include/__cxx03/__utility/monostate.h
@@ -0,0 +1,65 @@
+
+// -*- C++ -*-
+//===----------------------------------------------------------------------===//
+//
+// 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___CXX03___UTILITY_MONOSTATE_H
+#define _LIBCPP___CXX03___UTILITY_MONOSTATE_H
+
+#include <__cxx03/__compare/ordering.h>
+#include <__cxx03/__config>
+#include <__cxx03/__functional/hash.h>
+#include <__cxx03/cstddef>
+
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
+# pragma GCC system_header
+#endif
+
+_LIBCPP_BEGIN_NAMESPACE_STD
+
+#if _LIBCPP_STD_VER >= 17
+
+struct _LIBCPP_TEMPLATE_VIS monostate {};
+
+_LIBCPP_HIDE_FROM_ABI inline constexpr bool operator==(monostate, monostate) noexcept { return true; }
+
+# if _LIBCPP_STD_VER >= 20
+
+_LIBCPP_HIDE_FROM_ABI inline constexpr strong_ordering operator<=>(monostate, monostate) noexcept {
+ return strong_ordering::equal;
+}
+
+# else // _LIBCPP_STD_VER >= 20
+
+_LIBCPP_HIDE_FROM_ABI inline constexpr bool operator!=(monostate, monostate) noexcept { return false; }
+
+_LIBCPP_HIDE_FROM_ABI inline constexpr bool operator<(monostate, monostate) noexcept { return false; }
+
+_LIBCPP_HIDE_FROM_ABI inline constexpr bool operator>(monostate, monostate) noexcept { return false; }
+
+_LIBCPP_HIDE_FROM_ABI inline constexpr bool operator<=(monostate, monostate) noexcept { return true; }
+
+_LIBCPP_HIDE_FROM_ABI inline constexpr bool operator>=(monostate, monostate) noexcept { return true; }
+
+# endif // _LIBCPP_STD_VER >= 20
+
+template <>
+struct _LIBCPP_TEMPLATE_VIS hash<monostate> {
+ using argument_type = monostate;
+ using result_type = size_t;
+
+ inline _LIBCPP_HIDE_FROM_ABI result_type operator()(const argument_type&) const _NOEXCEPT {
+ return 66740831; // return a fundamentally attractive random value.
+ }
+};
+
+#endif // _LIBCPP_STD_VER >= 17
+
+_LIBCPP_END_NAMESPACE_STD
+
+#endif // _LIBCPP___CXX03___UTILITY_MONOSTATE_H
diff --git a/libcxx/include/__utility/monostate.h b/libcxx/include/__utility/monostate.h
new file mode 100644
index 0000000000000..3a2a659228e1c
--- /dev/null
+++ b/libcxx/include/__utility/monostate.h
@@ -0,0 +1,66 @@
+// -*- C++ -*-
+//===----------------------------------------------------------------------===//
+//
+// 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_MONOSTATE_H
+#define _LIBCPP___UTILITY_MONOSTATE_H
+
+#include <__compare/ordering.h>
+#include <__configUTILITY>
+#include <__cstddef/size_t.h>
+#include <__functional/hash.h>
+
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
+# pragma GCC system_header
+#endif
+
+_LIBCPP_BEGIN_NAMESPACE_STD
+
+#if _LIBCPP_STD_VER >= 17
+
+struct _LIBCPP_TEMPLATE_VIS monostate {};
+
+_LIBCPP_HIDE_FROM_ABI inline constexpr bool operator==(monostate, monostate) noexcept { return true; }
+
+# if _LIBCPP_STD_VER >= 20
+
+_LIBCPP_HIDE_FROM_ABI inline constexpr strong_ordering operator<=>(monostate, monostate) noexcept {
+ return strong_ordering::equal;
+}
+
+# else // _LIBCPP_STD_VER >= 20
+
+_LIBCPP_HIDE_FROM_ABI inline constexpr bool operator!=(monostate, monostate) noexcept { return false; }
+
+_LIBCPP_HIDE_FROM_ABI inline constexpr bool operator<(monostate, monostate) noexcept { return false; }
+
+_LIBCPP_HIDE_FROM_ABI inline constexpr bool operator>(monostate, monostate) noexcept { return false; }
+
+_LIBCPP_HIDE_FROM_ABI inline constexpr bool operator<=(monostate, monostate) noexcept { return true; }
+
+_LIBCPP_HIDE_FROM_ABI inline constexpr bool operator>=(monostate, monostate) noexcept { return true; }
+
+# endif // _LIBCPP_STD_VER >= 20
+
+template <>
+struct _LIBCPP_TEMPLATE_VIS hash<monostate> {
+# if _LIBCPP_STD_VER <= 17 || defined(_LIBCPP_ENABLE_CXX20_REMOVED_BINDER_TYPEDEFS)
+ using argument_type _LIBCPP_DEPRECATED_IN_CXX17 = monostate;
+ using result_type _LIBCPP_DEPRECATED_IN_CXX17 = size_t;
+# endif
+
+ inline _LIBCPP_HIDE_FROM_ABI size_t operator()(const monostate&) const noexcept {
+ return 66740831; // return a fundamentally attractive random value.
+ }
+};
+
+#endif // _LIBCPP_STD_VER >= 17
+
+_LIBCPP_END_NAMESPACE_STD
+
+#endif // _LIBCPP___UTILITY_MONOSTATE_H
diff --git a/libcxx/test/std/utilities/utility/utility.monostate.relpos/relops.pass.cpp b/libcxx/test/std/utilities/utility/utility.monostate.relpos/relops.pass.cpp
new file mode 100644
index 0000000000000..f29d89acdc739
--- /dev/null
+++ b/libcxx/test/std/utilities/utility/utility.monostate.relpos/relops.pass.cpp
@@ -0,0 +1,47 @@
+//===----------------------------------------------------------------------===//
+//
+// 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, c++17, c++20, c++23
+
+// <utility>
+
+// constexpr bool operator<(monostate, monostate) noexcept { return false; }
+// constexpr bool operator>(monostate, monostate) noexcept { return false; }
+// constexpr bool operator<=(monostate, monostate) noexcept { return true; }
+// constexpr bool operator>=(monostate, monostate) noexcept { return true; }
+// constexpr bool operator==(monostate, monostate) noexcept { return true; }
+// constexpr bool operator!=(monostate, monostate) noexcept { return false; }
+// constexpr strong_ordering operator<=>(monostate, monostate) noexcept { return strong_ordering::equal; } // since C++20
+
+#include <cassert>
+#include <utility>
+
+#include "test_comparisons.h"
+#include "test_macros.h"
+
+constexpr bool test() {
+ using M = std::monostate;
+ constexpr M m1{};
+ constexpr M m2{};
+ assert(testComparisons(m1, m2, /*isEqual*/ true, /*isLess*/ false));
+ AssertComparisonsAreNoexcept<M>();
+
+#if TEST_STD_VER > 17
+ assert(testOrder(m1, m2, std::strong_ordering::equal));
+ AssertOrderAreNoexcept<M>();
+#endif // TEST_STD_VER > 17
+
+ return true;
+}
+
+int main(int, char**) {
+ test();
+ static_assert(test());
+
+ return 0;
+}
diff --git a/libcxx/test/std/utilities/utility/utility.monostate/monostate.pass.cpp b/libcxx/test/std/utilities/utility/utility.monostate/monostate.pass.cpp
new file mode 100644
index 0000000000000..c78ce5a5c2f18
--- /dev/null
+++ b/libcxx/test/std/utilities/utility/utility.monostate/monostate.pass.cpp
@@ -0,0 +1,31 @@
+
+//===----------------------------------------------------------------------===//
+//
+// 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, c++17, c++20, c++23
+
+// <utility>
+
+// struct monostate {};
+
+#include <type_traits>
+#include <utility>
+
+#include "test_macros.h"
+
+int main(int, char**) {
+ using M = std::monostate;
+ static_assert(std::is_trivially_default_constructible<M>::value, "");
+ static_assert(std::is_trivially_copy_constructible<M>::value, "");
+ static_assert(std::is_trivially_copy_assignable<M>::value, "");
+ static_assert(std::is_trivially_destructible<M>::value, "");
+ constexpr M m{};
+ ((void)m);
+
+ return 0;
+}
>From 9a31074f667b3a4b78394f0760bd838f3d27d82c Mon Sep 17 00:00:00 2001
From: AmrDeveloper <amr96 at programmer.net>
Date: Sat, 22 Feb 2025 23:52:04 +0100
Subject: [PATCH 02/11] Add utility/monostate.h to cmakelist
---
libcxx/include/CMakeLists.txt | 2 ++
1 file changed, 2 insertions(+)
diff --git a/libcxx/include/CMakeLists.txt b/libcxx/include/CMakeLists.txt
index ee1d7b872b364..9ce76dd28ebbf 100644
--- a/libcxx/include/CMakeLists.txt
+++ b/libcxx/include/CMakeLists.txt
@@ -912,6 +912,7 @@ set(files
__utility/swap.h
__utility/to_underlying.h
__utility/unreachable.h
+ __utility/monostate.h
__variant/monostate.h
__vector/comparison.h
__vector/container_traits.h
@@ -1939,6 +1940,7 @@ set(files
__cxx03/__utility/swap.h
__cxx03/__utility/to_underlying.h
__cxx03/__utility/unreachable.h
+ __cxx03/__utility/monostate.h
__cxx03/__variant/monostate.h
__cxx03/__verbose_abort
__cxx03/algorithm
>From 26b42a327524920e0a6722b47e11b60e777e1acf Mon Sep 17 00:00:00 2001
From: AmrDeveloper <amr96 at programmer.net>
Date: Sat, 22 Feb 2025 23:55:42 +0100
Subject: [PATCH 03/11] Fix hyperlink in release note
---
libcxx/docs/ReleaseNotes/21.rst | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/libcxx/docs/ReleaseNotes/21.rst b/libcxx/docs/ReleaseNotes/21.rst
index d1935c8af02e0..019af3bbed8e2 100644
--- a/libcxx/docs/ReleaseNotes/21.rst
+++ b/libcxx/docs/ReleaseNotes/21.rst
@@ -40,7 +40,7 @@ Implemented Papers
- N4258: Cleaning-up noexcept in the Library (`Github <https://github.com/llvm/llvm-project/issues/99937>`__)
- P1361R2: Integration of chrono with text formatting (`Github <https://github.com/llvm/llvm-project/issues/100014>`__)
-- P0472R3: Put std::monostate in <utility> (`Github <https://github.com/llvm/llvm-project/issues/127874`__)
+- P0472R3: Put std::monostate in <utility> (`Github <https://github.com/llvm/llvm-project/issues/127874>`__)
Improvements and New Features
-----------------------------
>From 65c770ffca96f5aa32489c8c84e52d01ad21f813 Mon Sep 17 00:00:00 2001
From: AmrDeveloper <amr96 at programmer.net>
Date: Sun, 23 Feb 2025 13:40:01 +0100
Subject: [PATCH 04/11] Replace doublicate monostate by include it in utility
---
libcxx/include/__cxx03/__utility/monostate.h | 65 -------------------
libcxx/include/__utility/monostate.h | 66 --------------------
libcxx/include/utility | 4 ++
3 files changed, 4 insertions(+), 131 deletions(-)
delete mode 100644 libcxx/include/__cxx03/__utility/monostate.h
delete mode 100644 libcxx/include/__utility/monostate.h
diff --git a/libcxx/include/__cxx03/__utility/monostate.h b/libcxx/include/__cxx03/__utility/monostate.h
deleted file mode 100644
index 486a18bfa54ca..0000000000000
--- a/libcxx/include/__cxx03/__utility/monostate.h
+++ /dev/null
@@ -1,65 +0,0 @@
-
-// -*- C++ -*-
-//===----------------------------------------------------------------------===//
-//
-// 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___CXX03___UTILITY_MONOSTATE_H
-#define _LIBCPP___CXX03___UTILITY_MONOSTATE_H
-
-#include <__cxx03/__compare/ordering.h>
-#include <__cxx03/__config>
-#include <__cxx03/__functional/hash.h>
-#include <__cxx03/cstddef>
-
-#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
-# pragma GCC system_header
-#endif
-
-_LIBCPP_BEGIN_NAMESPACE_STD
-
-#if _LIBCPP_STD_VER >= 17
-
-struct _LIBCPP_TEMPLATE_VIS monostate {};
-
-_LIBCPP_HIDE_FROM_ABI inline constexpr bool operator==(monostate, monostate) noexcept { return true; }
-
-# if _LIBCPP_STD_VER >= 20
-
-_LIBCPP_HIDE_FROM_ABI inline constexpr strong_ordering operator<=>(monostate, monostate) noexcept {
- return strong_ordering::equal;
-}
-
-# else // _LIBCPP_STD_VER >= 20
-
-_LIBCPP_HIDE_FROM_ABI inline constexpr bool operator!=(monostate, monostate) noexcept { return false; }
-
-_LIBCPP_HIDE_FROM_ABI inline constexpr bool operator<(monostate, monostate) noexcept { return false; }
-
-_LIBCPP_HIDE_FROM_ABI inline constexpr bool operator>(monostate, monostate) noexcept { return false; }
-
-_LIBCPP_HIDE_FROM_ABI inline constexpr bool operator<=(monostate, monostate) noexcept { return true; }
-
-_LIBCPP_HIDE_FROM_ABI inline constexpr bool operator>=(monostate, monostate) noexcept { return true; }
-
-# endif // _LIBCPP_STD_VER >= 20
-
-template <>
-struct _LIBCPP_TEMPLATE_VIS hash<monostate> {
- using argument_type = monostate;
- using result_type = size_t;
-
- inline _LIBCPP_HIDE_FROM_ABI result_type operator()(const argument_type&) const _NOEXCEPT {
- return 66740831; // return a fundamentally attractive random value.
- }
-};
-
-#endif // _LIBCPP_STD_VER >= 17
-
-_LIBCPP_END_NAMESPACE_STD
-
-#endif // _LIBCPP___CXX03___UTILITY_MONOSTATE_H
diff --git a/libcxx/include/__utility/monostate.h b/libcxx/include/__utility/monostate.h
deleted file mode 100644
index 3a2a659228e1c..0000000000000
--- a/libcxx/include/__utility/monostate.h
+++ /dev/null
@@ -1,66 +0,0 @@
-// -*- C++ -*-
-//===----------------------------------------------------------------------===//
-//
-// 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_MONOSTATE_H
-#define _LIBCPP___UTILITY_MONOSTATE_H
-
-#include <__compare/ordering.h>
-#include <__configUTILITY>
-#include <__cstddef/size_t.h>
-#include <__functional/hash.h>
-
-#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
-# pragma GCC system_header
-#endif
-
-_LIBCPP_BEGIN_NAMESPACE_STD
-
-#if _LIBCPP_STD_VER >= 17
-
-struct _LIBCPP_TEMPLATE_VIS monostate {};
-
-_LIBCPP_HIDE_FROM_ABI inline constexpr bool operator==(monostate, monostate) noexcept { return true; }
-
-# if _LIBCPP_STD_VER >= 20
-
-_LIBCPP_HIDE_FROM_ABI inline constexpr strong_ordering operator<=>(monostate, monostate) noexcept {
- return strong_ordering::equal;
-}
-
-# else // _LIBCPP_STD_VER >= 20
-
-_LIBCPP_HIDE_FROM_ABI inline constexpr bool operator!=(monostate, monostate) noexcept { return false; }
-
-_LIBCPP_HIDE_FROM_ABI inline constexpr bool operator<(monostate, monostate) noexcept { return false; }
-
-_LIBCPP_HIDE_FROM_ABI inline constexpr bool operator>(monostate, monostate) noexcept { return false; }
-
-_LIBCPP_HIDE_FROM_ABI inline constexpr bool operator<=(monostate, monostate) noexcept { return true; }
-
-_LIBCPP_HIDE_FROM_ABI inline constexpr bool operator>=(monostate, monostate) noexcept { return true; }
-
-# endif // _LIBCPP_STD_VER >= 20
-
-template <>
-struct _LIBCPP_TEMPLATE_VIS hash<monostate> {
-# if _LIBCPP_STD_VER <= 17 || defined(_LIBCPP_ENABLE_CXX20_REMOVED_BINDER_TYPEDEFS)
- using argument_type _LIBCPP_DEPRECATED_IN_CXX17 = monostate;
- using result_type _LIBCPP_DEPRECATED_IN_CXX17 = size_t;
-# endif
-
- inline _LIBCPP_HIDE_FROM_ABI size_t operator()(const monostate&) const noexcept {
- return 66740831; // return a fundamentally attractive random value.
- }
-};
-
-#endif // _LIBCPP_STD_VER >= 17
-
-_LIBCPP_END_NAMESPACE_STD
-
-#endif // _LIBCPP___UTILITY_MONOSTATE_H
diff --git a/libcxx/include/utility b/libcxx/include/utility
index fb8a6f81350be..4e0dde8cfb16f 100644
--- a/libcxx/include/utility
+++ b/libcxx/include/utility
@@ -279,6 +279,10 @@ template <class T>
# include <__utility/unreachable.h>
# endif
+# if _LIBCPP_STD_VER >= 26
+# include <__variant/monostate.h>
+# endif
+
# include <version>
// standard-mandated includes
>From cc1fa83b0233d6e2620d2361682032ab1240a5ca Mon Sep 17 00:00:00 2001
From: AmrDeveloper <amr96 at programmer.net>
Date: Sun, 23 Feb 2025 13:49:49 +0100
Subject: [PATCH 05/11] Remove building files
---
libcxx/include/CMakeLists.txt | 2 --
1 file changed, 2 deletions(-)
diff --git a/libcxx/include/CMakeLists.txt b/libcxx/include/CMakeLists.txt
index 9ce76dd28ebbf..ee1d7b872b364 100644
--- a/libcxx/include/CMakeLists.txt
+++ b/libcxx/include/CMakeLists.txt
@@ -912,7 +912,6 @@ set(files
__utility/swap.h
__utility/to_underlying.h
__utility/unreachable.h
- __utility/monostate.h
__variant/monostate.h
__vector/comparison.h
__vector/container_traits.h
@@ -1940,7 +1939,6 @@ set(files
__cxx03/__utility/swap.h
__cxx03/__utility/to_underlying.h
__cxx03/__utility/unreachable.h
- __cxx03/__utility/monostate.h
__cxx03/__variant/monostate.h
__cxx03/__verbose_abort
__cxx03/algorithm
>From a3a5f2b6307cfa9c5e85d874af3a29d424e78f82 Mon Sep 17 00:00:00 2001
From: AmrDeveloper <amr96 at programmer.net>
Date: Sun, 23 Feb 2025 13:54:27 +0100
Subject: [PATCH 06/11] Format the macro endif
---
libcxx/include/utility | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/libcxx/include/utility b/libcxx/include/utility
index 4e0dde8cfb16f..99dd02906b01e 100644
--- a/libcxx/include/utility
+++ b/libcxx/include/utility
@@ -281,7 +281,7 @@ template <class T>
# if _LIBCPP_STD_VER >= 26
# include <__variant/monostate.h>
-# endif
+# endif
# include <version>
>From 0752719e744b55c6e80acefe26df11ae60e11667 Mon Sep 17 00:00:00 2001
From: AmrDeveloper <amr96 at programmer.net>
Date: Sun, 23 Feb 2025 13:59:53 +0100
Subject: [PATCH 07/11] Format the code
---
libcxx/include/utility | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/libcxx/include/utility b/libcxx/include/utility
index 99dd02906b01e..bc4eaf6a0cd02 100644
--- a/libcxx/include/utility
+++ b/libcxx/include/utility
@@ -279,7 +279,7 @@ template <class T>
# include <__utility/unreachable.h>
# endif
-# if _LIBCPP_STD_VER >= 26
+# if _LIBCPP_STD_VER >= 26
# include <__variant/monostate.h>
# endif
>From 85bfdebce44dfa1df69f97cff6333b0dfa620630 Mon Sep 17 00:00:00 2001
From: AmrDeveloper <amr96 at programmer.net>
Date: Sun, 23 Feb 2025 15:28:54 +0100
Subject: [PATCH 08/11] Add utility cstring to cxx26.csv
---
libcxx/test/libcxx/transitive_includes/cxx26.csv | 1 +
1 file changed, 1 insertion(+)
diff --git a/libcxx/test/libcxx/transitive_includes/cxx26.csv b/libcxx/test/libcxx/transitive_includes/cxx26.csv
index 00ab78e61a457..fb80e1e2b059d 100644
--- a/libcxx/test/libcxx/transitive_includes/cxx26.csv
+++ b/libcxx/test/libcxx/transitive_includes/cxx26.csv
@@ -1114,6 +1114,7 @@ unordered_set tuple
unordered_set version
utility compare
utility cstdint
+utility cstring
utility initializer_list
utility limits
utility version
>From 9d3398d8ffeae10656b22482c97323951ce718cf Mon Sep 17 00:00:00 2001
From: AmrDeveloper <amr96 at programmer.net>
Date: Sun, 23 Feb 2025 15:54:06 +0100
Subject: [PATCH 09/11] Add experimental/utility cstring to cxx26.csv
---
libcxx/test/libcxx/transitive_includes/cxx26.csv | 1 +
1 file changed, 1 insertion(+)
diff --git a/libcxx/test/libcxx/transitive_includes/cxx26.csv b/libcxx/test/libcxx/transitive_includes/cxx26.csv
index fb80e1e2b059d..0132144b5375a 100644
--- a/libcxx/test/libcxx/transitive_includes/cxx26.csv
+++ b/libcxx/test/libcxx/transitive_includes/cxx26.csv
@@ -301,6 +301,7 @@ experimental/type_traits type_traits
experimental/type_traits version
experimental/utility compare
experimental/utility cstdint
+experimental/utility cstring
experimental/utility initializer_list
experimental/utility limits
experimental/utility utility
>From b0a68ea85aa5bdadcd1574a44151988366e7d30a Mon Sep 17 00:00:00 2001
From: AmrDeveloper <amr96 at programmer.net>
Date: Mon, 24 Feb 2025 18:47:54 +0100
Subject: [PATCH 10/11] Enable moving monostate from C++17
---
libcxx/include/utility | 5 +----
libcxx/test/libcxx/transitive_includes/cxx17.csv | 2 ++
libcxx/test/libcxx/transitive_includes/cxx20.csv | 2 ++
libcxx/test/libcxx/transitive_includes/cxx23.csv | 2 ++
.../utility/utility.monostate.relpos/relops.pass.cpp | 2 +-
.../utilities/utility/utility.monostate/monostate.pass.cpp | 2 +-
6 files changed, 9 insertions(+), 6 deletions(-)
diff --git a/libcxx/include/utility b/libcxx/include/utility
index bc4eaf6a0cd02..fa9205ab58d0e 100644
--- a/libcxx/include/utility
+++ b/libcxx/include/utility
@@ -267,6 +267,7 @@ template <class T>
# if _LIBCPP_STD_VER >= 17
# include <__utility/as_const.h>
# include <__utility/in_place.h>
+# include <__variant/monostate.h>
# endif
# if _LIBCPP_STD_VER >= 20
@@ -279,10 +280,6 @@ template <class T>
# include <__utility/unreachable.h>
# endif
-# if _LIBCPP_STD_VER >= 26
-# include <__variant/monostate.h>
-# endif
-
# include <version>
// standard-mandated includes
diff --git a/libcxx/test/libcxx/transitive_includes/cxx17.csv b/libcxx/test/libcxx/transitive_includes/cxx17.csv
index a3518f7f62ecb..e428ed5c39bf4 100644
--- a/libcxx/test/libcxx/transitive_includes/cxx17.csv
+++ b/libcxx/test/libcxx/transitive_includes/cxx17.csv
@@ -640,6 +640,7 @@ experimental/utility compare
experimental/utility cstddef
experimental/utility cstdint
experimental/utility cstdlib
+experimental/utility cstring
experimental/utility initializer_list
experimental/utility iosfwd
experimental/utility limits
@@ -2501,6 +2502,7 @@ utility compare
utility cstddef
utility cstdint
utility cstdlib
+utility cstring
utility initializer_list
utility iosfwd
utility limits
diff --git a/libcxx/test/libcxx/transitive_includes/cxx20.csv b/libcxx/test/libcxx/transitive_includes/cxx20.csv
index 6de9513927947..4a27e7007f3ac 100644
--- a/libcxx/test/libcxx/transitive_includes/cxx20.csv
+++ b/libcxx/test/libcxx/transitive_includes/cxx20.csv
@@ -636,6 +636,7 @@ experimental/utility compare
experimental/utility cstddef
experimental/utility cstdint
experimental/utility cstdlib
+experimental/utility cstring
experimental/utility initializer_list
experimental/utility iosfwd
experimental/utility limits
@@ -2529,6 +2530,7 @@ utility compare
utility cstddef
utility cstdint
utility cstdlib
+utility cstring
utility initializer_list
utility iosfwd
utility limits
diff --git a/libcxx/test/libcxx/transitive_includes/cxx23.csv b/libcxx/test/libcxx/transitive_includes/cxx23.csv
index 17972b8453743..19c8bf1ef1bf4 100644
--- a/libcxx/test/libcxx/transitive_includes/cxx23.csv
+++ b/libcxx/test/libcxx/transitive_includes/cxx23.csv
@@ -301,6 +301,7 @@ experimental/type_traits type_traits
experimental/type_traits version
experimental/utility compare
experimental/utility cstdint
+experimental/utility cstring
experimental/utility initializer_list
experimental/utility limits
experimental/utility utility
@@ -1116,6 +1117,7 @@ unordered_set tuple
unordered_set version
utility compare
utility cstdint
+utility cstring
utility initializer_list
utility limits
utility version
diff --git a/libcxx/test/std/utilities/utility/utility.monostate.relpos/relops.pass.cpp b/libcxx/test/std/utilities/utility/utility.monostate.relpos/relops.pass.cpp
index f29d89acdc739..e47008212c5f2 100644
--- a/libcxx/test/std/utilities/utility/utility.monostate.relpos/relops.pass.cpp
+++ b/libcxx/test/std/utilities/utility/utility.monostate.relpos/relops.pass.cpp
@@ -6,7 +6,7 @@
//
//===----------------------------------------------------------------------===//
-// UNSUPPORTED: c++03, c++11, c++14, c++17, c++20, c++23
+// REQUIRES: std-at-least-c++17
// <utility>
diff --git a/libcxx/test/std/utilities/utility/utility.monostate/monostate.pass.cpp b/libcxx/test/std/utilities/utility/utility.monostate/monostate.pass.cpp
index c78ce5a5c2f18..abb76118623fd 100644
--- a/libcxx/test/std/utilities/utility/utility.monostate/monostate.pass.cpp
+++ b/libcxx/test/std/utilities/utility/utility.monostate/monostate.pass.cpp
@@ -7,7 +7,7 @@
//
//===----------------------------------------------------------------------===//
-// UNSUPPORTED: c++03, c++11, c++14, c++17, c++20, c++23
+// REQUIRES: std-at-least-c++17
// <utility>
>From 6ad1f496f2378e6bfe10cd36563c2eb40fa1b735 Mon Sep 17 00:00:00 2001
From: AmrDeveloper <amr96 at programmer.net>
Date: Mon, 24 Feb 2025 20:02:31 +0100
Subject: [PATCH 11/11] Add tuple cstring to Cxx 17 and 20
---
libcxx/test/libcxx/transitive_includes/cxx17.csv | 1 +
libcxx/test/libcxx/transitive_includes/cxx20.csv | 1 +
2 files changed, 2 insertions(+)
diff --git a/libcxx/test/libcxx/transitive_includes/cxx17.csv b/libcxx/test/libcxx/transitive_includes/cxx17.csv
index e428ed5c39bf4..b84460467584e 100644
--- a/libcxx/test/libcxx/transitive_includes/cxx17.csv
+++ b/libcxx/test/libcxx/transitive_includes/cxx17.csv
@@ -2390,6 +2390,7 @@ tuple compare
tuple cstddef
tuple cstdint
tuple cstdlib
+tuple cstring
tuple exception
tuple initializer_list
tuple iosfwd
diff --git a/libcxx/test/libcxx/transitive_includes/cxx20.csv b/libcxx/test/libcxx/transitive_includes/cxx20.csv
index 4a27e7007f3ac..b7420aea07d42 100644
--- a/libcxx/test/libcxx/transitive_includes/cxx20.csv
+++ b/libcxx/test/libcxx/transitive_includes/cxx20.csv
@@ -2418,6 +2418,7 @@ tuple compare
tuple cstddef
tuple cstdint
tuple cstdlib
+tuple cstring
tuple exception
tuple initializer_list
tuple iosfwd
More information about the libcxx-commits
mailing list