------------------------------------------------- -----------------
``__cpp_lib_expected`` ``202202L``
------------------------------------------------- -----------------
+ ``__cpp_lib_format_ranges`` ``202207L``
+ ------------------------------------------------- -----------------
``__cpp_lib_formatters`` *unimplemented*
------------------------------------------------- -----------------
``__cpp_lib_forward_like`` ``202207L``
.. note::
+ .. [#note-LWG3750] LWG3750 Only ``__cpp_lib_format_ranges`` is fully implemented.
.. [#note-LWG3798] LWG3798: ``join_with_view``, ``zip_transform_view``, and ``adjacent_transform_view`` haven't been done yet since these types aren't implemented yet.
"`3745 <https://wg21.link/LWG3745>`__","``std::atomic_wait`` and its friends lack ``noexcept``", "November 2022","|Complete|","16.0",""
"`3746 <https://wg21.link/LWG3746>`__","``optional``'s spaceship with ``U`` with a type derived from optional causes infinite constraint meta-recursion", "November 2022","","","|spaceship|"
"`3747 <https://wg21.link/LWG3747>`__","``ranges::uninitialized_copy_n``, ``ranges::uninitialized_move_n``, and ``ranges::destroy_n`` should use ``std::move``", "November 2022","","","|ranges|"
-"`3750 <https://wg21.link/LWG3750>`__","Too many papers bump ``__cpp_lib_format``", "November 2022","","","|format|"
+"`3750 <https://wg21.link/LWG3750>`__","Too many papers bump ``__cpp_lib_format``", "November 2022","|Partial| [#note-LWG3750]_","","|format|"
"`3751 <https://wg21.link/LWG3751>`__","Missing feature macro for ``flat_set``", "November 2022","","","|flat_containers|"
"`3753 <https://wg21.link/LWG3753>`__","Clarify entity vs. freestanding entity", "November 2022","","",""
"`3754 <https://wg21.link/LWG3754>`__","Class template expected synopsis contains declarations that do not match the detailed description", "November 2022","|Nothing to do|","",""
"`P2549R1 <https://wg21.link/P2549R1>`__","LWG","``std::unexpected`` should have ``error()`` as member accessor","July 2022","|Complete|","16.0"
"`P2553R1 <https://wg21.link/P2553R1>`__","LWG","Make ``mdspan`` ``size_type`` controllable","July 2022","",""
"`P2554R0 <https://wg21.link/P2554R0>`__","LWG","C-Array Interoperability of MDSpan","July 2022","",""
-"`P2585R0 <https://wg21.link/P2585R0>`__","LWG","Improving default container formatting","July 2022","|Partial|",""
+"`P2585R0 <https://wg21.link/P2585R0>`__","LWG","Improving default container formatting","July 2022","|Complete|","17.0"
"`P2590R2 <https://wg21.link/P2590R2>`__","LWG","Explicit lifetime management","July 2022","",""
"`P2599R2 <https://wg21.link/P2599R2>`__","LWG","``mdspan::size_type`` should be ``index_type``","July 2022","",""
"`P2604R0 <https://wg21.link/P2604R0>`__","LWG","mdspan: rename pointer and contiguous","July 2022","",""
"`P2093R14 <https://wg21.link/P2093R14>`__","Formatted output","C++23"
"`P2286R8 <https://wg21.link/P2286R8>`__","Formatting Ranges","C++23","Mark de Wever","|Complete|",Clang 16
"`P2508R1 <https://wg21.link/P2508R1>`__","Exposing ``std::basic-format-string``","C++23","Mark de Wever","|Complete|", Clang 15
-"`P2585R0 <https://wg21.link/P2585R0>`__","Improving default container formatting","C++23","Mark de Wever","|In progress|"
+"`P2585R0 <https://wg21.link/P2585R0>`__","Improving default container formatting","C++23","Mark de Wever","|Complete|", Clang 17
"`P2539R4 <https://wg21.link/P2539R4>`__","Should the output of ``std::print`` to a terminal be synchronized with the underlying stream?","C++23"
"`P2713R1 <https://wg21.link/P2713R1>`__","Escaping improvements in ``std::format``","C++23","Mark de Wever",""
"`P2675R1 <https://wg21.link/P2675R1>`__","``format``'s width estimation is too approximate and not forward compatible","C++23","Mark de Wever",""
__cpp_lib_expected 202202L <expected>
__cpp_lib_filesystem 201703L <filesystem>
__cpp_lib_format 202106L <format>
+__cpp_lib_format_ranges 202207L <format>
__cpp_lib_formatters 202302L <stacktrace> <thread>
__cpp_lib_forward_like 202207L <utility>
__cpp_lib_gcd_lcm 201606L <numeric>
# define __cpp_lib_constexpr_memory 202202L
# define __cpp_lib_constexpr_typeinfo 202106L
# define __cpp_lib_expected 202202L
-# if !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_format) && !defined(_LIBCPP_HAS_NO_INCOMPLETE_FORMAT)
+# if !defined(_LIBCPP_HAS_NO_INCOMPLETE_FORMAT)
+# define __cpp_lib_format_ranges 202207L
+# endif
+# if !defined(_LIBCPP_HAS_NO_INCOMPLETE_FORMAT)
// # define __cpp_lib_formatters 202302L
# endif
# define __cpp_lib_forward_like 202207L
// Test the feature test macros defined by <format>
-/* Constant Value
- __cpp_lib_format 202106L [C++20]
+/* Constant Value
+ __cpp_lib_format 202106L [C++20]
+ __cpp_lib_format_ranges 202207L [C++2b]
*/
#include <format>
# error "__cpp_lib_format should not be defined before c++20"
# endif
+# ifdef __cpp_lib_format_ranges
+# error "__cpp_lib_format_ranges should not be defined before c++2b"
+# endif
+
#elif TEST_STD_VER == 14
# ifdef __cpp_lib_format
# error "__cpp_lib_format should not be defined before c++20"
# endif
+# ifdef __cpp_lib_format_ranges
+# error "__cpp_lib_format_ranges should not be defined before c++2b"
+# endif
+
#elif TEST_STD_VER == 17
# ifdef __cpp_lib_format
# error "__cpp_lib_format should not be defined before c++20"
# endif
+# ifdef __cpp_lib_format_ranges
+# error "__cpp_lib_format_ranges should not be defined before c++2b"
+# endif
+
#elif TEST_STD_VER == 20
# if !defined(_LIBCPP_VERSION)
# endif
# endif
+# ifdef __cpp_lib_format_ranges
+# error "__cpp_lib_format_ranges should not be defined before c++2b"
+# endif
+
#elif TEST_STD_VER > 20
# if !defined(_LIBCPP_VERSION)
# endif
# endif
+# if !defined(_LIBCPP_HAS_NO_INCOMPLETE_FORMAT)
+# ifndef __cpp_lib_format_ranges
+# error "__cpp_lib_format_ranges should be defined in c++2b"
+# endif
+# if __cpp_lib_format_ranges != 202207L
+# error "__cpp_lib_format_ranges should have the value 202207L in c++2b"
+# endif
+# else
+# ifdef __cpp_lib_format_ranges
+# error "__cpp_lib_format_ranges should not be defined when the requirement '!defined(_LIBCPP_HAS_NO_INCOMPLETE_FORMAT)' is not met!"
+# endif
+# endif
+
#endif // TEST_STD_VER > 20
__cpp_lib_expected 202202L [C++2b]
__cpp_lib_filesystem 201703L [C++17]
__cpp_lib_format 202106L [C++20]
+ __cpp_lib_format_ranges 202207L [C++2b]
__cpp_lib_formatters 202302L [C++2b]
__cpp_lib_forward_like 202207L [C++2b]
__cpp_lib_gcd_lcm 201606L [C++17]
# error "__cpp_lib_format should not be defined before c++20"
# endif
+# ifdef __cpp_lib_format_ranges
+# error "__cpp_lib_format_ranges should not be defined before c++2b"
+# endif
+
# ifdef __cpp_lib_formatters
# error "__cpp_lib_formatters should not be defined before c++2b"
# endif
# error "__cpp_lib_format should not be defined before c++20"
# endif
+# ifdef __cpp_lib_format_ranges
+# error "__cpp_lib_format_ranges should not be defined before c++2b"
+# endif
+
# ifdef __cpp_lib_formatters
# error "__cpp_lib_formatters should not be defined before c++2b"
# endif
# error "__cpp_lib_format should not be defined before c++20"
# endif
+# ifdef __cpp_lib_format_ranges
+# error "__cpp_lib_format_ranges should not be defined before c++2b"
+# endif
+
# ifdef __cpp_lib_formatters
# error "__cpp_lib_formatters should not be defined before c++2b"
# endif
# endif
# endif
+# ifdef __cpp_lib_format_ranges
+# error "__cpp_lib_format_ranges should not be defined before c++2b"
+# endif
+
# ifdef __cpp_lib_formatters
# error "__cpp_lib_formatters should not be defined before c++2b"
# endif
# endif
# endif
+# if !defined(_LIBCPP_HAS_NO_INCOMPLETE_FORMAT)
+# ifndef __cpp_lib_format_ranges
+# error "__cpp_lib_format_ranges should be defined in c++2b"
+# endif
+# if __cpp_lib_format_ranges != 202207L
+# error "__cpp_lib_format_ranges should have the value 202207L in c++2b"
+# endif
+# else
+# ifdef __cpp_lib_format_ranges
+# error "__cpp_lib_format_ranges should not be defined when the requirement '!defined(_LIBCPP_HAS_NO_INCOMPLETE_FORMAT)' is not met!"
+# endif
+# endif
+
# if !defined(_LIBCPP_VERSION)
# ifndef __cpp_lib_formatters
# error "__cpp_lib_formatters should be defined in c++2b"
"libcxx_guard": "!defined(_LIBCPP_HAS_NO_INCOMPLETE_FORMAT)",
"unimplemented": True,
}, {
+ "name": "__cpp_lib_format_ranges",
+ "values": { "c++2b": 202207 },
+ "headers": ["format"],
+ "test_suite_guard": "!defined(_LIBCPP_HAS_NO_INCOMPLETE_FORMAT)",
+ "libcxx_guard": "!defined(_LIBCPP_HAS_NO_INCOMPLETE_FORMAT)",
+ }, {
"name": "__cpp_lib_formatters",
"values": { "c++2b": 202302 },
"headers": ["stacktrace", "thread"],
- "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)",
+ "test_suite_guard": "!defined(_LIBCPP_HAS_NO_INCOMPLETE_FORMAT)",
+ "libcxx_guard": "!defined(_LIBCPP_HAS_NO_INCOMPLETE_FORMAT)",
"unimplemented": True,
}, {
"name": "__cpp_lib_forward_like",