[libcxx-commits] [libcxx] a4bef0c - [libc++] Mark P2845R8 `__cpp_lib_format_path` and P2587R3 `__cpp_lib_to_string` as C++26 (#93255)
via libcxx-commits
libcxx-commits at lists.llvm.org
Tue May 28 12:15:55 PDT 2024
Author: Stephan T. Lavavej
Date: 2024-05-28T12:15:50-07:00
New Revision: a4bef0ca826a8145ef3cb288846017c034a817c2
URL: https://github.com/llvm/llvm-project/commit/a4bef0ca826a8145ef3cb288846017c034a817c2
DIFF: https://github.com/llvm/llvm-project/commit/a4bef0ca826a8145ef3cb288846017c034a817c2.diff
LOG: [libc++] Mark P2845R8 `__cpp_lib_format_path` and P2587R3 `__cpp_lib_to_string` as C++26 (#93255)
[P2845R8](https://wg21.link/P2845R8) "Formatting of
`std::filesystem::path`" and [P2587R3](https://wg21.link/P2587R3)
"`to_string` or not `to_string`" are C++26 features, so they should be
marked accordingly in `generate_feature_test_macro_components.py`.
I verified that without my changes, running the script produced no
edits. Then with my changes, I ran the script to regenerate all files,
with no other manual edits.
Found while running libc++'s tests with MSVC's STL, which noticed this
because it's currently a C++23-only implementation.
Note that @H-G-Hristov has a draft implementation of P2587R3: #78100
Added:
Modified:
libcxx/docs/FeatureTestMacroTable.rst
libcxx/include/version
libcxx/test/std/language.support/support.limits/support.limits.general/filesystem.version.compile.pass.cpp
libcxx/test/std/language.support/support.limits/support.limits.general/string.version.compile.pass.cpp
libcxx/test/std/language.support/support.limits/support.limits.general/version.version.compile.pass.cpp
libcxx/utils/generate_feature_test_macro_components.py
Removed:
################################################################################
diff --git a/libcxx/docs/FeatureTestMacroTable.rst b/libcxx/docs/FeatureTestMacroTable.rst
index 17d2da907692e..0297068785e8b 100644
--- a/libcxx/docs/FeatureTestMacroTable.rst
+++ b/libcxx/docs/FeatureTestMacroTable.rst
@@ -326,8 +326,6 @@ Status
---------------------------------------------------------- -----------------
``__cpp_lib_expected`` ``202211L``
---------------------------------------------------------- -----------------
- ``__cpp_lib_format_path`` *unimplemented*
- ---------------------------------------------------------- -----------------
``__cpp_lib_format_ranges`` ``202207L``
---------------------------------------------------------- -----------------
``__cpp_lib_formatters`` *unimplemented*
@@ -386,8 +384,6 @@ Status
---------------------------------------------------------- -----------------
``__cpp_lib_string_resize_and_overwrite`` ``202110L``
---------------------------------------------------------- -----------------
- ``__cpp_lib_to_string`` *unimplemented*
- ---------------------------------------------------------- -----------------
``__cpp_lib_to_underlying`` ``202102L``
---------------------------------------------------------- -----------------
``__cpp_lib_tuple_like`` *unimplemented*
@@ -412,6 +408,8 @@ Status
---------------------------------------------------------- -----------------
``__cpp_lib_default_template_type_for_algorithm_values`` *unimplemented*
---------------------------------------------------------- -----------------
+ ``__cpp_lib_format_path`` *unimplemented*
+ ---------------------------------------------------------- -----------------
``__cpp_lib_freestanding_algorithm`` *unimplemented*
---------------------------------------------------------- -----------------
``__cpp_lib_freestanding_array`` *unimplemented*
@@ -466,6 +464,8 @@ Status
---------------------------------------------------------- -----------------
``__cpp_lib_to_chars`` *unimplemented*
---------------------------------------------------------- -----------------
+ ``__cpp_lib_to_string`` *unimplemented*
+ ---------------------------------------------------------- -----------------
``__cpp_lib_tuple_like`` *unimplemented*
========================================================== =================
diff --git a/libcxx/include/version b/libcxx/include/version
index 69556d731f1cf..140a9a0d87036 100644
--- a/libcxx/include/version
+++ b/libcxx/include/version
@@ -459,7 +459,6 @@ __cpp_lib_void_t 201411L <type_traits>
# define __cpp_lib_constexpr_typeinfo 202106L
# define __cpp_lib_containers_ranges 202202L
# define __cpp_lib_expected 202211L
-// # define __cpp_lib_format_path 202403L
# define __cpp_lib_format_ranges 202207L
// # define __cpp_lib_formatters 202302L
# define __cpp_lib_forward_like 202207L
@@ -490,7 +489,6 @@ __cpp_lib_void_t 201411L <type_traits>
# define __cpp_lib_stdatomic_h 202011L
# define __cpp_lib_string_contains 202011L
# define __cpp_lib_string_resize_and_overwrite 202110L
-// # define __cpp_lib_to_string 202306L
# define __cpp_lib_to_underlying 202102L
// # define __cpp_lib_tuple_like 202207L
# define __cpp_lib_unreachable 202202L
@@ -506,6 +504,7 @@ __cpp_lib_void_t 201411L <type_traits>
// # define __cpp_lib_copyable_function 202306L
// # define __cpp_lib_debugging 202311L
// # define __cpp_lib_default_template_type_for_algorithm_values 202403L
+// # define __cpp_lib_format_path 202403L
// # define __cpp_lib_freestanding_algorithm 202311L
// # define __cpp_lib_freestanding_array 202311L
// # define __cpp_lib_freestanding_cstring 202306L
@@ -537,6 +536,7 @@ __cpp_lib_void_t 201411L <type_traits>
// # define __cpp_lib_text_encoding 202306L
# undef __cpp_lib_to_chars
// # define __cpp_lib_to_chars 202306L
+// # define __cpp_lib_to_string 202306L
# undef __cpp_lib_tuple_like
// # define __cpp_lib_tuple_like 202311L
#endif
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/filesystem.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/filesystem.version.compile.pass.cpp
index 308cc2d43b058..4aba33482f69c 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/filesystem.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/filesystem.version.compile.pass.cpp
@@ -20,7 +20,7 @@
/* Constant Value
__cpp_lib_char8_t 201907L [C++20]
__cpp_lib_filesystem 201703L [C++17]
- __cpp_lib_format_path 202403L [C++23]
+ __cpp_lib_format_path 202403L [C++26]
*/
#include <filesystem>
@@ -37,7 +37,7 @@
# endif
# ifdef __cpp_lib_format_path
-# error "__cpp_lib_format_path should not be defined before c++23"
+# error "__cpp_lib_format_path should not be defined before c++26"
# endif
#elif TEST_STD_VER == 14
@@ -51,7 +51,7 @@
# endif
# ifdef __cpp_lib_format_path
-# error "__cpp_lib_format_path should not be defined before c++23"
+# error "__cpp_lib_format_path should not be defined before c++26"
# endif
#elif TEST_STD_VER == 17
@@ -74,7 +74,7 @@
# endif
# ifdef __cpp_lib_format_path
-# error "__cpp_lib_format_path should not be defined before c++23"
+# error "__cpp_lib_format_path should not be defined before c++26"
# endif
#elif TEST_STD_VER == 20
@@ -106,7 +106,7 @@
# endif
# ifdef __cpp_lib_format_path
-# error "__cpp_lib_format_path should not be defined before c++23"
+# error "__cpp_lib_format_path should not be defined before c++26"
# endif
#elif TEST_STD_VER == 23
@@ -137,17 +137,8 @@
# endif
# endif
-# if !defined(_LIBCPP_VERSION)
-# ifndef __cpp_lib_format_path
-# error "__cpp_lib_format_path should be defined in c++23"
-# endif
-# if __cpp_lib_format_path != 202403L
-# error "__cpp_lib_format_path should have the value 202403L in c++23"
-# endif
-# else // _LIBCPP_VERSION
-# ifdef __cpp_lib_format_path
-# error "__cpp_lib_format_path should not be defined because it is unimplemented in libc++!"
-# endif
+# ifdef __cpp_lib_format_path
+# error "__cpp_lib_format_path should not be defined before c++26"
# endif
#elif TEST_STD_VER > 23
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/string.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/string.version.compile.pass.cpp
index 16a9a0a28de63..af6386a40a458 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/string.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/string.version.compile.pass.cpp
@@ -29,7 +29,7 @@
__cpp_lib_string_udls 201304L [C++14]
__cpp_lib_string_view 201606L [C++17]
201803L [C++20]
- __cpp_lib_to_string 202306L [C++23]
+ __cpp_lib_to_string 202306L [C++26]
*/
#include <string>
@@ -86,7 +86,7 @@
# endif
# ifdef __cpp_lib_to_string
-# error "__cpp_lib_to_string should not be defined before c++23"
+# error "__cpp_lib_to_string should not be defined before c++26"
# endif
#elif TEST_STD_VER == 14
@@ -143,7 +143,7 @@
# endif
# ifdef __cpp_lib_to_string
-# error "__cpp_lib_to_string should not be defined before c++23"
+# error "__cpp_lib_to_string should not be defined before c++26"
# endif
#elif TEST_STD_VER == 17
@@ -209,7 +209,7 @@
# endif
# ifdef __cpp_lib_to_string
-# error "__cpp_lib_to_string should not be defined before c++23"
+# error "__cpp_lib_to_string should not be defined before c++26"
# endif
#elif TEST_STD_VER == 20
@@ -293,7 +293,7 @@
# endif
# ifdef __cpp_lib_to_string
-# error "__cpp_lib_to_string should not be defined before c++23"
+# error "__cpp_lib_to_string should not be defined before c++26"
# endif
#elif TEST_STD_VER == 23
@@ -385,17 +385,8 @@
# error "__cpp_lib_string_view should have the value 201803L in c++23"
# endif
-# if !defined(_LIBCPP_VERSION)
-# ifndef __cpp_lib_to_string
-# error "__cpp_lib_to_string should be defined in c++23"
-# endif
-# if __cpp_lib_to_string != 202306L
-# error "__cpp_lib_to_string should have the value 202306L in c++23"
-# endif
-# else // _LIBCPP_VERSION
-# ifdef __cpp_lib_to_string
-# error "__cpp_lib_to_string should not be defined because it is unimplemented in libc++!"
-# endif
+# ifdef __cpp_lib_to_string
+# error "__cpp_lib_to_string should not be defined before c++26"
# endif
#elif TEST_STD_VER > 23
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/version.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/version.version.compile.pass.cpp
index 7829e06f90760..c1e1f9f340af4 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/version.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/version.version.compile.pass.cpp
@@ -88,7 +88,7 @@
__cpp_lib_expected 202211L [C++23]
__cpp_lib_filesystem 201703L [C++17]
__cpp_lib_format 202106L [C++20]
- __cpp_lib_format_path 202403L [C++23]
+ __cpp_lib_format_path 202403L [C++26]
__cpp_lib_format_ranges 202207L [C++23]
__cpp_lib_format_uchar 202311L [C++20]
__cpp_lib_formatters 202302L [C++23]
@@ -216,7 +216,7 @@
__cpp_lib_to_array 201907L [C++20]
__cpp_lib_to_chars 201611L [C++17]
202306L [C++26]
- __cpp_lib_to_string 202306L [C++23]
+ __cpp_lib_to_string 202306L [C++26]
__cpp_lib_to_underlying 202102L [C++23]
__cpp_lib_transformation_trait_aliases 201304L [C++14]
__cpp_lib_transparent_operators 201210L [C++14]
@@ -513,7 +513,7 @@
# endif
# ifdef __cpp_lib_format_path
-# error "__cpp_lib_format_path should not be defined before c++23"
+# error "__cpp_lib_format_path should not be defined before c++26"
# endif
# ifdef __cpp_lib_format_ranges
@@ -1005,7 +1005,7 @@
# endif
# ifdef __cpp_lib_to_string
-# error "__cpp_lib_to_string should not be defined before c++23"
+# error "__cpp_lib_to_string should not be defined before c++26"
# endif
# ifdef __cpp_lib_to_underlying
@@ -1348,7 +1348,7 @@
# endif
# ifdef __cpp_lib_format_path
-# error "__cpp_lib_format_path should not be defined before c++23"
+# error "__cpp_lib_format_path should not be defined before c++26"
# endif
# ifdef __cpp_lib_format_ranges
@@ -1891,7 +1891,7 @@
# endif
# ifdef __cpp_lib_to_string
-# error "__cpp_lib_to_string should not be defined before c++23"
+# error "__cpp_lib_to_string should not be defined before c++26"
# endif
# ifdef __cpp_lib_to_underlying
@@ -2303,7 +2303,7 @@
# endif
# ifdef __cpp_lib_format_path
-# error "__cpp_lib_format_path should not be defined before c++23"
+# error "__cpp_lib_format_path should not be defined before c++26"
# endif
# ifdef __cpp_lib_format_ranges
@@ -2972,7 +2972,7 @@
# endif
# ifdef __cpp_lib_to_string
-# error "__cpp_lib_to_string should not be defined before c++23"
+# error "__cpp_lib_to_string should not be defined before c++26"
# endif
# ifdef __cpp_lib_to_underlying
@@ -3543,7 +3543,7 @@
# endif
# ifdef __cpp_lib_format_path
-# error "__cpp_lib_format_path should not be defined before c++23"
+# error "__cpp_lib_format_path should not be defined before c++26"
# endif
# ifdef __cpp_lib_format_ranges
@@ -4350,7 +4350,7 @@
# endif
# ifdef __cpp_lib_to_string
-# error "__cpp_lib_to_string should not be defined before c++23"
+# error "__cpp_lib_to_string should not be defined before c++26"
# endif
# ifdef __cpp_lib_to_underlying
@@ -4971,17 +4971,8 @@
# endif
# endif
-# if !defined(_LIBCPP_VERSION)
-# ifndef __cpp_lib_format_path
-# error "__cpp_lib_format_path should be defined in c++23"
-# endif
-# if __cpp_lib_format_path != 202403L
-# error "__cpp_lib_format_path should have the value 202403L in c++23"
-# endif
-# else // _LIBCPP_VERSION
-# ifdef __cpp_lib_format_path
-# error "__cpp_lib_format_path should not be defined because it is unimplemented in libc++!"
-# endif
+# ifdef __cpp_lib_format_path
+# error "__cpp_lib_format_path should not be defined before c++26"
# endif
# ifndef __cpp_lib_format_ranges
@@ -5943,17 +5934,8 @@
# endif
# endif
-# if !defined(_LIBCPP_VERSION)
-# ifndef __cpp_lib_to_string
-# error "__cpp_lib_to_string should be defined in c++23"
-# endif
-# if __cpp_lib_to_string != 202306L
-# error "__cpp_lib_to_string should have the value 202306L in c++23"
-# endif
-# else // _LIBCPP_VERSION
-# ifdef __cpp_lib_to_string
-# error "__cpp_lib_to_string should not be defined because it is unimplemented in libc++!"
-# endif
+# ifdef __cpp_lib_to_string
+# error "__cpp_lib_to_string should not be defined before c++26"
# endif
# ifndef __cpp_lib_to_underlying
diff --git a/libcxx/utils/generate_feature_test_macro_components.py b/libcxx/utils/generate_feature_test_macro_components.py
index b04cb4f511554..1e79f6c140758 100755
--- a/libcxx/utils/generate_feature_test_macro_components.py
+++ b/libcxx/utils/generate_feature_test_macro_components.py
@@ -515,7 +515,7 @@ def add_version_header(tc):
},
{
"name": "__cpp_lib_format_path",
- "values": {"c++23": 202403}, # P2845R8: Formatting of std::filesystem::path
+ "values": {"c++26": 202403}, # P2845R8: Formatting of std::filesystem::path
"headers": ["filesystem"],
"unimplemented": True,
},
@@ -1270,7 +1270,7 @@ def add_version_header(tc):
},
{
"name": "__cpp_lib_to_string",
- "values": {"c++23": 202306}, # P2587R3 to_string or not to_string
+ "values": {"c++26": 202306}, # P2587R3 to_string or not to_string
"headers": ["string"],
"unimplemented": True,
},
More information about the libcxx-commits
mailing list