[libcxx-commits] [libcxx] [libc++][format] define __cpp_lib_format. (PR #98275)
via libcxx-commits
libcxx-commits at lists.llvm.org
Tue Jul 9 23:27:21 PDT 2024
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-libcxx
Author: Mark de Wever (mordante)
<details>
<summary>Changes</summary>
In order to define the format __cpp_lib_format to its initial value (201907) these papers need to be completed:
- P0645R10 Text Formatting
- P1652R1 Printf corner cases in std::format
- 1361R2 Integration of chrono with text formatting The first two have been implemented for a while the latter is almost done.
The next value (202106) requires:
- P2216R3 std::format improvements which has been implemented
The next value (202110) requires:
- P2418R2 Add support for std::generator-like types to std::format
- P2372R3 Fixing locale handling in chrono formatters The first one has been implemented for a while the latter is almost done. The latter paper is a DR against 1361R2 and both are implemented at the same time.
We've had user feedback that the missing of the __cpp_lib_format makes their lives harder (https://github.com/llvm/llvm-project/issues/77773). The missing papers 1361R2 and P2372R3 are very close to completion and might completed before LLVM-19, but it will be a close call. This has been discussed in the monthly libc++ meeting and we decided to set the __cpp_lib_format so it will be set in LLVM-19.
Based on the discussion and the implementation status the __cpp_lib_format is set to 202110
---
Full diff: https://github.com/llvm/llvm-project/pull/98275.diff
5 Files Affected:
- (modified) libcxx/docs/FeatureTestMacroTable.rst (+1-1)
- (modified) libcxx/include/version (+2-2)
- (modified) libcxx/test/std/language.support/support.limits/support.limits.general/format.version.compile.pass.cpp (+16-34)
- (modified) libcxx/test/std/language.support/support.limits/support.limits.general/version.version.compile.pass.cpp (+16-34)
- (modified) libcxx/utils/generate_feature_test_macro_components.py (+1-5)
``````````diff
diff --git a/libcxx/docs/FeatureTestMacroTable.rst b/libcxx/docs/FeatureTestMacroTable.rst
index 2a34aa4fe55cc..7cd20acc6ff4a 100644
--- a/libcxx/docs/FeatureTestMacroTable.rst
+++ b/libcxx/docs/FeatureTestMacroTable.rst
@@ -234,7 +234,7 @@ Status
---------------------------------------------------------- -----------------
``__cpp_lib_execution`` *unimplemented*
---------------------------------------------------------- -----------------
- ``__cpp_lib_format`` *unimplemented*
+ ``__cpp_lib_format`` ``202110L``
---------------------------------------------------------- -----------------
``__cpp_lib_format_uchar`` ``202311L``
---------------------------------------------------------- -----------------
diff --git a/libcxx/include/version b/libcxx/include/version
index 21231a4d4b0fc..1f66bce40df8a 100644
--- a/libcxx/include/version
+++ b/libcxx/include/version
@@ -101,7 +101,7 @@ __cpp_lib_execution 201902L <execution>
201603L // C++17
__cpp_lib_expected 202211L <expected>
__cpp_lib_filesystem 201703L <filesystem>
-__cpp_lib_format 202106L <format>
+__cpp_lib_format 202110L <format>
__cpp_lib_format_path 202403L <filesystem>
__cpp_lib_format_ranges 202207L <format>
__cpp_lib_format_uchar 202311L <format>
@@ -403,7 +403,7 @@ __cpp_lib_void_t 201411L <type_traits>
# define __cpp_lib_erase_if 202002L
# undef __cpp_lib_execution
// # define __cpp_lib_execution 201902L
-// # define __cpp_lib_format 202106L
+# define __cpp_lib_format 202110L
# define __cpp_lib_format_uchar 202311L
# define __cpp_lib_generic_unordered_lookup 201811L
# define __cpp_lib_int_pow2 202002L
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/format.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/format.version.compile.pass.cpp
index aa7b2f4286827..7bb2fa399b094 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/format.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/format.version.compile.pass.cpp
@@ -16,7 +16,7 @@
// Test the feature test macros defined by <format>
/* Constant Value
- __cpp_lib_format 202106L [C++20]
+ __cpp_lib_format 202110L [C++20]
__cpp_lib_format_ranges 202207L [C++23]
__cpp_lib_format_uchar 202311L [C++20]
*/
@@ -68,17 +68,11 @@
#elif TEST_STD_VER == 20
-# if !defined(_LIBCPP_VERSION)
-# ifndef __cpp_lib_format
-# error "__cpp_lib_format should be defined in c++20"
-# endif
-# if __cpp_lib_format != 202106L
-# error "__cpp_lib_format should have the value 202106L in c++20"
-# endif
-# else // _LIBCPP_VERSION
-# ifdef __cpp_lib_format
-# error "__cpp_lib_format should not be defined because it is unimplemented in libc++!"
-# endif
+# ifndef __cpp_lib_format
+# error "__cpp_lib_format should be defined in c++20"
+# endif
+# if __cpp_lib_format != 202110L
+# error "__cpp_lib_format should have the value 202110L in c++20"
# endif
# ifdef __cpp_lib_format_ranges
@@ -94,17 +88,11 @@
#elif TEST_STD_VER == 23
-# if !defined(_LIBCPP_VERSION)
-# ifndef __cpp_lib_format
-# error "__cpp_lib_format should be defined in c++23"
-# endif
-# if __cpp_lib_format != 202106L
-# error "__cpp_lib_format should have the value 202106L in c++23"
-# endif
-# else // _LIBCPP_VERSION
-# ifdef __cpp_lib_format
-# error "__cpp_lib_format should not be defined because it is unimplemented in libc++!"
-# endif
+# ifndef __cpp_lib_format
+# error "__cpp_lib_format should be defined in c++23"
+# endif
+# if __cpp_lib_format != 202110L
+# error "__cpp_lib_format should have the value 202110L in c++23"
# endif
# ifndef __cpp_lib_format_ranges
@@ -123,17 +111,11 @@
#elif TEST_STD_VER > 23
-# if !defined(_LIBCPP_VERSION)
-# ifndef __cpp_lib_format
-# error "__cpp_lib_format should be defined in c++26"
-# endif
-# if __cpp_lib_format != 202106L
-# error "__cpp_lib_format should have the value 202106L in c++26"
-# endif
-# else // _LIBCPP_VERSION
-# ifdef __cpp_lib_format
-# error "__cpp_lib_format should not be defined because it is unimplemented in libc++!"
-# endif
+# ifndef __cpp_lib_format
+# error "__cpp_lib_format should be defined in c++26"
+# endif
+# if __cpp_lib_format != 202110L
+# error "__cpp_lib_format should have the value 202110L in c++26"
# endif
# ifndef __cpp_lib_format_ranges
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 c0ffd78ebe3b1..aa5ff80afb56a 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 @@
201902L [C++20]
__cpp_lib_expected 202211L [C++23]
__cpp_lib_filesystem 201703L [C++17]
- __cpp_lib_format 202106L [C++20]
+ __cpp_lib_format 202110L [C++20]
__cpp_lib_format_path 202403L [C++26]
__cpp_lib_format_ranges 202207L [C++23]
__cpp_lib_format_uchar 202311L [C++20]
@@ -3618,17 +3618,11 @@
# endif
# endif
-# if !defined(_LIBCPP_VERSION)
-# ifndef __cpp_lib_format
-# error "__cpp_lib_format should be defined in c++20"
-# endif
-# if __cpp_lib_format != 202106L
-# error "__cpp_lib_format should have the value 202106L in c++20"
-# endif
-# else // _LIBCPP_VERSION
-# ifdef __cpp_lib_format
-# error "__cpp_lib_format should not be defined because it is unimplemented in libc++!"
-# endif
+# ifndef __cpp_lib_format
+# error "__cpp_lib_format should be defined in c++20"
+# endif
+# if __cpp_lib_format != 202110L
+# error "__cpp_lib_format should have the value 202110L in c++20"
# endif
# ifdef __cpp_lib_format_path
@@ -5063,17 +5057,11 @@
# endif
# endif
-# if !defined(_LIBCPP_VERSION)
-# ifndef __cpp_lib_format
-# error "__cpp_lib_format should be defined in c++23"
-# endif
-# if __cpp_lib_format != 202106L
-# error "__cpp_lib_format should have the value 202106L in c++23"
-# endif
-# else // _LIBCPP_VERSION
-# ifdef __cpp_lib_format
-# error "__cpp_lib_format should not be defined because it is unimplemented in libc++!"
-# endif
+# ifndef __cpp_lib_format
+# error "__cpp_lib_format should be defined in c++23"
+# endif
+# if __cpp_lib_format != 202110L
+# error "__cpp_lib_format should have the value 202110L in c++23"
# endif
# ifdef __cpp_lib_format_path
@@ -6748,17 +6736,11 @@
# endif
# endif
-# if !defined(_LIBCPP_VERSION)
-# ifndef __cpp_lib_format
-# error "__cpp_lib_format should be defined in c++26"
-# endif
-# if __cpp_lib_format != 202106L
-# error "__cpp_lib_format should have the value 202106L in c++26"
-# endif
-# else // _LIBCPP_VERSION
-# ifdef __cpp_lib_format
-# error "__cpp_lib_format should not be defined because it is unimplemented in libc++!"
-# endif
+# ifndef __cpp_lib_format
+# error "__cpp_lib_format should be defined in c++26"
+# endif
+# if __cpp_lib_format != 202110L
+# error "__cpp_lib_format should have the value 202110L in c++26"
# endif
# if !defined(_LIBCPP_VERSION)
diff --git a/libcxx/utils/generate_feature_test_macro_components.py b/libcxx/utils/generate_feature_test_macro_components.py
index e92b6613b11a8..7bc11aa401829 100755
--- a/libcxx/utils/generate_feature_test_macro_components.py
+++ b/libcxx/utils/generate_feature_test_macro_components.py
@@ -507,10 +507,7 @@ def add_version_header(tc):
{
"name": "__cpp_lib_format",
"values": {
- # "c++20": 201907 Not implemented P1361R2 Integration of chrono with text formatting
- # "c++20": 202106 Fully implemented
- # "c++20": 202110 Not implemented P2372R3 Fixing locale handling in chrono formatters
- "c++20": 202106,
+ "c++20": 202110,
# "c++23": 202207, Not implemented P2419R2 Clarify handling of encodings in localized formatting of chrono types
# "c++26": 202306, P2637R3 Member Visit (implemented)
# "c++26": 202311, P2918R2 Runtime format strings II (implemented)
@@ -520,7 +517,6 @@ def add_version_header(tc):
# 202305 P2757R3 Type-checking format args
# 202306 P2637R3 Member Visit
"headers": ["format"],
- "unimplemented": True,
},
{
"name": "__cpp_lib_format_path",
``````````
</details>
https://github.com/llvm/llvm-project/pull/98275
More information about the libcxx-commits
mailing list