[libc++][format] Updates feature-test macros.

During the discussion on the SG-10 mailinglist regarding the format
feature-test macros voted in during the last plenary it turns out libc++
can't mark the format feature-test macro as implemented.

According to
  https://isocpp.org/std/standing-documents/sd-6-sg10-feature-test-recommendations#__cpp_lib_format
the not yet implemented paper
  P1361R2 Integration of chrono with text formatting
affects the feature test macro.

Note that P1361R2 doesn't mention the feature-test macro nor is there an
LWG-issue to address the issue. The reporter of the issue didn't recall
where this requirement exactly has been decided.

Reviewed By: ldionne, #libc

Differential Revision: https://reviews.llvm.org/D133271
This commit is contained in:
Mark de Wever 2022-09-04 13:56:36 +02:00 committed by Tobias Hieta
parent 92e7ef9930
commit c51a59d8a9
5 changed files with 22 additions and 20 deletions

View file

@ -234,7 +234,7 @@ Status
------------------------------------------------- -----------------
``__cpp_lib_execution`` *unimplemented*
------------------------------------------------- -----------------
``__cpp_lib_format`` ``202106L``
``__cpp_lib_format`` *unimplemented*
------------------------------------------------- -----------------
``__cpp_lib_generic_unordered_lookup`` ``201811L``
------------------------------------------------- -----------------

View file

@ -332,7 +332,7 @@ __cpp_lib_void_t 201411L <type_traits>
# undef __cpp_lib_execution
// # define __cpp_lib_execution 201902L
# if !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_format) && !defined(_LIBCPP_HAS_NO_INCOMPLETE_FORMAT)
# define __cpp_lib_format 202106L
// # define __cpp_lib_format 202106L
# endif
# define __cpp_lib_generic_unordered_lookup 201811L
# define __cpp_lib_int_pow2 202002L

View file

@ -44,31 +44,31 @@
#elif TEST_STD_VER == 20
# if !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_format) && !defined(_LIBCPP_HAS_NO_INCOMPLETE_FORMAT)
# 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
# else // _LIBCPP_VERSION
# ifdef __cpp_lib_format
# error "__cpp_lib_format should not be defined when !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_format) && !defined(_LIBCPP_HAS_NO_INCOMPLETE_FORMAT) is not defined!"
# error "__cpp_lib_format should not be defined because it is unimplemented in libc++!"
# endif
# endif
#elif TEST_STD_VER > 20
# if !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_format) && !defined(_LIBCPP_HAS_NO_INCOMPLETE_FORMAT)
# if !defined(_LIBCPP_VERSION)
# ifndef __cpp_lib_format
# error "__cpp_lib_format should be defined in c++2b"
# endif
# if __cpp_lib_format != 202106L
# error "__cpp_lib_format should have the value 202106L in c++2b"
# endif
# else
# else // _LIBCPP_VERSION
# ifdef __cpp_lib_format
# error "__cpp_lib_format should not be defined when !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_format) && !defined(_LIBCPP_HAS_NO_INCOMPLETE_FORMAT) is not defined!"
# error "__cpp_lib_format should not be defined because it is unimplemented in libc++!"
# endif
# endif

View file

@ -2817,16 +2817,16 @@
# endif
# endif
# if !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_format) && !defined(_LIBCPP_HAS_NO_INCOMPLETE_FORMAT)
# 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
# else // _LIBCPP_VERSION
# ifdef __cpp_lib_format
# error "__cpp_lib_format should not be defined when !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_format) && !defined(_LIBCPP_HAS_NO_INCOMPLETE_FORMAT) is not defined!"
# error "__cpp_lib_format should not be defined because it is unimplemented in libc++!"
# endif
# endif
@ -4054,16 +4054,16 @@
# endif
# endif
# if !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_format) && !defined(_LIBCPP_HAS_NO_INCOMPLETE_FORMAT)
# if !defined(_LIBCPP_VERSION)
# ifndef __cpp_lib_format
# error "__cpp_lib_format should be defined in c++2b"
# endif
# if __cpp_lib_format != 202106L
# error "__cpp_lib_format should have the value 202106L in c++2b"
# endif
# else
# else // _LIBCPP_VERSION
# ifdef __cpp_lib_format
# error "__cpp_lib_format should not be defined when !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_format) && !defined(_LIBCPP_HAS_NO_INCOMPLETE_FORMAT) is not defined!"
# error "__cpp_lib_format should not be defined because it is unimplemented in libc++!"
# endif
# endif

View file

@ -309,15 +309,17 @@ feature_test_macros = [ add_version_header(x) for x in [
"libcxx_guard": "!defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_filesystem)"
}, {
"name": "__cpp_lib_format",
# P2508, P2286, and P2419 were accepted in the same plenary and modify this
# feature-test macro. We expect to see an LWG issue soon. For now keep the
# value as is.
# TODO FMT Set P2508's feature-test macro.
#"values": { "c++20": 202106, "c++23": 202207" },
"values": { "c++20": 202106 },
"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++23": 202207, Not implemented P2419R2 Clarify handling of encodings in localized formatting of chrono types
},
"headers": ["format"],
"test_suite_guard": "!defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_format) && !defined(_LIBCPP_HAS_NO_INCOMPLETE_FORMAT)",
"libcxx_guard": "!defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_format) && !defined(_LIBCPP_HAS_NO_INCOMPLETE_FORMAT)",
"unimplemented": True,
}, {
"name": "__cpp_lib_gcd_lcm",
"values": { "c++17": 201606 },