Skip to content

Commit

Permalink
[libc++][format] Mark range formaters as complete.
Browse files Browse the repository at this point in the history
The __cpp_lib_format_ranges feature-test macro only depends on P2286R8
and P2585R0. Note since LWG3750 only affects these two C++23 papers
there is nothing to do for older language versions.

(The __cpp_lib_format feature-test macro depends on the incomplete
formatting for chrono. So this part can't be marked as complete yet.)

This completes
- P2286R8 Formatting ranges
- P2585R0 Improving default container formatting

This partly implements
- LWG3750 Too many papers bump __cpp_lib_format

Reviewed By: #libc, ldionne

Differential Revision: https://reviews.llvm.org/D147880
  • Loading branch information
mordante committed Apr 11, 2023
1 parent 2e9058c commit b237354
Show file tree
Hide file tree
Showing 9 changed files with 81 additions and 8 deletions.
2 changes: 2 additions & 0 deletions libcxx/docs/FeatureTestMacroTable.rst
Original file line number Diff line number Diff line change
Expand Up @@ -322,6 +322,8 @@ Status
------------------------------------------------- -----------------
``__cpp_lib_expected`` ``202202L``
------------------------------------------------- -----------------
``__cpp_lib_format_ranges`` ``202207L``
------------------------------------------------- -----------------
``__cpp_lib_formatters`` *unimplemented*
------------------------------------------------- -----------------
``__cpp_lib_forward_like`` ``202207L``
Expand Down
1 change: 1 addition & 0 deletions libcxx/docs/Status/Cxx2b.rst
Original file line number Diff line number Diff line change
Expand Up @@ -60,4 +60,5 @@ Library Working Group Issues Status

.. 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.
2 changes: 1 addition & 1 deletion libcxx/docs/Status/Cxx2bIssues.csv
Original file line number Diff line number Diff line change
Expand Up @@ -208,7 +208,7 @@
"`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|","",""
Expand Down
2 changes: 1 addition & 1 deletion libcxx/docs/Status/Cxx2bPapers.csv
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@
"`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","",""
Expand Down
2 changes: 1 addition & 1 deletion libcxx/docs/Status/FormatIssues.csv
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ Number,Name,Standard,Assignee,Status,First released version
"`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",""
Expand Down
6 changes: 5 additions & 1 deletion libcxx/include/version
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,7 @@ __cpp_lib_execution 201902L <execution>
__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>
Expand Down Expand Up @@ -398,7 +399,10 @@ __cpp_lib_void_t 201411L <type_traits>
# 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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,9 @@

// 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>
Expand All @@ -30,18 +31,30 @@
# 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)
Expand All @@ -57,6 +70,10 @@
# 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)
Expand All @@ -72,5 +89,18 @@
# 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

Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,7 @@
__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]
Expand Down Expand Up @@ -432,6 +433,10 @@
# 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
Expand Down Expand Up @@ -1091,6 +1096,10 @@
# 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
Expand Down Expand Up @@ -1864,6 +1873,10 @@
# 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
Expand Down Expand Up @@ -2916,6 +2929,10 @@
# 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
Expand Down Expand Up @@ -4157,6 +4174,19 @@
# 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"
Expand Down
10 changes: 8 additions & 2 deletions libcxx/utils/generate_feature_test_macro_components.py
Original file line number Diff line number Diff line change
Expand Up @@ -327,12 +327,18 @@ def add_version_header(tc):
"test_suite_guard": "!defined(_LIBCPP_HAS_NO_INCOMPLETE_FORMAT)",
"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",
Expand Down

0 comments on commit b237354

Please sign in to comment.