-
Notifications
You must be signed in to change notification settings - Fork 13.6k
[libc++][format] define __cpp_lib_format. #98275
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
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 (llvm#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
@llvm/pr-subscribers-libcxx Author: Mark de Wever (mordante) ChangesIn order to define the format __cpp_lib_format to its initial value (201907) these papers need to be completed:
The next value (202106) requires:
The next value (202110) requires:
We've had user feedback that the missing of the __cpp_lib_format makes their lives harder (#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:
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",
|
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 (llvm#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. Fixes llvm#77773
Now that #98275 has been merged, the footnote for P0645 has become outdated. This updates the status information.
In order to define the format __cpp_lib_format to its initial value (201907) these papers need to be completed:
The next value (202106) requires:
The next value (202110) requires:
We've had user feedback that the missing of the __cpp_lib_format makes their lives harder (#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.
Fixes #77773