Skip to content

Commit c2cac69

Browse files
authoredAug 28, 2024
[libc++] Replace 'tags' in CSV status pages by inline notes (#105581)
This patch replaces 'tags' in the CSV status pages by inline notes that optionally describe more details about the paper/LWG issue. Tags were not really useful anymore because we have a vastly superior tagging system via Github issues, and keeping the tags up-to-date between CSV files and Github is going to be really challenging. This patch also adds support for encoding custom notes in the CSV files via Github issues. To encode a note in the CSV file, the body (initial description) of a Github issue can be edited to contain the following markers: BEGIN-RST-NOTES text that will be added as a note in the RST END-RST-NOTES Amongst other things, this solves the problem of conveying that a paper has been implemented as a DR, and it gives a unified way to add notes to the status pages from Github.
1 parent 4f15039 commit c2cac69

14 files changed

+471
-553
lines changed
 

‎libcxx/docs/Helpers/Styles.rst

-23
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,6 @@
1717
font-style: italic;
1818
}
1919
.complete { background-color: #99FF99; }
20-
.chrono { background-color: #D8BFD8; }
21-
.format { background-color: #FFE4B5; }
22-
.ranges { background-color: #7FFFD4; }
23-
.spaceship { background-color: #B0E0E6; }
24-
.fc { background-color: #8EAF63; white-space:nowrap; }
25-
.concurrency { background-color: #909090; white-space:nowrap; }
26-
.dr { background-color: #FFFF99; }
2720
</style>
2821

2922
.. role:: notstarted
@@ -40,21 +33,5 @@
4033
.. |Partial| replace:: :partial:`Partial`
4134
.. |Complete| replace:: :complete:`Complete`
4235

43-
.. role:: chrono
44-
.. role:: format
45-
.. role:: ranges
46-
.. role:: spaceship
47-
.. role:: fc
48-
.. role:: concurrency
49-
.. role:: dr
50-
51-
.. |chrono| replace:: :chrono:`chrono`
52-
.. |format| replace:: :format:`format`
53-
.. |ranges| replace:: :ranges:`ranges`
54-
.. |spaceship| replace:: :spaceship:`spaceship`
55-
.. |flat_containers| replace:: :fc:`flat containers`
56-
.. |concurrency TS| replace:: :concurrency:`concurrency TS`
57-
.. |DR| replace:: :dr:`Defect Report`
58-
5936
.. |sect| unicode:: U+00A7
6037
.. |hellip| unicode:: U+2026

‎libcxx/docs/Status/Cxx17.rst

-19
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,6 @@ The groups that have contributed papers:
2626

2727
.. note:: "Nothing to do" means that no library changes were needed to implement this change.
2828

29-
.. _paper-status-cxx17:
30-
3129
Paper Status
3230
====================================
3331

@@ -36,23 +34,6 @@ Paper Status
3634
:header-rows: 1
3735
:widths: auto
3836

39-
.. note::
40-
41-
.. [#note-N4259] N4259: ``std::uncaught_exception`` is deprecated since LLVM 20.0.
42-
.. [#note-P0067R5] P0067R5: ``std::(to|from)_chars`` for integrals has been available since version 7.0. ``std::to_chars`` for ``float`` and ``double`` since version 14.0 ``std::to_chars`` for ``long double`` uses the implementation for ``double``.
43-
.. [#note-P0226] P0226: Progress is tracked `here <https://github.com/llvm/llvm-project/issues/99939>`_.
44-
.. [#note-P0607] P0607: The parts of P0607 that are not done are the ``<regex>`` bits.
45-
.. [#note-P0154] P0154: The required macros are only implemented as of clang 19.
46-
.. [#note-P0452] P0452: The changes to ``std::transform_inclusive_scan`` and ``std::transform_exclusive_scan`` have not yet been implemented.
47-
.. [#note-P0156] P0156: That paper was pulled out of the draft at the 2017-01 meeting in Kona.
48-
.. [#note-P0181] P0181: That paper was pulled out of the draft at the 2017-01 meeting in Kona.
49-
.. [#note-P0067R3] P0067R3: That paper was resolved by `P0067R5 <https://wg21.link/P0067R5>`__.
50-
.. [#note-LWG2587] LWG2587: That LWG issue was resolved by `LWG2567 <https://wg21.link/LWG2567>`__.
51-
.. [#note-LWG2588] LWG2588: That LWG issue was resolved by `LWG2568 <https://wg21.link/LWG2568>`__.
52-
.. [#note-LWG2955] LWG2955: That LWG issue was resolved by `P0682R1 <https://wg21.link/P0682R1>`__.
53-
54-
.. _issues-status-cxx17:
55-
5637
Library Working Group Issues Status
5738
====================================
5839

‎libcxx/docs/Status/Cxx17Issues.csv

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
"Issue #","Issue Name","Meeting","Status","First released version","Labels"
1+
"Issue #","Issue Name","Meeting","Status","First released version","Notes"
22
"`LWG2016 <https://wg21.link/LWG2016>`__","Allocators must be no-throw swappable","2014-11 (Urbana)","|Complete|","",""
33
"`LWG2118 <https://wg21.link/LWG2118>`__","``unique_ptr``\ for array does not support cv qualification conversion of actual argument","2014-11 (Urbana)","|Complete|","",""
44
"`LWG2170 <https://wg21.link/LWG2170>`__","Aggregates cannot be ``DefaultConstructible``\ ","2014-11 (Urbana)","|Complete|","",""
@@ -211,8 +211,8 @@
211211
"`LWG2570 <https://wg21.link/LWG2570>`__","[fund.ts.v2] conjunction and disjunction requirements are too strict","2016-11 (Issaquah)","","",""
212212
"`LWG2578 <https://wg21.link/LWG2578>`__","Iterator requirements should reference iterator traits","2016-11 (Issaquah)","|Complete|","",""
213213
"`LWG2584 <https://wg21.link/LWG2584>`__","<regex> ECMAScript IdentityEscape is ambiguous","2016-11 (Issaquah)","","",""
214-
"`LWG2587 <https://wg21.link/LWG2587>`__","""Convertible to bool"" requirement in conjunction and disjunction","2016-11 (Issaquah)","|Nothing To Do| [#note-LWG2587]_","",""
215-
"`LWG2588 <https://wg21.link/LWG2588>`__","[fund.ts.v2] ""Convertible to bool"" requirement in conjunction and disjunction","2016-11 (Issaquah)","|Nothing To Do| [#note-LWG2588]_","",""
214+
"`LWG2587 <https://wg21.link/LWG2587>`__","""Convertible to bool"" requirement in conjunction and disjunction","2016-11 (Issaquah)","|Nothing To Do|","","Resolved by `LWG2567 <https://wg21.link/LWG2567>`__"
215+
"`LWG2588 <https://wg21.link/LWG2588>`__","[fund.ts.v2] ""Convertible to bool"" requirement in conjunction and disjunction","2016-11 (Issaquah)","|Nothing To Do|","","Resolved by `LWG2568 <https://wg21.link/LWG2568>`__"
216216
"`LWG2589 <https://wg21.link/LWG2589>`__","match_results can't satisfy the requirements of a container","2016-11 (Issaquah)","|Complete|","",""
217217
"`LWG2591 <https://wg21.link/LWG2591>`__","std::function's member template target() should not lead to undefined behaviour","2016-11 (Issaquah)","|Complete|","",""
218218
"`LWG2598 <https://wg21.link/LWG2598>`__","addressof works on temporaries","2016-11 (Issaquah)","|Complete|","",""
@@ -310,5 +310,5 @@
310310
"`LWG2934 <https://wg21.link/LWG2934>`__","optional<const T> doesn't compare with T","2017-02 (Kona)","|Complete|","",""
311311
"","","","","",""
312312
"`LWG2901 <https://wg21.link/LWG2901>`__","Variants cannot properly support allocators","2017-07 (Toronto)","|Complete|","",""
313-
"`LWG2955 <https://wg21.link/LWG2955>`__","``to_chars / from_chars``\ depend on ``std::string``\ ","2017-07 (Toronto)","|Nothing To Do| [#note-LWG2955]_","",""
313+
"`LWG2955 <https://wg21.link/LWG2955>`__","``to_chars / from_chars``\ depend on ``std::string``\ ","2017-07 (Toronto)","|Nothing To Do|","","Resolved by `P0682R1 <https://wg21.link/P0682R1>`__"
314314
"`LWG2956 <https://wg21.link/LWG2956>`__","``filesystem::canonical()``\ still defined in terms of ``absolute(p, base)``\ ","2017-07 (Toronto)","|Complete|","",""

‎libcxx/docs/Status/Cxx17Papers.csv

+10-10
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
"Paper #","Paper Name","Meeting","Status","First released version","Labels"
1+
"Paper #","Paper Name","Meeting","Status","First released version","Notes"
22
"`N3911 <https://wg21.link/N3911>`__","TransformationTrait Alias ``void_t``\ .","2014-11 (Urbana)","|Complete|","3.6",""
33
"`N4089 <https://wg21.link/N4089>`__","Safe conversions in ``unique_ptr<T[]>``\ .","2014-11 (Urbana)","|In Progress|","3.9",""
44
"`N4169 <https://wg21.link/N4169>`__","A proposal to add invoke function template","2014-11 (Urbana)","|Complete|","3.7",""
55
"`N4190 <https://wg21.link/N4190>`__","Removing auto_ptr, random_shuffle(), And Old <functional> Stuff.","2014-11 (Urbana)","|Complete|","15.0",""
66
"`N4258 <https://wg21.link/N4258>`__","Cleaning-up noexcept in the Library.","2014-11 (Urbana)","|In Progress|","3.7",""
7-
"`N4259 <https://wg21.link/N4259>`__","Wording for std::uncaught_exceptions","2014-11 (Urbana)","|Complete| [#note-N4259]_","3.7",""
7+
"`N4259 <https://wg21.link/N4259>`__","Wording for std::uncaught_exceptions","2014-11 (Urbana)","|Complete|","3.7","``std::uncaught_exception`` is deprecated since LLVM 20.0"
88
"`N4277 <https://wg21.link/N4277>`__","TriviallyCopyable ``reference_wrapper``\ .","2014-11 (Urbana)","|Complete|","3.2",""
99
"`N4279 <https://wg21.link/N4279>`__","Improved insertion interface for unique-key maps.","2014-11 (Urbana)","|Complete|","3.7",""
1010
"`N4280 <https://wg21.link/N4280>`__","Non-member size() and more","2014-11 (Urbana)","|Complete|","3.6",""
@@ -21,12 +21,12 @@
2121
"`P0006R0 <https://wg21.link/P0006R0>`__","Adopt Type Traits Variable Templates for C++17.","2015-10 (Kona)","|Complete|","3.8",""
2222
"`P0092R1 <https://wg21.link/P0092R1>`__","Polishing <chrono>","2015-10 (Kona)","|Complete|","3.8",""
2323
"`P0007R1 <https://wg21.link/P0007R1>`__","Constant View: A proposal for a ``std::as_const``\ helper function template.","2015-10 (Kona)","|Complete|","3.8",""
24-
"`P0156R0 <https://wg21.link/P0156R0>`__","Variadic lock_guard(rev 3).","2015-10 (Kona)","|Nothing To Do| [#note-P0156]_","",""
24+
"`P0156R0 <https://wg21.link/P0156R0>`__","Variadic lock_guard(rev 3).","2015-10 (Kona)","|Nothing To Do|","","Pulled at the 2017-01 meeting in Kona"
2525
"`P0074R0 <https://wg21.link/P0074R0>`__","Making ``std::owner_less``\ more flexible","2015-10 (Kona)","|Complete|","3.8",""
2626
"`P0013R1 <https://wg21.link/P0013R1>`__","Logical type traits rev 2","2015-10 (Kona)","|Complete|","3.8",""
2727
"","","","","",""
2828
"`P0024R2 <https://wg21.link/P0024R2>`__","The Parallelism TS Should be Standardized","2016-02 (Jacksonville)","|Partial|","",""
29-
"`P0226R1 <https://wg21.link/P0226R1>`__","Mathematical Special Functions for C++17","2016-02 (Jacksonville)","|In Progress| [#note-P0226]_","",""
29+
"`P0226R1 <https://wg21.link/P0226R1>`__","Mathematical Special Functions for C++17","2016-02 (Jacksonville)","|In Progress|","","Progress is tracked `here <https://github.com/llvm/llvm-project/issues/99939>`__"
3030
"`P0220R1 <https://wg21.link/P0220R1>`__","Adopt Library Fundamentals V1 TS Components for C++17","2016-02 (Jacksonville)","|Complete|","16.0",""
3131
"`P0218R1 <https://wg21.link/P0218R1>`__","Adopt the File System TS for C++17","2016-02 (Jacksonville)","|Complete|","7.0",""
3232
"`P0033R1 <https://wg21.link/P0033R1>`__","Re-enabling shared_from_this","2016-02 (Jacksonville)","|Complete|","3.9",""
@@ -35,7 +35,7 @@
3535
"`P0185R1 <https://wg21.link/P0185R1>`__","Adding [nothrow-]swappable traits","2016-02 (Jacksonville)","|Complete|","3.9",""
3636
"`P0253R1 <https://wg21.link/P0253R1>`__","Fixing a design mistake in the searchers interface","2016-02 (Jacksonville)","|Complete|","3.9",""
3737
"`P0025R0 <https://wg21.link/P0025R0>`__","An algorithm to ""clamp"" a value between a pair of boundary values","2016-02 (Jacksonville)","|Complete|","3.9",""
38-
"`P0154R1 <https://wg21.link/P0154R1>`__","constexpr std::hardware_{constructive,destructive}_interference_size","2016-02 (Jacksonville)","|Complete| [#note-P0154]_","19.0",""
38+
"`P0154R1 <https://wg21.link/P0154R1>`__","constexpr std::hardware_{constructive,destructive}_interference_size","2016-02 (Jacksonville)","|Complete|","19.0","The required macros are only implemented as of LLVM 19."
3939
"`P0030R1 <https://wg21.link/P0030R1>`__","Proposal to Introduce a 3-Argument Overload to std::hypot","2016-02 (Jacksonville)","|Complete|","3.9",""
4040
"`P0031R0 <https://wg21.link/P0031R0>`__","A Proposal to Add Constexpr Modifiers to reverse_iterator, move_iterator, array and Range Access","2016-02 (Jacksonville)","|Complete|","4.0",""
4141
"`P0272R1 <https://wg21.link/P0272R1>`__","Give ``std::string``\ a non-const ``.data()``\ member function","2016-02 (Jacksonville)","|Complete|","3.9",""
@@ -44,7 +44,7 @@
4444
"`P0032R3 <https://wg21.link/P0032R3>`__","Homogeneous interface for variant, any and optional","2016-06 (Oulu)","|Complete|","4.0",""
4545
"`P0040R3 <https://wg21.link/P0040R3>`__","Extending memory management tools","2016-06 (Oulu)","|Complete|","4.0",""
4646
"`P0063R3 <https://wg21.link/P0063R3>`__","C++17 should refer to C11 instead of C99","2016-06 (Oulu)","|Complete|","7.0",""
47-
"`P0067R3 <https://wg21.link/P0067R3>`__","Elementary string conversions","2016-06 (Oulu)","|Nothing To Do| [#note-P0067R3]_","n/a",""
47+
"`P0067R3 <https://wg21.link/P0067R3>`__","Elementary string conversions","2016-06 (Oulu)","|Nothing To Do|","n/a","Resolved by `P0067R5 <https://wg21.link/P0067R5>`__"
4848
"`P0083R3 <https://wg21.link/P0083R3>`__","Splicing Maps and Sets","2016-06 (Oulu)","|Complete|","8.0",""
4949
"`P0084R2 <https://wg21.link/P0084R2>`__","Emplace Return Type","2016-06 (Oulu)","|Complete|","4.0",""
5050
"`P0088R3 <https://wg21.link/P0088R3>`__","Variant: a type-safe union for C++17","2016-06 (Oulu)","|Complete|","4.0",""
@@ -53,7 +53,7 @@
5353
"`P0174R2 <https://wg21.link/P0174R2>`__","Deprecating Vestigial Library Parts in C++17","2016-06 (Oulu)","|Complete|","15.0",""
5454
"`P0175R1 <https://wg21.link/P0175R1>`__","Synopses for the C library","2016-06 (Oulu)","","",""
5555
"`P0180R2 <https://wg21.link/P0180R2>`__","Reserve a New Library Namespace for Future Standardization","2016-06 (Oulu)","|Nothing To Do|","n/a",""
56-
"`P0181R1 <https://wg21.link/P0181R1>`__","Ordered by Default","2016-06 (Oulu)","|Nothing To Do| [#note-P0181]_","n/a",""
56+
"`P0181R1 <https://wg21.link/P0181R1>`__","Ordered by Default","2016-06 (Oulu)","|Nothing To Do|","n/a","Pulled at the 2017-01 meeting in Kona"
5757
"`P0209R2 <https://wg21.link/P0209R2>`__","make_from_tuple: apply for construction","2016-06 (Oulu)","|Complete|","3.9",""
5858
"`P0219R1 <https://wg21.link/P0219R1>`__","Relative Paths for Filesystem","2016-06 (Oulu)","|Complete|","7.0",""
5959
"`P0254R2 <https://wg21.link/P0254R2>`__","Integrating std::string_view and std::string","2016-06 (Oulu)","|Complete|","4.0",""
@@ -71,7 +71,7 @@
7171
"`P0394R4 <https://wg21.link/P0394R4>`__","Hotel Parallelifornia: terminate() for Parallel Algorithms Exception Handling","2016-06 (Oulu)","|Complete|","17.0",""
7272
"","","","","",""
7373
"`P0003R5 <https://wg21.link/P0003R5>`__","Removing Deprecated Exception Specifications from C++17","2016-11 (Issaquah)","|Complete|","5.0",""
74-
"`P0067R5 <https://wg21.link/P0067R5>`__","Elementary string conversions, revision 5","2016-11 (Issaquah)","|Partial| [#note-P0067R5]_","",""
74+
"`P0067R5 <https://wg21.link/P0067R5>`__","Elementary string conversions, revision 5","2016-11 (Issaquah)","|Partial|","","``std::(to|from)_chars`` for integrals has been available since version 7.0. ``std::to_chars`` for ``float`` and ``double`` since version 14.0 ``std::to_chars`` for ``long double`` uses the implementation for ``double``."
7575
"`P0403R1 <https://wg21.link/P0403R1>`__","Literal suffixes for ``basic_string_view``\ ","2016-11 (Issaquah)","|Complete|","4.0",""
7676
"`P0414R2 <https://wg21.link/P0414R2>`__","Merging shared_ptr changes from Library Fundamentals to C++17","2016-11 (Issaquah)","|Complete|","11.0",""
7777
"`P0418R2 <https://wg21.link/P0418R2>`__","Fail or succeed: there is no atomic lattice","2016-11 (Issaquah)","","",""
@@ -95,7 +95,7 @@
9595
"`P0317R1 <https://wg21.link/P0317R1>`__","Directory Entry Caching for Filesystem","2017-02 (Kona)","|Complete|","7.0",""
9696
"`P0430R2 <https://wg21.link/P0430R2>`__","File system library on non-POSIX-like operating systems","2017-02 (Kona)","|Complete|","7.0",""
9797
"`P0433R2 <https://wg21.link/P0433R2>`__","Toward a resolution of US7 and US14: Integrating template deduction for class templates into the standard library","2017-02 (Kona)","|Complete|","14.0",""
98-
"`P0452R1 <https://wg21.link/P0452R1>`__","Unifying <numeric> Parallel Algorithms","2017-02 (Kona)","|Partial| [#note-P0452]_","",""
98+
"`P0452R1 <https://wg21.link/P0452R1>`__","Unifying <numeric> Parallel Algorithms","2017-02 (Kona)","|Partial|","","The changes to ``std::transform_inclusive_scan`` and ``std::transform_exclusive_scan`` have not yet been implemented."
9999
"`P0467R2 <https://wg21.link/P0467R2>`__","Iterator Concerns for Parallel Algorithms","2017-02 (Kona)","|Partial|","",""
100100
"`P0492R2 <https://wg21.link/P0492R2>`__","Proposed Resolution of C++17 National Body Comments for Filesystems","2017-02 (Kona)","|Complete|","7.0",""
101101
"`P0518R1 <https://wg21.link/P0518R1>`__","Allowing copies as arguments to function objects given to parallel algorithms in response to CH11","2017-02 (Kona)","|Nothing To Do|","",""
@@ -105,7 +105,7 @@
105105
"`P0574R1 <https://wg21.link/P0574R1>`__","Algorithm Complexity Constraints and Parallel Overloads","2017-02 (Kona)","|Nothing To Do|","",""
106106
"`P0599R1 <https://wg21.link/P0599R1>`__","noexcept for hash functions","2017-02 (Kona)","|Complete|","5.0",""
107107
"`P0604R0 <https://wg21.link/P0604R0>`__","Resolving GB 55, US 84, US 85, US 86","2017-02 (Kona)","|Complete|","",""
108-
"`P0607R0 <https://wg21.link/P0607R0>`__","Inline Variables for the Standard Library","2017-02 (Kona)","|In Progress| [#note-P0607]_","6.0",""
108+
"`P0607R0 <https://wg21.link/P0607R0>`__","Inline Variables for the Standard Library","2017-02 (Kona)","|In Progress|","6.0","The parts of P0607 that are not done are the ``<regex>`` bits"
109109
"`P0618R0 <https://wg21.link/P0618R0>`__","Deprecating <codecvt>","2017-02 (Kona)","|Complete|","15.0",""
110110
"`P0623R0 <https://wg21.link/P0623R0>`__","Final C++17 Parallel Algorithms Fixes","2017-02 (Kona)","|Nothing To Do|","",""
111111
"","","","","",""

‎libcxx/docs/Status/Cxx20.rst

-34
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,6 @@ The groups that have contributed papers:
2626

2727
.. note:: "Nothing to do" means that no library changes were needed to implement this change.
2828

29-
.. _paper-status-cxx20:
30-
3129
Paper Status
3230
====================================
3331

@@ -36,38 +34,6 @@ Paper Status
3634
:header-rows: 1
3735
:widths: auto
3836

39-
.. note::
40-
41-
.. [#note-P0591] P0591: The changes in [mem.poly.allocator.mem] are missing.
42-
.. [#note-P0645] P0645: The implementation was complete since Clang 14,
43-
except the feature-test macro was not set until Clang 19.
44-
.. [#note-P0966] P0966: It was previously erroneously marked as complete in version 8.0. See `bug 45368 <https://llvm.org/PR45368>`__.
45-
.. [#note-P0619] P0619: Only sections D.7, D.8, D.9, D.10, D.11 and D.13 are implemented. Sections D.4 and D.12 remain undone.
46-
.. [#note-P0883.1] P0883: shared_ptr and floating-point changes weren't applied as they themselves aren't implemented yet.
47-
.. [#note-P0883.2] P0883: ``ATOMIC_FLAG_INIT`` was marked deprecated in version 14.0, but was undeprecated with the implementation of LWG3659 in version 15.0.
48-
.. [#note-P0660] P0660: The paper is implemented but the features are experimental and can be enabled via ``-fexperimental-library``.
49-
.. [#note-P1614] P1614: ``std::strong_order(long double, long double)`` is partly implemented.
50-
.. [#note-P0542] P0542: That paper was pulled out of the draft at the 2019-07 meeting in Cologne.
51-
.. [#note-P0788] P0788: That paper was pulled out of the draft at the 2019-07 meeting in Cologne.
52-
.. [#note-P0920] P0920: That paper was reverted by `P1661 <https://wg21.link/P1661>`__.
53-
.. [#note-P1424] P1424: That paper was superseded by `P1902 <https://wg21.link/P1902>`__.
54-
.. [#note-LWG2070] LWG2070: That LWG issue was resolved by `P0674R1 <https://wg21.link/P0674R1>`__.
55-
.. [#note-LWG2499] LWG2499: That LWG issue was resolved by `P0487R1 <https://wg21.link/P0487R1>`__.
56-
.. [#note-LWG2797] LWG2797: That LWG issue was resolved by `P1285R0 <https://wg21.link/P1285R0>`__.
57-
.. [#note-LWG3022] LWG3022: That LWG issue was resolved by `P1285R0 <https://wg21.link/P1285R0>`__.
58-
.. [#note-LWG3134] LWG3134: That LWG issue was resolved by `P1210R0 <https://wg21.link/P1210R0>`__.
59-
.. [#note-P0355] P0355: The implementation status is:
60-
61-
* ``Calendars`` mostly done in Clang 7
62-
* ``Input parsers`` not done
63-
* ``Stream output`` Obsolete due to `P1361R2 <https://wg21.link/P1361R2>`_ "Integration of chrono with text formatting"
64-
* ``Time zone and leap seconds`` In Progress
65-
* ``TAI clock`` not done
66-
* ``GPS clock`` not done
67-
* ``UTC clock`` not done
68-
69-
.. _issues-status-cxx20:
70-
7137
Library Working Group Issues Status
7238
====================================
7339

‎libcxx/docs/Status/Cxx20Issues.csv

+95-95
Large diffs are not rendered by default.

‎libcxx/docs/Status/Cxx20Papers.csv

+49-49
Large diffs are not rendered by default.

‎libcxx/docs/Status/Cxx23.rst

-26
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,6 @@ The groups that have contributed papers:
2626

2727
.. note:: "Nothing to do" means that no library changes were needed to implement this change.
2828

29-
.. _paper-status-cxx23:
30-
3129
Paper Status
3230
====================================
3331

@@ -36,34 +34,10 @@ Paper Status
3634
:header-rows: 1
3735
:widths: auto
3836

39-
.. note::
40-
41-
.. [#note-P0533R9] P0533R9: ``isfinite``, ``isinf``, ``isnan`` and ``isnormal`` are implemented.
42-
.. [#note-P1413R3] P1413R3: ``std::aligned_storage_t`` and ``std::aligned_union_t`` are marked deprecated, but
43-
clang doesn't issue a diagnostic for deprecated using template declarations.
44-
.. [#note-P2520R0] P2520R0: Libc++ implemented this paper as a DR in C++20 as well.
45-
.. [#note-P2711R1] P2711R1: ``join_with_view`` hasn't been done yet since this type isn't implemented yet.
46-
.. [#note-P2770R0] P2770R0: ``join_with_view`` hasn't been done yet since this type isn't implemented yet.
47-
.. [#note-P2609R3] P2609R3: Libc++ implemented this paper as a DR in C++20 as well. (MSVC STL does the same.)
48-
.. [#note-LWG3494] LWG3494: That LWG issue was superseded by `P2017R1 <https://wg21.link/P2017R1>`__.
49-
.. [#note-LWG3481] LWG3481: That LWG issue was superseded by `P2415R2 <https://wg21.link/P2415R2>`__.
50-
.. [#note-LWG3265] LWG3265: That LWG issue was resolved by `LWG3435 <https://wg21.link/LWG3435>`__.
51-
.. [#note-P2693R1] P2693R1: The formatter for ``std::thread::id`` is implemented.
52-
The formatter for ``stacktrace`` is not implemented, since ``stacktrace`` is
53-
not implemented yet.
54-
55-
.. _issues-status-cxx23:
56-
5737
Library Working Group Issues Status
5838
====================================
5939

6040
.. csv-table::
6141
:file: Cxx23Issues.csv
6242
:header-rows: 1
6343
:widths: auto
64-
65-
.. note::
66-
67-
.. [#note-LWG3750] LWG3750 Only ``__cpp_lib_format_ranges`` is fully implemented.
68-
.. [#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.
69-
.. [#note-LWG3036] LWG3036: This issue was reverted by P2875R4

‎libcxx/docs/Status/Cxx23Issues.csv

+156-156
Large diffs are not rendered by default.

‎libcxx/docs/Status/Cxx23Papers.csv

+46-46
Large diffs are not rendered by default.

‎libcxx/docs/Status/Cxx2c.rst

-12
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,6 @@ The groups that have contributed papers:
2727

2828
.. note:: "Nothing to do" means that no library changes were needed to implement this change.
2929

30-
.. _paper-status-cxx2c:
31-
3230
Paper Status
3331
====================================
3432

@@ -37,16 +35,6 @@ Paper Status
3735
:header-rows: 1
3836
:widths: auto
3937

40-
.. note::
41-
42-
.. [#note-P2510R3] This paper is applied as DR against C++20. (MSVC STL and libstdc++ will do the same.)
43-
.. [#note-P3142R0] This paper is applied as DR against C++23. (MSVC STL and libstdc++ will do the same.)
44-
.. [#note-P2944R3] Implemented comparisons for ``reference_wrapper`` only.
45-
.. [#note-P2422R1] Libc++ keeps the ``nodiscard`` attributes as a conforming extension.
46-
.. [#note-P2997R1] This paper is applied as DR against C++20. (MSVC STL and libstdc++ will do the same.)
47-
48-
.. _issues-status-cxx2c:
49-
5038
Library Working Group Issues Status
5139
====================================
5240

‎libcxx/docs/Status/Cxx2cIssues.csv

+32-32
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
1-
"Issue #","Issue Name","Meeting","Status","First released version","Labels"
1+
"Issue #","Issue Name","Meeting","Status","First released version","Notes"
22
"`LWG2994 <https://wg21.link/LWG2994>`__","Needless UB for ``basic_string`` and ``basic_string_view``","2023-06 (Varna)","|Complete|","5.0",""
3-
"`LWG3884 <https://wg21.link/LWG3884>`__","``flat_foo`` is missing allocator-extended copy/move constructors","2023-06 (Varna)","","","|flat_containers|"
3+
"`LWG3884 <https://wg21.link/LWG3884>`__","``flat_foo`` is missing allocator-extended copy/move constructors","2023-06 (Varna)","","",""
44
"`LWG3885 <https://wg21.link/LWG3885>`__","``op`` should be in [zombie.names]","2023-06 (Varna)","|Nothing To Do|","",""
55
"`LWG3887 <https://wg21.link/LWG3887>`__","Version macro for ``allocate_at_least``","2023-06 (Varna)","|Complete|","19.0",""
66
"`LWG3893 <https://wg21.link/LWG3893>`__","LWG 3661 broke ``atomic<shared_ptr<T>> a; a = nullptr;``","2023-06 (Varna)","","",""
77
"`LWG3894 <https://wg21.link/LWG3894>`__","``generator::promise_type::yield_value(ranges::elements_of<Rng, Alloc>)`` should not be ``noexcept``","2023-06 (Varna)","","",""
88
"`LWG3903 <https://wg21.link/LWG3903>`__","span destructor is redundantly noexcept","2023-06 (Varna)","|Complete|","7.0",""
9-
"`LWG3904 <https://wg21.link/LWG3904>`__","``lazy_split_view::outer-iterator``'s const-converting constructor isn't setting ``trailing_empty_``","2023-06 (Varna)","","","|ranges|"
9+
"`LWG3904 <https://wg21.link/LWG3904>`__","``lazy_split_view::outer-iterator``'s const-converting constructor isn't setting ``trailing_empty_``","2023-06 (Varna)","","",""
1010
"`LWG3905 <https://wg21.link/LWG3905>`__","Type of ``std::fexcept_t``","2023-06 (Varna)","|Complete|","3.4",""
11-
"`LWG3912 <https://wg21.link/LWG3912>`__","``enumerate_view::iterator::operator-`` should be ``noexcept``","2023-06 (Varna)","","","|ranges|"
12-
"`LWG3914 <https://wg21.link/LWG3914>`__","Inconsistent template-head of ``ranges::enumerate_view``","2023-06 (Varna)","","","|ranges|"
13-
"`LWG3915 <https://wg21.link/LWG3915>`__","Redundant paragraph about expression variations","2023-06 (Varna)","","","|ranges|"
14-
"`LWG3925 <https://wg21.link/LWG3925>`__","Concept ``formattable``'s definition is incorrect","2023-06 (Varna)","|Complete|","17.0","|format|"
11+
"`LWG3912 <https://wg21.link/LWG3912>`__","``enumerate_view::iterator::operator-`` should be ``noexcept``","2023-06 (Varna)","","",""
12+
"`LWG3914 <https://wg21.link/LWG3914>`__","Inconsistent template-head of ``ranges::enumerate_view``","2023-06 (Varna)","","",""
13+
"`LWG3915 <https://wg21.link/LWG3915>`__","Redundant paragraph about expression variations","2023-06 (Varna)","","",""
14+
"`LWG3925 <https://wg21.link/LWG3925>`__","Concept ``formattable``'s definition is incorrect","2023-06 (Varna)","|Complete|","17.0",""
1515
"`LWG3927 <https://wg21.link/LWG3927>`__","Unclear preconditions for ``operator[]`` for sequence containers","2023-06 (Varna)","|Nothing To Do|","",""
1616
"`LWG3935 <https://wg21.link/LWG3935>`__","``template<class X> constexpr complex& operator=(const complex<X>&)`` has no specification","2023-06 (Varna)","|Complete|","3.4",""
1717
"`LWG3938 <https://wg21.link/LWG3938>`__","Cannot use ``std::expected`` monadic ops with move-only ``error_type``","2023-06 (Varna)","|Complete|","18.0",""
@@ -23,58 +23,58 @@
2323
"`LWG3431 <https://wg21.link/LWG3431>`__","``<=>`` for containers should require ``three_way_comparable<T>`` instead of ``<=>``","2023-11 (Kona)","","",""
2424
"`LWG3749 <https://wg21.link/LWG3749>`__","``common_iterator`` should handle integer-class difference types","2023-11 (Kona)","","",""
2525
"`LWG3809 <https://wg21.link/LWG3809>`__","Is ``std::subtract_with_carry_engine<uint16_t>`` supposed to work","2023-11 (Kona)","","",""
26-
"`LWG3892 <https://wg21.link/LWG3892>`__","Incorrect formatting of nested ranges and tuples","2023-11 (Kona)","|Complete|","17.0","|format|"
26+
"`LWG3892 <https://wg21.link/LWG3892>`__","Incorrect formatting of nested ranges and tuples","2023-11 (Kona)","|Complete|","17.0",""
2727
"`LWG3897 <https://wg21.link/LWG3897>`__","``inout_ptr`` will not update raw pointer to 0","2023-11 (Kona)","|Complete|","19.0",""
2828
"`LWG3946 <https://wg21.link/LWG3946>`__","The definition of ``const_iterator_t`` should be reworked","2023-11 (Kona)","","",""
29-
"`LWG3947 <https://wg21.link/LWG3947>`__","Unexpected constraints on ``adjacent_transform_view::base()``","2023-11 (Kona)","","","|ranges|"
30-
"`LWG3948 <https://wg21.link/LWG3948>`__","``possibly-const-range and as-const-pointer`` should be ``noexcept``","2023-11 (Kona)","","","|ranges|"
29+
"`LWG3947 <https://wg21.link/LWG3947>`__","Unexpected constraints on ``adjacent_transform_view::base()``","2023-11 (Kona)","","",""
30+
"`LWG3948 <https://wg21.link/LWG3948>`__","``possibly-const-range and as-const-pointer`` should be ``noexcept``","2023-11 (Kona)","","",""
3131
"`LWG3949 <https://wg21.link/LWG3949>`__","``std::atomic<bool>``'s trivial destructor dropped in C++17 spec wording","2023-11 (Kona)","","",""
3232
"`LWG3951 <https://wg21.link/LWG3951>`__","[expected.object.swap]: Using ``value()`` instead of ``has_value()``","2023-11 (Kona)","|Complete|","16.0",""
33-
"`LWG3953 <https://wg21.link/LWG3953>`__","``iter_move`` for ``common_iterator`` and ``counted_iterator`` should return ``decltype(auto)``","2023-11 (Kona)","","","|ranges|"
33+
"`LWG3953 <https://wg21.link/LWG3953>`__","``iter_move`` for ``common_iterator`` and ``counted_iterator`` should return ``decltype(auto)``","2023-11 (Kona)","","",""
3434
"`LWG3957 <https://wg21.link/LWG3957>`__","[container.alloc.reqmts] The value category of v should be claimed","2023-11 (Kona)","","",""
35-
"`LWG3965 <https://wg21.link/LWG3965>`__","Incorrect example in [format.string.escaped] p3 for formatting of combining characters","2023-11 (Kona)","|Complete|","19.0","|format|"
35+
"`LWG3965 <https://wg21.link/LWG3965>`__","Incorrect example in [format.string.escaped] p3 for formatting of combining characters","2023-11 (Kona)","|Complete|","19.0",""
3636
"`LWG3970 <https://wg21.link/LWG3970>`__","[mdspan.syn] Missing definition of ``full_extent_t`` and ``full_extent``","2023-11 (Kona)","","",""
3737
"`LWG3973 <https://wg21.link/LWG3973>`__","Monadic operations should be ADL-proof","2023-11 (Kona)","","",""
3838
"`LWG3974 <https://wg21.link/LWG3974>`__","``mdspan::operator[]`` should not copy ``OtherIndexTypes``","2023-11 (Kona)","","",""
39-
"`LWG3987 <https://wg21.link/LWG3987>`__","Including ``<flat_foo>`` doesn't provide ``std::begin``/``end``","2023-11 (Kona)","","","|flat_containers|"
39+
"`LWG3987 <https://wg21.link/LWG3987>`__","Including ``<flat_foo>`` doesn't provide ``std::begin``/``end``","2023-11 (Kona)","","",""
4040
"`LWG3990 <https://wg21.link/LWG3990>`__","Program-defined specializations of ``std::tuple`` and ``std::variant`` can't be properly supported","2023-11 (Kona)","","",""
41-
"`LWG4001 <https://wg21.link/LWG4001>`__","``iota_view`` should provide ``empty``","2023-11 (Kona)","|Complete|","19.0","|ranges|"
41+
"`LWG4001 <https://wg21.link/LWG4001>`__","``iota_view`` should provide ``empty``","2023-11 (Kona)","|Complete|","19.0",""
4242
"","","","","",""
4343
"`LWG3767 <https://wg21.link/LWG3767>`__","``codecvt<charN_t, char8_t, mbstate_t>`` incorrectly added to locale","2024-03 (Tokyo)","","",""
44-
"`LWG3919 <https://wg21.link/LWG3919>`__","``enumerate_view`` may invoke UB for sized common non-forward underlying ranges","2024-03 (Tokyo)","","","|ranges|"
44+
"`LWG3919 <https://wg21.link/LWG3919>`__","``enumerate_view`` may invoke UB for sized common non-forward underlying ranges","2024-03 (Tokyo)","","",""
4545
"`LWG3950 <https://wg21.link/LWG3950>`__","``std::basic_string_view`` comparison operators are overspecified","2024-03 (Tokyo)","|Complete|","18.0",""
46-
"`LWG3975 <https://wg21.link/LWG3975>`__","Specializations of ``basic_format_context`` should not be permitted","2024-03 (Tokyo)","|Nothing To Do|","","|format|"
47-
"`LWG3984 <https://wg21.link/LWG3984>`__","``ranges::to``'s recursion branch may be ill-formed","2024-03 (Tokyo)","|Complete|","19.0","|ranges|"
46+
"`LWG3975 <https://wg21.link/LWG3975>`__","Specializations of ``basic_format_context`` should not be permitted","2024-03 (Tokyo)","|Nothing To Do|","",""
47+
"`LWG3984 <https://wg21.link/LWG3984>`__","``ranges::to``'s recursion branch may be ill-formed","2024-03 (Tokyo)","|Complete|","19.0",""
4848
"`LWG4011 <https://wg21.link/LWG4011>`__","``""Effects: Equivalent to return""`` in ``[span.elem]``","2024-03 (Tokyo)","|Nothing To Do|","",""
49-
"`LWG4012 <https://wg21.link/LWG4012>`__","``common_view::begin/end`` are missing the ``simple-view`` check","2024-03 (Tokyo)","","","|ranges|"
50-
"`LWG4013 <https://wg21.link/LWG4013>`__","``lazy_split_view::outer-iterator::value_type`` should not provide default constructor","2024-03 (Tokyo)","","","|ranges|"
49+
"`LWG4012 <https://wg21.link/LWG4012>`__","``common_view::begin/end`` are missing the ``simple-view`` check","2024-03 (Tokyo)","","",""
50+
"`LWG4013 <https://wg21.link/LWG4013>`__","``lazy_split_view::outer-iterator::value_type`` should not provide default constructor","2024-03 (Tokyo)","","",""
5151
"`LWG4016 <https://wg21.link/LWG4016>`__","container-insertable checks do not match what container-inserter does","2024-03 (Tokyo)","","",""
5252
"`LWG4023 <https://wg21.link/LWG4023>`__","Preconditions of ``std::basic_streambuf::setg/setp``","2024-03 (Tokyo)","|Complete|","19.0",""
5353
"`LWG4025 <https://wg21.link/LWG4025>`__","Move assignment operator of ``std::expected<cv void, E>`` should not be conditionally deleted","2024-03 (Tokyo)","","",""
5454
"`LWG4030 <https://wg21.link/LWG4030>`__","Clarify whether arithmetic expressions in ``[numeric.sat.func]`` are mathematical or C++","2024-03 (Tokyo)","|Nothing To Do|","",""
5555
"`LWG4031 <https://wg21.link/LWG4031>`__","``bad_expected_access<void>`` member functions should be ``noexcept``","2024-03 (Tokyo)","|Complete|","16.0",""
56-
"`LWG4035 <https://wg21.link/LWG4035>`__","``single_view`` should provide ``empty``","2024-03 (Tokyo)","|Complete|","19.0","|ranges|"
56+
"`LWG4035 <https://wg21.link/LWG4035>`__","``single_view`` should provide ``empty``","2024-03 (Tokyo)","|Complete|","19.0",""
5757
"`LWG4036 <https://wg21.link/LWG4036>`__","``__alignof_is_defined`` is only implicitly specified in C++ and not yet deprecated","2024-03 (Tokyo)","","",""
5858
"`LWG4037 <https://wg21.link/LWG4037>`__","Static data members of ``ctype_base`` are not yet required to be usable in constant expressions","2024-03 (Tokyo)","","",""
5959
"`LWG4038 <https://wg21.link/LWG4038>`__","``std::text_encoding::aliases_view`` should have constexpr iterators","2024-03 (Tokyo)","","",""
6060
"`LWG4043 <https://wg21.link/LWG4043>`__","""ASCII"" is not a registered character encoding","2024-03 (Tokyo)","|Nothing To Do|","",""
6161
"`LWG4045 <https://wg21.link/LWG4045>`__","``tuple`` can create dangling references from ``tuple-like``","2024-03 (Tokyo)","","",""
62-
"`LWG4053 <https://wg21.link/LWG4053>`__","Unary call to ``std::views::repeat`` does not decay the argument","2024-03 (Tokyo)","|Complete|","19.0","|ranges|"
63-
"`LWG4054 <https://wg21.link/LWG4054>`__","Repeating a ``repeat_view`` should repeat the view","2024-03 (Tokyo)","|Complete|","19.0","|ranges|"
62+
"`LWG4053 <https://wg21.link/LWG4053>`__","Unary call to ``std::views::repeat`` does not decay the argument","2024-03 (Tokyo)","|Complete|","19.0",""
63+
"`LWG4054 <https://wg21.link/LWG4054>`__","Repeating a ``repeat_view`` should repeat the view","2024-03 (Tokyo)","|Complete|","19.0",""
6464
"","","","","",""
65-
"`LWG3944 <https://wg21.link/LWG3944>`__","Formatters converting sequences of ``char`` to sequences of ``wchar_t``","2024-06 (St. Louis)","","","|format|"
65+
"`LWG3944 <https://wg21.link/LWG3944>`__","Formatters converting sequences of ``char`` to sequences of ``wchar_t``","2024-06 (St. Louis)","","",""
6666
"`LWG4060 <https://wg21.link/LWG4060>`__","``submdspan`` preconditions do not forbid creating invalid pointer","2024-06 (St. Louis)","","",""
67-
"`LWG4061 <https://wg21.link/LWG4061>`__","Should ``std::basic_format_context`` be default-constructible/copyable/movable?","2024-06 (St. Louis)","|Complete|","19.0","|format|"
67+
"`LWG4061 <https://wg21.link/LWG4061>`__","Should ``std::basic_format_context`` be default-constructible/copyable/movable?","2024-06 (St. Louis)","|Complete|","19.0",""
6868
"`LWG4071 <https://wg21.link/LWG4071>`__","``reference_wrapper`` comparisons are not SFINAE-friendly","2024-06 (St. Louis)","|Complete|","19.0",""
69-
"`LWG4074 <https://wg21.link/LWG4074>`__","``compatible-joinable-ranges`` is underconstrained","2024-06 (St. Louis)","","","|ranges|"
69+
"`LWG4074 <https://wg21.link/LWG4074>`__","``compatible-joinable-ranges`` is underconstrained","2024-06 (St. Louis)","","",""
7070
"`LWG4076 <https://wg21.link/LWG4076>`__","``concat_view`` should be freestanding","2024-06 (St. Louis)","","",""
71-
"`LWG4079 <https://wg21.link/LWG4079>`__","Missing Preconditions in ``concat_view::iterator``\`s conversion constructor","2024-06 (St. Louis)","","","|ranges|"
72-
"`LWG4082 <https://wg21.link/LWG4082>`__","``views::concat(r)`` is well-formed when ``r`` is an ``output_range``","2024-06 (St. Louis)","","","|ranges|"
73-
"`LWG4083 <https://wg21.link/LWG4083>`__","``views::as_rvalue`` should reject non-input ranges","2024-06 (St. Louis)","","","|ranges|"
74-
"`LWG4096 <https://wg21.link/LWG4096>`__","``views::iota(views::iota(0))`` should be rejected","2024-06 (St. Louis)","","","|ranges|"
75-
"`LWG4098 <https://wg21.link/LWG4098>`__","``views::adjacent<0>`` should reject non-forward ranges","2024-06 (St. Louis)","","","|ranges|"
76-
"`LWG4105 <https://wg21.link/LWG4105>`__","``ranges::ends_with``\`s Returns misses difference casting","2024-06 (St. Louis)","","","|ranges|"
77-
"`LWG4106 <https://wg21.link/LWG4106>`__","``basic_format_args`` should not be default-constructible","2024-06 (St. Louis)","|Complete|","19.0","|format|"
71+
"`LWG4079 <https://wg21.link/LWG4079>`__","Missing Preconditions in ``concat_view::iterator``\`s conversion constructor","2024-06 (St. Louis)","","",""
72+
"`LWG4082 <https://wg21.link/LWG4082>`__","``views::concat(r)`` is well-formed when ``r`` is an ``output_range``","2024-06 (St. Louis)","","",""
73+
"`LWG4083 <https://wg21.link/LWG4083>`__","``views::as_rvalue`` should reject non-input ranges","2024-06 (St. Louis)","","",""
74+
"`LWG4096 <https://wg21.link/LWG4096>`__","``views::iota(views::iota(0))`` should be rejected","2024-06 (St. Louis)","","",""
75+
"`LWG4098 <https://wg21.link/LWG4098>`__","``views::adjacent<0>`` should reject non-forward ranges","2024-06 (St. Louis)","","",""
76+
"`LWG4105 <https://wg21.link/LWG4105>`__","``ranges::ends_with``\`s Returns misses difference casting","2024-06 (St. Louis)","","",""
77+
"`LWG4106 <https://wg21.link/LWG4106>`__","``basic_format_args`` should not be default-constructible","2024-06 (St. Louis)","|Complete|","19.0",""
7878
"","","","","",""
7979
"`LWG3343 <https://wg21.link/LWG3343>`__","Ordering of calls to ``unlock()`` and ``notify_all()`` in Effects element of ``notify_all_at_thread_exit()`` should be reversed","Not Adopted Yet","|Complete|","16.0",""
8080
"`LWG4139 <https://wg21.link/LWG4139>`__","§[time.zone.leap] recursive constraint in <=>","Not Adopted Yet","|Complete|","20.0",""

‎libcxx/docs/Status/Cxx2cPapers.csv

+18-18
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
1-
"Paper #","Paper Name","Meeting","Status","First released version","Labels"
1+
"Paper #","Paper Name","Meeting","Status","First released version","Notes"
22
"`P2497R0 <https://wg21.link/P2497R0>`__","Testing for success or failure of ``<charconv>`` functions","2023-06 (Varna)","|Complete|","18.0",""
33
"`P2592R3 <https://wg21.link/P2592R3>`__","Hashing support for ``std::chrono`` value classes","2023-06 (Varna)","","",""
4-
"`P2587R3 <https://wg21.link/P2587R3>`__","``to_string`` or not ``to_string``","2023-06 (Varna)","","","|format|"
4+
"`P2587R3 <https://wg21.link/P2587R3>`__","``to_string`` or not ``to_string``","2023-06 (Varna)","","",""
55
"`P2562R1 <https://wg21.link/P2562R1>`__","``constexpr`` Stable Sorting","2023-06 (Varna)","","",""
66
"`P2545R4 <https://wg21.link/P2545R4>`__","Read-Copy Update (RCU)","2023-06 (Varna)","","",""
77
"`P2530R3 <https://wg21.link/P2530R3>`__","Hazard Pointers for C++26","2023-06 (Varna)","","",""
8-
"`P2538R1 <https://wg21.link/P2538R1>`__","ADL-proof ``std::projected``","2023-06 (Varna)","|Complete|","18.0","|ranges|"
8+
"`P2538R1 <https://wg21.link/P2538R1>`__","ADL-proof ``std::projected``","2023-06 (Varna)","|Complete|","18.0",""
99
"`P2495R3 <https://wg21.link/P2495R3>`__","Interfacing ``stringstream``\s with ``string_view``","2023-06 (Varna)","|Complete|","19.0",""
10-
"`P2510R3 <https://wg21.link/P2510R3>`__","Formatting pointers","2023-06 (Varna)","|Complete| [#note-P2510R3]_","17.0","|format|"
10+
"`P2510R3 <https://wg21.link/P2510R3>`__","Formatting pointers","2023-06 (Varna)","|Complete|","17.0","Implemented as a DR against C++20. (MSVC STL and libstdc++ will do the same.)"
1111
"`P2198R7 <https://wg21.link/P2198R7>`__","Freestanding Feature-Test Macros and Implementation-Defined Extensions","2023-06 (Varna)","","",""
1212
"`P2338R4 <https://wg21.link/P2338R4>`__","Freestanding Library: Character primitives and the C library","2023-06 (Varna)","","",""
1313
"`P2013R5 <https://wg21.link/P2013R5>`__","Freestanding Language: Optional ``::operator new``","2023-06 (Varna)","","",""
@@ -16,7 +16,7 @@
1616
"`P1885R12 <https://wg21.link/P1885R12>`__","Naming Text Encodings to Demystify Them","2023-06 (Varna)","","",""
1717
"`P0792R14 <https://wg21.link/P0792R14>`__","``function_ref``: a type-erased callable reference","2023-06 (Varna)","","",""
1818
"`P2874R2 <https://wg21.link/P2874R2>`__","Mandating Annex D Require No More","2023-06 (Varna)","","",""
19-
"`P2757R3 <https://wg21.link/P2757R3>`__","Type-checking format args","2023-06 (Varna)","","","|format|"
19+
"`P2757R3 <https://wg21.link/P2757R3>`__","Type-checking format args","2023-06 (Varna)","","",""
2020
"`P2637R3 <https://wg21.link/P2637R3>`__","Member ``visit``","2023-06 (Varna)","|Complete|","19.0",""
2121
"`P2641R4 <https://wg21.link/P2641R4>`__","Checking if a ``union`` alternative is active","2023-06 (Varna)","","",""
2222
"`P1759R6 <https://wg21.link/P1759R6>`__","Native handles and file streams","2023-06 (Varna)","|Complete|","18.0",""
@@ -30,9 +30,9 @@
3030
"`P0543R3 <https://wg21.link/P0543R3>`__","Saturation arithmetic","2023-11 (Kona)","|Complete|","18.0",""
3131
"`P2407R5 <https://wg21.link/P2407R5>`__","Freestanding Library: Partial Classes","2023-11 (Kona)","","",""
3232
"`P2546R5 <https://wg21.link/P2546R5>`__","Debugging Support","2023-11 (Kona)","","",""
33-
"`P2905R2 <https://wg21.link/P2905R2>`__","Runtime format strings","2023-11 (Kona)","|Complete|","18.0","|format| |DR|"
34-
"`P2918R2 <https://wg21.link/P2918R2>`__","Runtime format strings II","2023-11 (Kona)","|Complete|","18.0","|format|"
35-
"`P2909R4 <https://wg21.link/P2909R4>`__","Fix formatting of code units as integers (Dude, where’s my ``char``?)","2023-11 (Kona)","|Complete|","18.0","|format| |DR|"
33+
"`P2905R2 <https://wg21.link/P2905R2>`__","Runtime format strings","2023-11 (Kona)","|Complete|","18.0",""
34+
"`P2918R2 <https://wg21.link/P2918R2>`__","Runtime format strings II","2023-11 (Kona)","|Complete|","18.0",""
35+
"`P2909R4 <https://wg21.link/P2909R4>`__","Fix formatting of code units as integers (Dude, where’s my ``char``?)","2023-11 (Kona)","|Complete|","18.0",""
3636
"`P0952R2 <https://wg21.link/P0952R2>`__","A new specification for ``std::generate_canonical``","2023-11 (Kona)","","",""
3737
"`P2447R6 <https://wg21.link/P2447R6>`__","``std::span`` over an initializer list","2023-11 (Kona)","|Complete|","18.0",""
3838
"`P2821R5 <https://wg21.link/P2821R5>`__","``span.at()``","2023-11 (Kona)","|Complete|","18.0",""
@@ -42,37 +42,37 @@
4242
"`P2819R2 <https://wg21.link/P2819R2>`__","Add tuple protocol to complex","2023-11 (Kona)","|Complete|","19.0",""
4343
"`P2937R0 <https://wg21.link/P2937R0>`__","Freestanding: Remove ``strtok``","2023-11 (Kona)","","",""
4444
"`P2833R2 <https://wg21.link/P2833R2>`__","Freestanding Library: inout expected span","2023-11 (Kona)","","",""
45-
"`P2836R1 <https://wg21.link/P2836R1>`__","``std::basic_const_iterator`` should follow its underlying type's convertibility","2023-11 (Kona)","","","|DR|"
45+
"`P2836R1 <https://wg21.link/P2836R1>`__","``std::basic_const_iterator`` should follow its underlying type's convertibility","2023-11 (Kona)","","",""
4646
"`P2264R7 <https://wg21.link/P2264R7>`__","Make ``assert()`` macro user friendly for C and C++","2023-11 (Kona)","","",""
4747
"`P1673R13 <https://wg21.link/P1673R13>`__","A free function linear algebra interface based on the BLAS","2023-11 (Kona)","","",""
4848
"","","","","",""
4949
"`P2875R4 <https://wg21.link/P2875R4>`__","Undeprecate ``polymorphic_allocator::destroy`` for C++26","2024-03 (Tokyo)","|Complete|","15.0",""
5050
"`P2867R2 <https://wg21.link/P2867R2>`__","Remove Deprecated ``strstreams`` From C++26","2024-03 (Tokyo)","|Complete|","19.0",""
5151
"`P2869R4 <https://wg21.link/P2869R4>`__","Remove Deprecated ``shared_ptr`` Atomic Access APIs from C++26","2024-03 (Tokyo)","","",""
5252
"`P2872R3 <https://wg21.link/P2872R3>`__","Remove ``wstring_convert`` From C++26","2024-03 (Tokyo)","|Complete|","19.0",""
53-
"`P3107R5 <https://wg21.link/P3107R5>`__","Permit an efficient implementation of ``std::print``","2024-03 (Tokyo)","","","|format| |DR|"
54-
"`P3142R0 <https://wg21.link/P3142R0>`__","Printing Blank Lines with ``println``","2024-03 (Tokyo)","|Complete| [#note-P3142R0]_","19.0","|format|"
55-
"`P2845R8 <https://wg21.link/P2845R8>`__","Formatting of ``std::filesystem::path``","2024-03 (Tokyo)","","","|format|"
53+
"`P3107R5 <https://wg21.link/P3107R5>`__","Permit an efficient implementation of ``std::print``","2024-03 (Tokyo)","","",""
54+
"`P3142R0 <https://wg21.link/P3142R0>`__","Printing Blank Lines with ``println``","2024-03 (Tokyo)","|Complete|","19.0","Implemented as a DR against C++23. (MSVC STL and libstdc++ will do the same.)"
55+
"`P2845R8 <https://wg21.link/P2845R8>`__","Formatting of ``std::filesystem::path``","2024-03 (Tokyo)","","",""
5656
"`P0493R5 <https://wg21.link/P0493R5>`__","Atomic minimum/maximum","2024-03 (Tokyo)","","",""
57-
"`P2542R8 <https://wg21.link/P2542R8>`__","``views::concat``","2024-03 (Tokyo)","","","|ranges|"
57+
"`P2542R8 <https://wg21.link/P2542R8>`__","``views::concat``","2024-03 (Tokyo)","","",""
5858
"`P2591R5 <https://wg21.link/P2591R5>`__","Concatenation of strings and string views","2024-03 (Tokyo)","|Complete|","19.0",""
5959
"`P2248R8 <https://wg21.link/P2248R8>`__","Enabling list-initialization for algorithms","2024-03 (Tokyo)","","",""
6060
"`P2810R4 <https://wg21.link/P2810R4>`__","``is_debugger_present`` ``is_replaceable``","2024-03 (Tokyo)","","",""
6161
"`P1068R11 <https://wg21.link/P1068R11>`__","Vector API for random number generation","2024-03 (Tokyo)","","",""
62-
"`P2944R3 <https://wg21.link/P2944R3>`__","Comparisons for ``reference_wrapper``","2024-03 (Tokyo)","|Partial| [#note-P2944R3]_","19.0",""
62+
"`P2944R3 <https://wg21.link/P2944R3>`__","Comparisons for ``reference_wrapper``","2024-03 (Tokyo)","|Partial|","19.0","Implemented comparisons for ``reference_wrapper`` only"
6363
"`P2642R6 <https://wg21.link/P2642R6>`__","Padded ``mdspan`` layouts","2024-03 (Tokyo)","","",""
6464
"`P3029R1 <https://wg21.link/P3029R1>`__","Better ``mdspan``'s CTAD","2024-03 (Tokyo)","|Complete|","19.0",""
6565
"","","","","",""
6666
"`P2747R2 <https://wg21.link/P2747R2>`__","``constexpr`` placement new","2024-06 (St. Louis)","|Complete|","20.0",""
67-
"`P2997R1 <https://wg21.link/P2997R1>`__","Removing the common reference requirement from the indirectly invocable concepts","2024-06 (St. Louis)","|Complete| [#note-P2997R1]_","19.0",""
67+
"`P2997R1 <https://wg21.link/P2997R1>`__","Removing the common reference requirement from the indirectly invocable concepts","2024-06 (St. Louis)","|Complete|","19.0","Implemented as a DR against C++20. (MSVC STL and libstdc++ will do the same.)"
6868
"`P2389R2 <https://wg21.link/P2389R2>`__","``dextents`` Index Type Parameter","2024-06 (St. Louis)","|Complete|","19.0",""
69-
"`P3168R2 <https://wg21.link/P3168R2>`__","Give ``std::optional`` Range Support","2024-06 (St. Louis)","","","|ranges|"
69+
"`P3168R2 <https://wg21.link/P3168R2>`__","Give ``std::optional`` Range Support","2024-06 (St. Louis)","","",""
7070
"`P3217R0 <https://wg21.link/P3217R0>`__","Adjoints to 'Enabling list-initialization for algorithms': find_last","2024-06 (St. Louis)","","",""
7171
"`P2985R0 <https://wg21.link/P2985R0>`__","A type trait for detecting virtual base classes","2024-06 (St. Louis)","|Complete|","20.0",""
7272
"`P0843R14 <https://wg21.link/P0843R14>`__","``inplace_vector``","2024-06 (St. Louis)","","",""
73-
"`P3235R3 <https://wg21.link/P3235R3>`__","``std::print`` more types faster with less memory","2024-06 (St. Louis)","","","|format| |DR|"
73+
"`P3235R3 <https://wg21.link/P3235R3>`__","``std::print`` more types faster with less memory","2024-06 (St. Louis)","","",""
7474
"`P2968R2 <https://wg21.link/P2968R2>`__","Make ``std::ignore`` a first-class object","2024-06 (St. Louis)","|Complete|","19.0",""
7575
"`P2075R6 <https://wg21.link/P2075R6>`__","Philox as an extension of the C++ RNG engines","2024-06 (St. Louis)","","",""
76-
"`P2422R1 <https://wg21.link/P2422R1>`__","Remove ``nodiscard`` annotations from the standard library specification","2024-06 (St. Louis)","|Complete| [#note-P2422R1]_","19.0",""
76+
"`P2422R1 <https://wg21.link/P2422R1>`__","Remove ``nodiscard`` annotations from the standard library specification","2024-06 (St. Louis)","|Complete|","19.0","``nodiscard`` attributes were kept as a conforming extension"
7777
"`P2300R10 <https://wg21.link/P2300R10>`__","``std::execution``","2024-06 (St. Louis)","","",""
7878
"","","","","",""

‎libcxx/utils/synchronize_csv_status_files.py

+61-29
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
# ===----------------------------------------------------------------------===##
99

1010
from typing import List, Dict, Tuple, Optional
11+
import copy
1112
import csv
1213
import itertools
1314
import json
@@ -19,6 +20,25 @@
1920
# Number of the 'Libc++ Standards Conformance' project on Github
2021
LIBCXX_CONFORMANCE_PROJECT = '31'
2122

23+
def extract_between_markers(text: str, begin_marker: str, end_marker: str) -> Optional[str]:
24+
"""
25+
Given a string containing special markers, extract everything located beetwen these markers.
26+
27+
If the beginning marker is not found, None is returned. If the beginning marker is found but
28+
there is no end marker, it is an error (this is done to avoid silently accepting inputs that
29+
are erroneous by mistake).
30+
"""
31+
start = text.find(begin_marker)
32+
if start == -1:
33+
return None
34+
35+
start += len(begin_marker) # skip the marker itself
36+
end = text.find(end_marker, start)
37+
if end == -1:
38+
raise ArgumentError(f"Could not find end marker {end_marker} in: {text[start:]}")
39+
40+
return text[start:end]
41+
2242
class PaperStatus:
2343
TODO = 1
2444
IN_PROGRESS = 2
@@ -60,19 +80,16 @@ def from_csv_entry(entry: str):
6080
- '|Partial|'
6181
- '|Complete|'
6282
- '|Nothing To Do|'
63-
64-
Note that since we sometimes add additional notes after the status, we only check that the entry
65-
starts with the above patterns.
6683
"""
6784
if entry == '':
6885
return PaperStatus(PaperStatus.TODO, entry)
69-
elif entry.startswith('|In Progress|'):
86+
elif entry == '|In Progress|':
7087
return PaperStatus(PaperStatus.IN_PROGRESS, entry)
71-
elif entry.startswith('|Partial|'):
88+
elif entry == '|Partial|':
7289
return PaperStatus(PaperStatus.PARTIAL, entry)
73-
elif entry.startswith('|Complete|'):
90+
elif entry == '|Complete|':
7491
return PaperStatus(PaperStatus.DONE, entry)
75-
elif entry.startswith('|Nothing To Do|'):
92+
elif entry == '|Nothing To Do|':
7693
return PaperStatus(PaperStatus.NOTHING_TO_DO, entry)
7794
else:
7895
raise RuntimeError(f'Unexpected CSV entry for status: {entry}')
@@ -140,10 +157,10 @@ class PaperInfo:
140157
First version of LLVM in which this paper/issue was resolved.
141158
"""
142159

143-
labels: Optional[List[str]]
160+
notes: Optional[str]
144161
"""
145-
List of labels to associate to the issue in the status-tracking table. Supported labels are
146-
'format', 'ranges', 'spaceship', 'flat_containers', 'concurrency TS' and 'DR'.
162+
Optional plain text string representing notes to associate to the paper.
163+
This is used to populate the "Notes" column in the CSV status pages.
147164
"""
148165

149166
original: Optional[object]
@@ -156,14 +173,14 @@ def __init__(self, paper_number: str, paper_name: str,
156173
status: PaperStatus,
157174
meeting: Optional[str] = None,
158175
first_released_version: Optional[str] = None,
159-
labels: Optional[List[str]] = None,
176+
notes: Optional[str] = None,
160177
original: Optional[object] = None):
161178
self.paper_number = paper_number
162179
self.paper_name = paper_name
163180
self.status = status
164181
self.meeting = meeting
165182
self.first_released_version = first_released_version
166-
self.labels = labels
183+
self.notes = notes
167184
self.original = original
168185

169186
def for_printing(self) -> Tuple[str, str, str, str, str, str]:
@@ -173,7 +190,7 @@ def for_printing(self) -> Tuple[str, str, str, str, str, str]:
173190
self.meeting if self.meeting is not None else '',
174191
self.status.to_csv_entry(),
175192
self.first_released_version if self.first_released_version is not None else '',
176-
' '.join(f'|{label}|' for label in self.labels) if self.labels is not None else '',
193+
self.notes if self.notes is not None else '',
177194
)
178195

179196
def __repr__(self) -> str:
@@ -195,7 +212,7 @@ def from_csv_row(row: Tuple[str, str, str, str, str, str]):# -> PaperInfo:
195212
status=PaperStatus.from_csv_entry(row[3]),
196213
meeting=row[2] or None,
197214
first_released_version=row[4] or None,
198-
labels=[l.strip('|') for l in row[5].split(' ') if l] or None,
215+
notes=row[5] or None,
199216
original=row,
200217
)
201218

@@ -210,20 +227,45 @@ def from_github_issue(issue: Dict):# -> PaperInfo:
210227
raise RuntimeError(f"Issue doesn't have a title that we know how to parse: {issue}")
211228
paper = match.group(1)
212229

213-
# Handle labels
214-
valid_labels = ('format', 'ranges', 'spaceship', 'flat_containers', 'concurrency TS', 'DR')
215-
labels = [label for label in issue['labels'] if label in valid_labels]
230+
# Extract any notes from the Github issue and populate the RST notes with them
231+
issue_description = issue['content']['body']
232+
notes = extract_between_markers(issue_description, 'BEGIN-RST-NOTES', 'END-RST-NOTES')
233+
notes = notes.strip() if notes is not None else notes
216234

217235
return PaperInfo(
218236
paper_number=paper,
219237
paper_name=issue['title'],
220238
status=PaperStatus.from_github_issue(issue),
221239
meeting=issue.get('meeting Voted', None),
222240
first_released_version=None, # TODO
223-
labels=labels if labels else None,
241+
notes=notes,
224242
original=issue,
225243
)
226244

245+
def merge(paper: PaperInfo, gh: PaperInfo) -> PaperInfo:
246+
"""
247+
Merge a paper coming from a CSV row with a corresponding Github-tracked paper.
248+
249+
If the CSV row has a status that is "less advanced" than the Github issue, simply update the CSV
250+
row with the newer status. Otherwise, report an error if they have a different status because
251+
something must be wrong.
252+
253+
In case we don't update the CSV row's status, we still take any updated notes coming
254+
from the Github issue.
255+
"""
256+
if paper.status < gh.status:
257+
return gh
258+
elif paper.status != gh.status:
259+
print(f"We found a CSV row and a Github issue with different statuses:\nrow: {paper}\nGithub issue: {gh}")
260+
return paper
261+
else:
262+
# Retain the notes from the Github issue, if any
263+
if gh.notes is not None:
264+
cp = copy.deepcopy(paper)
265+
cp.notes = gh.notes
266+
return cp
267+
return paper
268+
227269
def load_csv(file: pathlib.Path) -> List[Tuple]:
228270
rows = []
229271
with open(file, newline='') as f:
@@ -275,17 +317,7 @@ def sync_csv(rows: List[Tuple], from_github: List[PaperInfo]) -> List[Tuple]:
275317
results.append(row)
276318
continue
277319

278-
gh = tracking[0]
279-
280-
# If the CSV row has a status that is "less advanced" than the Github issue, simply update the CSV
281-
# row with the newer status. Otherwise, report an error if they have a different status because
282-
# something must be wrong.
283-
if paper.status < gh.status:
284-
results.append(gh.for_printing())
285-
continue
286-
elif paper.status != gh.status:
287-
print(f"We found a CSV row and a Github issue with different statuses:\nrow: {row}\nGithub issue: {gh}")
288-
results.append(row)
320+
results.append(merge(paper, tracking[0]).for_printing())
289321

290322
return results
291323

0 commit comments

Comments
 (0)
Please sign in to comment.