[llvm-branch-commits] [libcxx] [libc++][docs] Convert doc files from reST to Markdown (PR #221513)
Reid Kleckner via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Mon Sep 7 14:12:38 PDT 2026
https://github.com/rnk updated https://github.com/llvm/llvm-project/pull/221513
>From 611dd15de01a46d06898e8631d21ee8a713686ea Mon Sep 17 00:00:00 2001
From: Reid Kleckner <rkleckner at nvidia.com>
Date: Sat, 5 Sep 2026 04:09:00 +0000
Subject: [PATCH 1/2] [libc++][docs] Convert documentation with rst2myst
---
libcxx/docs/ABIGuarantees.md | 221 ++-
libcxx/docs/AddingNewCIJobs.md | 61 +-
libcxx/docs/CodingGuidelines.md | 223 ++-
libcxx/docs/Contributing.md | 316 ++--
.../docs/Contributing/NewStandardProcedure.md | 39 +-
.../docs/Contributing/PostMeetingProcedure.md | 83 +-
libcxx/docs/Contributing/ReleaseProcedure.md | 48 +-
libcxx/docs/DesignDocs/ABIVersioning.md | 26 +-
libcxx/docs/DesignDocs/AtomicDesign.md | 1352 ++++++++---------
libcxx/docs/DesignDocs/CapturingConfigInfo.md | 65 +-
.../docs/DesignDocs/ExperimentalFeatures.md | 261 ++--
.../docs/DesignDocs/ExtendedCXX03Support.md | 51 +-
libcxx/docs/DesignDocs/FeatureTestMacros.md | 28 +-
libcxx/docs/DesignDocs/FileTimeType.md | 587 ++++---
libcxx/docs/DesignDocs/HeaderRemovalPolicy.md | 40 +-
libcxx/docs/DesignDocs/NoexceptPolicy.md | 10 +-
libcxx/docs/DesignDocs/PSTLIntegration.md | 23 +-
libcxx/docs/DesignDocs/ThreadingSupportAPI.md | 63 +-
libcxx/docs/DesignDocs/TimeZone.md | 90 +-
libcxx/docs/DesignDocs/UniquePtrTrivialAbi.md | 187 ++-
.../UnspecifiedBehaviorRandomization.md | 71 +-
libcxx/docs/DesignDocs/VisibilityMacros.md | 64 +-
libcxx/docs/DesignDocs/WindowsSupport.md | 20 +-
libcxx/docs/FeatureTestMacroTable.md | 21 +-
libcxx/docs/Hardening.md | 357 +++--
libcxx/docs/Helpers/ReleaseNotesTemplate.md | 63 +-
libcxx/docs/Helpers/Styles.md | 84 +-
libcxx/docs/ImplementationDefinedBehavior.md | 71 +-
libcxx/docs/Modules.md | 468 +++---
libcxx/docs/ReleaseNotes.md | 24 +-
libcxx/docs/ReleaseNotes/20.md | 233 ++-
libcxx/docs/ReleaseNotes/21.md | 201 ++-
libcxx/docs/ReleaseNotes/22.md | 203 ++-
libcxx/docs/ReleaseNotes/23.md | 176 +--
libcxx/docs/ReleaseNotes/24.md | 129 +-
libcxx/docs/Status/Cxx17.md | 40 +-
libcxx/docs/Status/Cxx20.md | 40 +-
libcxx/docs/Status/Cxx23.md | 40 +-
libcxx/docs/Status/Cxx26.md | 44 +-
libcxx/docs/Status/Cxx29.md | 44 +-
libcxx/docs/TestingLibcxx.md | 547 ++++---
libcxx/docs/UserDocumentation.md | 441 +++---
libcxx/docs/VendorDocumentation.md | 801 +++++-----
libcxx/docs/index.md | 297 ++--
44 files changed, 3986 insertions(+), 4267 deletions(-)
diff --git a/libcxx/docs/ABIGuarantees.md b/libcxx/docs/ABIGuarantees.md
index ee9d1296757c4..6e94a2159764e 100644
--- a/libcxx/docs/ABIGuarantees.md
+++ b/libcxx/docs/ABIGuarantees.md
@@ -1,8 +1,6 @@
-.. _ABIGuarantees:
+(abiguarantees)=
-=======================
-libc++'s ABI Guarantees
-=======================
+# libc++'s ABI Guarantees
libc++ provides multiple types of ABI guarantees. These include stability of the layout of structs, the linking of TUs
built against different versions and configurations of the library, and more. This document describes what guarantees
@@ -12,58 +10,57 @@ Note that all of the guarantees listed below come with an asterisk that there ma
worth it to break that guarantee. These breaks are communicated to vendors by CCing #libcxx-vendors on GitHub. If you
are a vendor, please ask to be added to that group to be notified about changes that potentially affect you.
-ABI flags
-=========
-All the ABI flags listed below can be added to the ``__config_site`` header by the vendor to opt in to an ABI breaking
+## ABI flags
+
+All the ABI flags listed below can be added to the `__config_site` header by the vendor to opt in to an ABI breaking
change. These flags should never be set by the user. When porting libc++ to a new platform, vendord should consider
which flags to enable, assuming that ABI stability is relevant to them. Please contact the libc++ team on Discord or
through other means to be able to make an informed decision on which flags make sense to enable, and to avoid enabling
-flags which may not be stable. Flags can be enabled via the ``LIBCXX_ABI_DEFINES`` CMake option.
-
+flags which may not be stable. Flags can be enabled via the `LIBCXX_ABI_DEFINES` CMake option.
-Stability of the Layout of Structs
-==================================
+## Stability of the Layout of Structs
The layout of any user-observable struct is kept stable across versions of the library and any user-facing options
-documented :ref:`here <libcxx-configuration-macros>`. There are a lot of structs that have internal names, but are none
+documented {ref}`here <libcxx-configuration-macros>`. There are a lot of structs that have internal names, but are none
the less observable by users; for example through public aliases to these types or because they affect the layout of
other types.
There are multiple ABI flags which affect the layout of certain structs:
-``_LIBCPP_ABI_ALTERNATE_STRING_LAYOUT``
----------------------------------------
-This changes the internal layout of ``basic_string`` to move the section that is used for the internal buffer to the
+### `_LIBCPP_ABI_ALTERNATE_STRING_LAYOUT`
+
+This changes the internal layout of `basic_string` to move the section that is used for the internal buffer to the
front, making it eight byte aligned instead of being unaligned, improving the performance of some operations
significantly.
-``_LIBCPP_ABI_NO_ITERATOR_BASES``
----------------------------------
-This removes the ``iterator`` base class from ``back_insert_iterator``, ``front_insert_iterator``, ``insert_iterator``,
-``istream_iterator``, ``ostream_iterator``, ``ostreambuf_iterator``, ``reverse_iterator``, and ``raw_storage_iterator``.
+### `_LIBCPP_ABI_NO_ITERATOR_BASES`
+
+This removes the `iterator` base class from `back_insert_iterator`, `front_insert_iterator`, `insert_iterator`,
+`istream_iterator`, `ostream_iterator`, `ostreambuf_iterator`, `reverse_iterator`, and `raw_storage_iterator`.
This doesn't directly affect the layout of these types in most cases, but may result in more padding being used when
-they are used in combination, for example ``reverse_iterator<reverse_iterator<T>>``.
+they are used in combination, for example `reverse_iterator<reverse_iterator<T>>`.
-``_LIBCPP_ABI_NO_REVERSE_ITERATOR_SECOND_MEMBER``
--------------------------------------------------
-This removes a second member in ``reverse_iterator`` that is unused after LWG2360.
+### `_LIBCPP_ABI_NO_REVERSE_ITERATOR_SECOND_MEMBER`
-``_LIBCPP_ABI_VARIANT_INDEX_TYPE_OPTIMIZATION``
--------------------------------------------------
-This changes the index type used inside ``variant`` to the smallest required type to reduce the datasize of variants in
+This removes a second member in `reverse_iterator` that is unused after LWG2360.
+
+### `_LIBCPP_ABI_VARIANT_INDEX_TYPE_OPTIMIZATION`
+
+This changes the index type used inside `variant` to the smallest required type to reduce the datasize of variants in
most cases.
-``_LIBCPP_ABI_OPTIMIZED_FUNCTION``
-----------------------------------
-This significantly restructures how ``function`` is written to provide better performance, but is currently not ABI
+### `_LIBCPP_ABI_OPTIMIZED_FUNCTION`
+
+This significantly restructures how `function` is written to provide better performance, but is currently not ABI
stable.
-``_LIBCPP_ABI_VECTOR_LAYOUT_SIZE_BASED``
-----------------------------------------
-Changes the layout of :cpp:type:`std::vector` from pointer-based to size-based.
+### `_LIBCPP_ABI_VECTOR_LAYOUT_SIZE_BASED`
-libc++ supports two different data layouts for :cpp:type:`std::vector`:
+Changes the layout of {cpp:type}`std::vector` from pointer-based to size-based.
+libc++ supports two different data layouts for {cpp:type}`std::vector`:
+
+```{eval-rst}
.. list-table::
:header-rows: 1
@@ -107,159 +104,155 @@ libc++ supports two different data layouts for :cpp:type:`std::vector`:
This layout is opt-in, and is incompatible with the pointer-based layout. It has the
potential for significant performance improvements, especially when combined with
:ref:`hardening`.
+```
+
+### `_LIBCPP_ABI_NO_RANDOM_DEVICE_COMPATIBILITY_LAYOUT`
-``_LIBCPP_ABI_NO_RANDOM_DEVICE_COMPATIBILITY_LAYOUT``
------------------------------------------------------
-This changes the layout of ``random_device`` to only holds state with an implementation that gets entropy from a file
-(see ``_LIBCPP_USING_DEV_RANDOM``). When switching from this implementation to another one on a platform that has
-already shipped ``random_device``, one needs to retain the same object layout to remain ABI compatible. This flag
+This changes the layout of `random_device` to only holds state with an implementation that gets entropy from a file
+(see `_LIBCPP_USING_DEV_RANDOM`). When switching from this implementation to another one on a platform that has
+already shipped `random_device`, one needs to retain the same object layout to remain ABI compatible. This flag
removes these workarounds for platforms that don't care about ABI compatibility.
-``_LIBCPP_ABI_NO_COMPRESSED_PAIR_PADDING``
-------------------------------------------
-This removes artificial padding from ``_LIBCPP_COMPRESSED_PAIR``.
+### `_LIBCPP_ABI_NO_COMPRESSED_PAIR_PADDING`
+
+This removes artificial padding from `_LIBCPP_COMPRESSED_PAIR`.
-These macros are used inside the associative and unordered containers, ``deque``, ``forward_list``, ``future``,
-``list``, ``basic_string``, ``function``, ``shared_ptr``, ``unique_ptr``, and ``vector`` to stay ABI compatible with the
-legacy ``__compressed_pair`` type. ``__compressed_pair`` had historically been used to reduce storage requirements in
-the case of empty types, but has been replaced by ``[[no_unique_address]]``. ``[[no_unique_address]]`` is significantly
+These macros are used inside the associative and unordered containers, `deque`, `forward_list`, `future`,
+`list`, `basic_string`, `function`, `shared_ptr`, `unique_ptr`, and `vector` to stay ABI compatible with the
+legacy `__compressed_pair` type. `__compressed_pair` had historically been used to reduce storage requirements in
+the case of empty types, but has been replaced by `[[no_unique_address]]`. `[[no_unique_address]]` is significantly
lighter in terms of compile time and debug information, and also improves the layout of structs further. However, to
keep ABI stability, the additional improvements in layout had to be reverted by introducing artificial padding. This
flag removes that artificial padding.
-``_LIBCPP_ABI_IOS_ALLOW_ARBITRARY_FILL_VALUE``
-----------------------------------------------
-``basic_ios`` uses ``WEOF`` to indicate that the fill value is uninitialized. However, on platforms where the size of
-``char_type`` is equal to or greater than the size of ``int_type`` and ``char_type`` is unsigned,
-``char_traits<char_type>::eq_int_type()`` cannot distinguish between ``WEOF`` and ``WCHAR_MAX``. This flag changes
-``basic_ios`` to instead track whether the fill value has been initialized using a separate boolean.
+### `_LIBCPP_ABI_IOS_ALLOW_ARBITRARY_FILL_VALUE`
+`basic_ios` uses `WEOF` to indicate that the fill value is uninitialized. However, on platforms where the size of
+`char_type` is equal to or greater than the size of `int_type` and `char_type` is unsigned,
+`char_traits<char_type>::eq_int_type()` cannot distinguish between `WEOF` and `WCHAR_MAX`. This flag changes
+`basic_ios` to instead track whether the fill value has been initialized using a separate boolean.
+
+## Linking TUs which have been compiled against different releases of libc++
-Linking TUs which have been compiled against different releases of libc++
-=========================================================================
libc++ supports linking TUs which have been compiled against different releases of libc++ by marking symbols with
hidden visibility and changing the mangling of header-only functions in every release.
+## Linking TUs which have been compiled with different flags affecting code gen
-Linking TUs which have been compiled with different flags affecting code gen
-============================================================================
There are a lot of compiler (and library) flags which change the code generated for functions. This includes flags like
-``-O1``, which are guaranteed by the compiler to not change the observable behaviour of a correct program, as well as
-flags like ``-fexceptions``, which **do** change the observable behaviour. libc++ allows linking of TUs which have been
+`-O1`, which are guaranteed by the compiler to not change the observable behaviour of a correct program, as well as
+flags like `-fexceptions`, which **do** change the observable behaviour. libc++ allows linking of TUs which have been
compiled with specific flags only and makes no guarantees for any of the flags not listed below.
The flags allowed (in any combination) are:
-- ``-f[no-]exceptions``
-- ``-D_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE{_FAST,_EXTENSIVE,_DEBUG,_NONE}``
+\- `-f[no-]exceptions`
+\- `-D_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE{_FAST,_EXTENSIVE,_DEBUG,_NONE}`
Note that this does not provide any guarantees about user-defined functions, but only that the libc++ functions linked
behave as the flags say.
+## Availability of symbols in the built library (both static and shared)
-Availability of symbols in the built library (both static and shared)
-=====================================================================
In general, libc++ does not make any guarantees about forwards-compatibility. That is, a TU compiled against new headers
may not work with an older library. Vendors who require such support can leverage availability markup. On the other
hand, backwards compatibility is generally guaranteed.
There are multiple ABI flags that change the symbols exported from the built library:
-``_LIBCPP_ABI_STRING_OPTIMIZED_EXTERNAL_INSTANTIATION``
--------------------------------------------------------
-This replaces the symbols that are exported for ``basic_string`` to avoid exporting functions which are likely to be
+### `_LIBCPP_ABI_STRING_OPTIMIZED_EXTERNAL_INSTANTIATION`
+
+This replaces the symbols that are exported for `basic_string` to avoid exporting functions which are likely to be
inlined as well as explicitly moving paths to the built library which are slow, improving fast-path inlining of multiple
functions. This flag is currently unstable.
+## Stability of the traits of a type
-Stability of the traits of a type
-=================================
Whether a particular trait of a type is kept stable depends heavily on the type in question and the trait. The most
important trait of a type to keep stable is the triviality for the purpose of calls, since that directly affects the
function call ABI. Which types are considered non-trivial for the purpose of calls is defined in the
-`Itanium ABI <https://itanium-cxx-abi.github.io/cxx-abi/abi.html#definitions>`_.
-``is_trivially_copyable`` should also be kept stable usually, since many programs depend on this trait for their own
+[Itanium ABI](https://itanium-cxx-abi.github.io/cxx-abi/abi.html#definitions).
+`is_trivially_copyable` should also be kept stable usually, since many programs depend on this trait for their own
layouting. This isn't as rigid as the previous requirement though.
There are multiple ABI flags that change traits of a struct:
-``_LIBCPP_ABI_ENABLE_UNIQUE_PTR_TRIVIAL_ABI``
----------------------------------------------
-This flag adds ``[[clang::trivial_abi]]`` to ``unique_ptr``, which makes it trivial for the purpose of calls.
+### `_LIBCPP_ABI_ENABLE_UNIQUE_PTR_TRIVIAL_ABI`
+
+This flag adds `[[clang::trivial_abi]]` to `unique_ptr`, which makes it trivial for the purpose of calls.
-``_LIBCPP_ABI_ENABLE_SHARED_PTR_TRIVIAL_ABI``
----------------------------------------------
-This flag adds ``[[clang::trivial_abi]]`` to ``shared_ptr``, which makes it trivial for the purpose of calls.
+### `_LIBCPP_ABI_ENABLE_SHARED_PTR_TRIVIAL_ABI`
-``_LIBCPP_ABI_TRIVIALLY_COPYABLE_BIT_ITERATOR``
------------------------------------------------
-This flag makes ``__bit_iterator`` (a.k.a. ``vector<bool>::iterator``) trivially copyable as well as trivial for the
+This flag adds `[[clang::trivial_abi]]` to `shared_ptr`, which makes it trivial for the purpose of calls.
+
+### `_LIBCPP_ABI_TRIVIALLY_COPYABLE_BIT_ITERATOR`
+
+This flag makes `__bit_iterator` (a.k.a. `vector<bool>::iterator`) trivially copyable as well as trivial for the
purpose of calls, since the copy constructor is made trivial.
-``_LIBCPP_ABI_USE_SMALL_DEQUE_BLOCK_SIZE``
-------------------------------------------
-This flag sets the default block size of ``deque`` to 512 bytes and the minimum number of elements per block to 4.
+### `_LIBCPP_ABI_USE_SMALL_DEQUE_BLOCK_SIZE`
+
+This flag sets the default block size of `deque` to 512 bytes and the minimum number of elements per block to 4.
+
+## Types that public aliases reference
-Types that public aliases reference
-===================================
There are a lot of aliases that reference types with library internal names. For example, containers contain an
-``iterator`` alias to a type with a library internal name. These have to always reference the same type, since the
+`iterator` alias to a type with a library internal name. These have to always reference the same type, since the
mangling of user-defined function overloads would change otherwise. A notable exception to this are the alias templates
to type traits. There doesn't seem to be anybody who relies on these names staying the same, so it is OK to change what
these aliases actually reference.
There are multiple ABI flags which change which type an alias references:
-``_LIBCPP_ABI_INCOMPLETE_TYPES_IN_DEQUE``
------------------------------------------
-This changes ``deque::iterator`` to avoid requiring complete types for ``deque``.
+### `_LIBCPP_ABI_INCOMPLETE_TYPES_IN_DEQUE`
+
+This changes `deque::iterator` to avoid requiring complete types for `deque`.
+
+### `_LIBCPP_ABI_FIX_UNORDERED_CONTAINER_SIZE_TYPE`
-``_LIBCPP_ABI_FIX_UNORDERED_CONTAINER_SIZE_TYPE``
--------------------------------------------------
-This changes the unordered container's ``size_types`` aliases.
+This changes the unordered container's `size_types` aliases.
-``_LIBCPP_ABI_USE_WRAP_ITER_IN_STD_ARRAY`` and ``_LIBCPP_ABI_USE_WRAP_ITER_IN_STD_STRING_VIEW``
------------------------------------------------------------------------------------------------
-This changes the ``iterator`` and ``const_iterator`` of ``array`` and ``string_view`` respectively to reference
-``__wrap_iter`` instead, which makes it less likely for users to depend on non-portable implementation details. This is
+### `_LIBCPP_ABI_USE_WRAP_ITER_IN_STD_ARRAY` and `_LIBCPP_ABI_USE_WRAP_ITER_IN_STD_STRING_VIEW`
+
+This changes the `iterator` and `const_iterator` of `array` and `string_view` respectively to reference
+`__wrap_iter` instead, which makes it less likely for users to depend on non-portable implementation details. This is
especially useful because enabling bounded iterators hardening requires code not to make these assumptions.
-``_LIBCPP_ABI_BOUNDED_ITERATORS``, ``_LIBCPP_ABI_BOUNDED_ITERATORS_IN_STRING``, ``_LIBCPP_ABI_BOUNDED_ITERATORS_IN_VECTOR``, ``_LIBCPP_ABI_BOUNDED_ITERATORS_IN_STD_ARRAY`` and ``_LIBCPP_ABI_BOUNDED_ITERATORS_IN_OPTIONAL``
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-These flags change the ``iterator`` member of various classes to reference hardened iterators instead. See the
-:ref:`hardening documentation <hardening>` for more details.
+### `_LIBCPP_ABI_BOUNDED_ITERATORS`, `_LIBCPP_ABI_BOUNDED_ITERATORS_IN_STRING`, `_LIBCPP_ABI_BOUNDED_ITERATORS_IN_VECTOR`, `_LIBCPP_ABI_BOUNDED_ITERATORS_IN_STD_ARRAY` and `_LIBCPP_ABI_BOUNDED_ITERATORS_IN_OPTIONAL`
+
+These flags change the `iterator` member of various classes to reference hardened iterators instead. See the
+{ref}`hardening documentation <hardening>` for more details.
+## Meaning of values
-Meaning of values
-=================
The meaning of specific values can usually not be changed, since programs compiled against older versions of the headers
may check for these values. These specific values don't have to be hard-coded, but can also depend on user input.
There are multiple ABI flags that change the meaning of particular values:
-``_LIBCPP_ABI_REGEX_CONSTANTS_NONZERO``
----------------------------------------
-This changes the value of ``regex_constants::syntax_option-type::ECMAScript`` to be standards-conforming.
+### `_LIBCPP_ABI_REGEX_CONSTANTS_NONZERO`
+
+This changes the value of `regex_constants::syntax_option-type::ECMAScript` to be standards-conforming.
-``_LIBCPP_ABI_FIX_CITYHASH_IMPLEMENTATION``
--------------------------------------------
-This flag fixes the implementation of CityHash used for ``hash<fundamental-type>``. The incorrect implementation of
+### `_LIBCPP_ABI_FIX_CITYHASH_IMPLEMENTATION`
+
+This flag fixes the implementation of CityHash used for `hash<fundamental-type>`. The incorrect implementation of
CityHash has the problem that it drops some bits on the floor. Fixing the implementation changes the hash of values,
resulting in an ABI break.
-``_LIBCPP_ABI_ATOMIC_WAIT_NATIVE_BY_SIZE``
-------------------------------------------
-This flag changes the implementation of ``atomic::wait()`` and ``atomic::notify_one()/notify_all()`` to use the
+### `_LIBCPP_ABI_ATOMIC_WAIT_NATIVE_BY_SIZE`
+
+This flag changes the implementation of `atomic::wait()` and `atomic::notify_one()/notify_all()` to use the
native atomic wait/notify operations on platforms that support them based on the size of the atomic type, instead
-of the type itself. This means for example that a type with ``sizeof(T) == 4`` on Linux that doesn't have padding
-bytes would be able to use the underlying platform's atomic wait primitive, which is otherwise only used for ``int32_t``.
+of the type itself. This means for example that a type with `sizeof(T) == 4` on Linux that doesn't have padding
+bytes would be able to use the underlying platform's atomic wait primitive, which is otherwise only used for `int32_t`.
Since the whole program must use the same implementation for correctness, changing this is an ABI break since libc++
supports linking against TUs that were compiled against older versions of the library.
+## inline namespaces
-inline namespaces
-=================
Inline namespaces which contain types that are observable by the user need to be kept the same, since they affect
-mangling. Almost all of libc++'s symbols are inside an inline namespace. By default that namespace is ``__1``, but can
+mangling. Almost all of libc++'s symbols are inside an inline namespace. By default that namespace is `__1`, but can
be changed by the vendor by setting `LIBCXX_ABI_NAMESPACE` during CMake configuration. There is also
-``_LIBCPP_ABI_NO_FILESYSTEM_INLINE_NAMESPACE`` to remove the ``__fs`` namespace from surrounding the ``filesystem``
+`_LIBCPP_ABI_NO_FILESYSTEM_INLINE_NAMESPACE` to remove the `__fs` namespace from surrounding the `filesystem`
namespace. This shortens the mangling of the filesystem symbols a bit.
+
diff --git a/libcxx/docs/AddingNewCIJobs.md b/libcxx/docs/AddingNewCIJobs.md
index 7a12728b98919..2e059a750b782 100644
--- a/libcxx/docs/AddingNewCIJobs.md
+++ b/libcxx/docs/AddingNewCIJobs.md
@@ -1,66 +1,62 @@
-.. _AddingNewCIJobs:
+(addingnewcijobs)=
-==================
-Adding New CI Jobs
-==================
+# Adding New CI Jobs
-.. contents::
- :local:
+```{contents}
+:local: true
+```
-Adding The Job
-==============
+## Adding The Job
libc++ uses Buildkite for running its CI. Setting up new CI jobs is easy, and
these jobs can run either on our existing infrastructure, or on your own.
If you need to run the job on your own machines, please follow the
-`Buildkite guide <https://buildkite.com/docs/agent/v3>`_ to setup your
+[Buildkite guide](https://buildkite.com/docs/agent/v3) to setup your
own agents. Make sure you tag your agents in a way that you'll be able
to recognize them when defining your job below. Finally, in order for the
agent to register itself to Buildkite, it will need a BuildKite Agent token.
Please contact a maintainer to get your token.
-Then, simply add a job to the Buildkite pipeline by editing ``libcxx/utils/ci/buildkite-pipeline.yml``.
+Then, simply add a job to the Buildkite pipeline by editing `libcxx/utils/ci/buildkite-pipeline.yml`.
Take a look at how the surrounding jobs are defined and do something similar.
An example of a job definition is:
-.. code-block:: yaml
-
- - label: "C++11"
- command: "libcxx/utils/ci/run-buildbot generic-cxx11"
- env:
- CC: clang
- CXX: clang++
- artifact_paths:
- - "**/test-results.xml"
- agents:
- queue: "libcxx-builders"
- os: "linux"
- retry:
- [...]
-
-If you create your own agents, put them in the ``libcxx-builders`` queue and
+```yaml
+- label: "C++11"
+ command: "libcxx/utils/ci/run-buildbot generic-cxx11"
+ env:
+ CC: clang
+ CXX: clang++
+ artifact_paths:
+ - "**/test-results.xml"
+ agents:
+ queue: "libcxx-builders"
+ os: "linux"
+ retry:
+ [...]
+```
+
+If you create your own agents, put them in the `libcxx-builders` queue and
use agent tags to allow targeting your agents from the Buildkite pipeline
config appropriately.
We try to keep the pipeline definition file as simple as possible, and to
-keep any script used for CI inside ``libcxx/utils/ci``. This ensures that
+keep any script used for CI inside `libcxx/utils/ci`. This ensures that
it's possible to reproduce CI issues locally with ease, understanding of
course that some setups may require access to special hardware that is not
available.
-Finally, add your contact info to ``libcxx/utils/ci/BOT_OWNERS.txt``. This will
+Finally, add your contact info to `libcxx/utils/ci/BOT_OWNERS.txt`. This will
be used to contact you when there are issues with the bot.
-Testing Your New Job
-====================
+## Testing Your New Job
Testing your new job is easy -- once your agent is set up (if any), just open
a code review and the libc++ CI pipeline will run, including any changes you
might have made to the pipeline definition itself.
-Service Level Agreement
-=======================
+## Service Level Agreement
To keep the libc++ CI useful for everyone, we aim for a quick turnaround time
for all CI jobs. This allows the overall pipeline to finish in a reasonable
@@ -70,3 +66,4 @@ order to avoid flaky failures, which reduce the value of CI for everyone.
We may be reluctant to add and support CI jobs that take a long time to finish
or that are too flaky.
+
diff --git a/libcxx/docs/CodingGuidelines.md b/libcxx/docs/CodingGuidelines.md
index d91e3f22f36b6..266ed0f291d04 100644
--- a/libcxx/docs/CodingGuidelines.md
+++ b/libcxx/docs/CodingGuidelines.md
@@ -1,227 +1,212 @@
-.. _CodingGuidelines:
+(codingguidelines)=
-========================
-libc++ Coding Guidelines
-========================
+# libc++ Coding Guidelines
-.. contents::
- :local:
+```{contents}
+:local: true
+```
-Use ``__ugly_names`` for implementation details
-===============================================
+## Use `__ugly_names` for implementation details
-Libc++ uses ``__ugly_names`` or ``_UglyNames`` for implementation details. These names are reserved for implementations,
-so users may not use them in their own applications. When using a name like ``T``, a user may have defined a macro that
-changes the meaning of ``T``. By using ``__ugly_names`` we avoid that problem.
+Libc++ uses `__ugly_names` or `_UglyNames` for implementation details. These names are reserved for implementations,
+so users may not use them in their own applications. When using a name like `T`, a user may have defined a macro that
+changes the meaning of `T`. By using `__ugly_names` we avoid that problem.
-This is partially enforced by the clang-tidy check ``readability-identifier-naming`` and
-``libcxx/test/libcxx/system_reserved_names.gen.py``.
+This is partially enforced by the clang-tidy check `readability-identifier-naming` and
+`libcxx/test/libcxx/system_reserved_names.gen.py`.
-Don't use argument-dependent lookup unless required by the standard
-===================================================================
+## Don't use argument-dependent lookup unless required by the standard
Unqualified function calls are susceptible to
-`argument-dependent lookup (ADL) <https://en.cppreference.com/w/cpp/language/adl>`_. This means calling
-``move(UserType)`` might not call ``std::move``. Therefore, function calls must use qualified names to avoid ADL. Some
-functions in the standard library `require ADL usage <http://eel.is/c++draft/contents#3>`_. Names of classes, variables,
+[argument-dependent lookup (ADL)](https://en.cppreference.com/w/cpp/language/adl). This means calling
+`move(UserType)` might not call `std::move`. Therefore, function calls must use qualified names to avoid ADL. Some
+functions in the standard library [require ADL usage](http://eel.is/c++draft/contents#3). Names of classes, variables,
concepts, and type aliases are not subject to ADL. They don't need to be qualified.
-Function overloading also applies to operators. Using ``&user_object`` may call a user-defined ``operator&``. Use
-``std::addressof`` instead. Similarly, to avoid invoking a user-defined ``operator,``, make sure to cast the result to
-``void`` when using the ``,`` or avoid it in the first place. For example:
+Function overloading also applies to operators. Using `&user_object` may call a user-defined `operator&`. Use
+`std::addressof` instead. Similarly, to avoid invoking a user-defined `operator,`, make sure to cast the result to
+`void` when using the `,` or avoid it in the first place. For example:
-.. code-block:: cpp
+```cpp
+for (; __first1 != __last1; ++__first1, (void)++__first2) {
+ ...
+}
+```
- for (; __first1 != __last1; ++__first1, (void)++__first2) {
- ...
- }
+This is mostly enforced by the clang-tidy check `libcpp-robust-against-adl`.
-This is mostly enforced by the clang-tidy check ``libcpp-robust-against-adl``.
-
-Avoid including public headers
-==============================
+## Avoid including public headers
libc++ uses implementation-detail headers for most code. These are in a directory that starts with two underscores
-(e.g. ``<__type_traits/decay.h>``). These detail headers are significantly smaller than their public counterparts.
+(e.g. `<__type_traits/decay.h>`). These detail headers are significantly smaller than their public counterparts.
This reduces the amount of code that is included in a single public header, which reduces compile times.
-Add ``_LIBCPP_HIDE_FROM_ABI`` unless you know better
-====================================================
+## Add `_LIBCPP_HIDE_FROM_ABI` unless you know better
-``_LIBCPP_HIDE_FROM_ABI`` should be on every function in the library unless there is a reason not to do so. The main
-reason not to add ``_LIBCPP_HIDE_FROM_ABI`` is if a function is exported from the libc++ built library. In that case the
-function should be marked with ``_LIBCPP_EXPORTED_FROM_ABI``. Virtual functions should be marked with
-``_LIBCPP_HIDE_FROM_ABI_VIRTUAL`` instead.
+`_LIBCPP_HIDE_FROM_ABI` should be on every function in the library unless there is a reason not to do so. The main
+reason not to add `_LIBCPP_HIDE_FROM_ABI` is if a function is exported from the libc++ built library. In that case the
+function should be marked with `_LIBCPP_EXPORTED_FROM_ABI`. Virtual functions should be marked with
+`_LIBCPP_HIDE_FROM_ABI_VIRTUAL` instead.
-This is mostly enforced by the clang-tidy checks ``libcpp-hide-from-abi`` and ``libcpp-avoid-abi-tag-on-virtual``.
+This is mostly enforced by the clang-tidy checks `libcpp-hide-from-abi` and `libcpp-avoid-abi-tag-on-virtual`.
-Define configuration macros to 0 or 1
-=====================================
+## Define configuration macros to 0 or 1
Macros should usually be defined in all configurations, instead of defining them when they're enabled and leaving them
undefined otherwise. For example, use
-.. code-block:: cpp
-
- #if SOMETHING
- # define _LIBCPP_SOMETHING_ENABLED 1
- #else
- # define _LIBCPP_SOMETHING_ENABLED 0
- #endif
-
-and then check for ``#if _LIBCPP_SOMETHING_ENABLED`` instead of
+```cpp
+#if SOMETHING
+# define _LIBCPP_SOMETHING_ENABLED 1
+#else
+# define _LIBCPP_SOMETHING_ENABLED 0
+#endif
+```
-.. code-block:: cpp
+and then check for `#if _LIBCPP_SOMETHING_ENABLED` instead of
- #if SOMETHING
- # define _LIBCPP_SOMETHING_ENABLED
- #endif
+```cpp
+#if SOMETHING
+# define _LIBCPP_SOMETHING_ENABLED
+#endif
+```
-and then checking for ``#ifdef _LIBCPP_SOMETHING_ENABLED``.
+and then checking for `#ifdef _LIBCPP_SOMETHING_ENABLED`.
-This makes it significantly easier to catch missing includes: Clang and GCC with ``-Wundef`` enabled will warn
-when using an undefined macro inside an ``#if`` statement. Some macros in libc++ don't use this style yet,
+This makes it significantly easier to catch missing includes: Clang and GCC with `-Wundef` enabled will warn
+when using an undefined macro inside an `#if` statement. Some macros in libc++ don't use this style yet,
so this guideline only applies when introducing a new macro.
-This is partially enforced by the clang-tidy check ``libcpp-internal-ftms``.
+This is partially enforced by the clang-tidy check `libcpp-internal-ftms`.
-Use ``_LIBCPP_STD_VER``
-=======================
+## Use `_LIBCPP_STD_VER`
-libc++ defines the macro ``_LIBCPP_STD_VER`` for the different libc++ dialects. This should be used instead of
-``__cplusplus``.
+libc++ defines the macro `_LIBCPP_STD_VER` for the different libc++ dialects. This should be used instead of
+`__cplusplus`.
-This is mostly enforced by the clang-tidy check ``libcpp-cpp-version-check``.
+This is mostly enforced by the clang-tidy check `libcpp-cpp-version-check`.
-Use ``__ugly__`` spellings of vendor attributes
-===============================================
+## Use `__ugly__` spellings of vendor attributes
-Vendor attributes should always be ``__uglified__`` to avoid naming clashes with user-defined macros. For gnu-style
-attributes this takes the form ``__attribute__((__foo__))``. C++11-style attributes look like ``[[_Clang::__foo__]]`` or
-``[[__gnu__::__foo__]]`` for Clang or GCC attributes respectively. Clang and GCC also support standard attributes in
-earlier language dialects than they were introduced. These should be spelled as ``[[__foo__]]``. MSVC currently doesn't
+Vendor attributes should always be `__uglified__` to avoid naming clashes with user-defined macros. For gnu-style
+attributes this takes the form `__attribute__((__foo__))`. C++11-style attributes look like `[[_Clang::__foo__]]` or
+`[[__gnu__::__foo__]]` for Clang or GCC attributes respectively. Clang and GCC also support standard attributes in
+earlier language dialects than they were introduced. These should be spelled as `[[__foo__]]`. MSVC currently doesn't
provide alternative spellings for their attributes, so these should be avoided if at all possible.
-This is enforced by the clang-tidy check ``libcpp-uglify-attributes``.
+This is enforced by the clang-tidy check `libcpp-uglify-attributes`.
-Use extensions if they simplify the code
-========================================
+## Use extensions if they simplify the code
libc++ only supports recent versions Clang and GCC, which allows us to make use of extensions in the code base if both
-compilers support them. Only features backported from future language versions should be used liberally throughout the
-library. For example, some of the most useful extensions are lambdas and ``if constexpr``, since they almost always
+compilers support them. Only features backported from future language versions should be used liberally throughout the
+library. For example, some of the most useful extensions are lambdas and `if constexpr`, since they almost always
significantly improve readability when used as intended.
libc++ supports the C++98/03 mode only with the Clang compiler. Clang provides many C++11 features in C++03, making it
possible to write a lot of code in a simpler way than if we were restricted to C++03 features. Some use of extensions is
even mandatory, since libc++ supports move semantics in C++03. Details on which features have been backported can be
found
-`here <https://clang.llvm.org/docs/LanguageExtensions.html#language-extensions-back-ported-to-previous-standards>`__.
+[here](https://clang.llvm.org/docs/LanguageExtensions.html#language-extensions-back-ported-to-previous-standards).
GCC is only supported from C++11 onwards. Unfortunately, GCC doesn't document which features are backported to older
language versions, so you just have to try whether GCC accepts the features you want to use.
-Use ``using`` aliases instead of ``typedef``
-============================================
+## Use `using` aliases instead of `typedef`
-``using`` aliases are generally easier to read and support templates. Some code in libc++ uses ``typedef`` for
+`using` aliases are generally easier to read and support templates. Some code in libc++ uses `typedef` for
historical reasons.
-Write SFINAE with ``requires`` clauses in C++20-only code
-=========================================================
+## Write SFINAE with `requires` clauses in C++20-only code
-``requires`` clauses can be significantly easier to read than ``enable_if`` and friends in some cases, since concepts
+`requires` clauses can be significantly easier to read than `enable_if` and friends in some cases, since concepts
subsume other concepts. This means that overloads based on traits can be written without negating more general cases.
They also show intent better.
-Write ``enable_if`` as ``enable_if_t<condition, int> = 0``
-==========================================================
+## Write `enable_if` as `enable_if_t<condition, int> = 0`
-The form ``enable_if_t<condition, int> = 0`` is the only one that works in every language mode and for overload sets
+The form `enable_if_t<condition, int> = 0` is the only one that works in every language mode and for overload sets
using the same template arguments otherwise. If the code must work in C++11 or C++03, the libc++-internal alias
-``__enable_if_t`` can be used instead.
+`__enable_if_t` can be used instead.
-Prefer alias templates over class templates
-===========================================
+## Prefer alias templates over class templates
Alias templates are much more lightweight than class templates, since they don't require new instantiations for
different types. If the only member of a class is an alias, like in type traits, alias templates should be used if
possible. They do force more eager evaluation though, which can be a problem in some cases.
-Apply ``[[nodiscard]]`` where relevant
-======================================
+## Apply `[[nodiscard]]` where relevant
-Libc++ adds ``[[nodiscard]]`` whenever relevant to catch potential bugs. The standards committee has decided to _not_
+Libc++ adds `[[nodiscard]]` whenever relevant to catch potential bugs. The standards committee has decided to \_not\_
have a recommended practice where to put them, so libc++ applies it whenever it makes sense to catch potential bugs.
-``[[nodiscard]]`` should be applied to functions
+`[[nodiscard]]` should be applied to functions
- where discarding the return value is most likely a correctness issue. For example a locking constructor in
- ``unique_lock``.
+ `unique_lock`.
- where discarding the return value likely points to the user wanting to do something different. For example
- ``vector::empty()``, which probably should have been ``vector::clear()``.
+ `vector::empty()`, which probably should have been `vector::clear()`.
This can help spotting bugs easily which otherwise may take a very long time to find.
-- which return a constant. For example ``numeric_limits::min()``.
-- which only observe a value. For example ``string::size()``.
+- which return a constant. For example `numeric_limits::min()`.
+
+- which only observe a value. For example `string::size()`.
Code that discards values from these kinds of functions is dead code. It can either be removed, or the programmer
meant to do something different.
-- where discarding the value is most likely a misuse of the function. For example ``std::find(first, last, val)``.
+- where discarding the value is most likely a misuse of the function. For example `std::find(first, last, val)`.
This protects programmers from assuming too much about how the internals of a function work, making code more robust
in the presence of future optimizations.
-``[[nodiscard]]`` should not be applied to functions if Clang already diagnoses unused results, for example:
-- conversion functions
-- equality operators
-- relational operators
+`[[nodiscard]]` should not be applied to functions if Clang already diagnoses unused results, for example:
+\- conversion functions
+\- equality operators
+\- relational operators
-Applications of ``[[nodiscard]]`` are code like any other code, so we aim to test them on public interfaces. This can be
-done with a ``.verify.cpp`` test. Many examples are available. Just look for tests with the suffix
-``.nodiscard.verify.cpp``.
+Applications of `[[nodiscard]]` are code like any other code, so we aim to test them on public interfaces. This can be
+done with a `.verify.cpp` test. Many examples are available. Just look for tests with the suffix
+`.nodiscard.verify.cpp`.
-Don't use public API names for symbols on the ABI boundary
-==========================================================
+## Don't use public API names for symbols on the ABI boundary
-Most functions in libc++ are defined in headers either as templates or as ``inline`` functions. However, we sometimes
+Most functions in libc++ are defined in headers either as templates or as `inline` functions. However, we sometimes
need or want to define functions in the built library. Symbols that are declared in the headers and defined in the
built library become part of the ABI of libc++, which must be preserved for backwards compatibility. This means that
we can't easily remove or rename such symbols except in special cases.
When adding a symbol to the built library, make sure not to use a public name directly. Instead, define a
-``_LIBCPP_HIDE_FROM_ABI`` function in the headers with the public name and have it call a private function in the built
+`_LIBCPP_HIDE_FROM_ABI` function in the headers with the public name and have it call a private function in the built
library. This approach makes it easier to make changes to libc++ like move something from the built library to the
-headers (which is sometimes required for ``constexpr`` support).
+headers (which is sometimes required for `constexpr` support).
-When defining a function at the ABI boundary, it can also be useful to consider which attributes (like ``[[gnu::pure]]``
-and ``[[clang::noescape]]``) can be added to the function to improve the compiler's ability to optimize.
+When defining a function at the ABI boundary, it can also be useful to consider which attributes (like `[[gnu::pure]]`
+and `[[clang::noescape]]`) can be added to the function to improve the compiler's ability to optimize.
-Library-internal type aliases should be annotated with ``_LIBCPP_NODEBUG``
-==========================================================================
+## Library-internal type aliases should be annotated with `_LIBCPP_NODEBUG`
Libc++ has lots of internal type aliases. Accumulated, these can result in significant amounts of debug information that
users generally don't care about, since users don't try to debug standard library facilities in most cases. For that
-reason, all library-internal type aliases that aren't function-local should be annotated with ``_LIBCPP_NODEBUG`` to
-prevent compilers from generating said debug information. Aliases inside type traits (i.e. aliases named ``type``)
+reason, all library-internal type aliases that aren't function-local should be annotated with `_LIBCPP_NODEBUG` to
+prevent compilers from generating said debug information. Aliases inside type traits (i.e. aliases named `type`)
should be annotated for the same reason.
-This is enforced by the clang-tidy check ``libcpp-nodebug-on-aliases``.
+This is enforced by the clang-tidy check `libcpp-nodebug-on-aliases`.
-Naming benchmarks
-=================
+## Naming benchmarks
Libc++ contains several benchmarks. It is helpful to observe some consistency when naming benchmarks since it makes it
easier to search for and filter benchmark names from various other tools like LNT. In particular, we name benchmarks
after the function they are measuring, with a few transformations to help filtering:
-- Constructors are named ``ctor`` to make the name independent on the container being benchmarked.
-- Copy and move operations use ``Self`` instead of the container type, again to make their name independent from the
+- Constructors are named `ctor` to make the name independent on the container being benchmarked.
+- Copy and move operations use `Self` instead of the container type, again to make their name independent from the
container being benchmarked.
When multiple benchmarks measure the same function under different circumstances, we add context as a parenthesis
-after the function signature. For example, ``std::vector<bool>::ctor(Self&&, const allocator_type&) (equal allocators)``
-would be the allocator-aware move constructor for ``std::vector<bool>`` in the case of equal allocators.
+after the function signature. For example, `std::vector<bool>::ctor(Self&&, const allocator_type&) (equal allocators)`
+would be the allocator-aware move constructor for `std::vector<bool>` in the case of equal allocators.
+
diff --git a/libcxx/docs/Contributing.md b/libcxx/docs/Contributing.md
index 11f803b75b837..e3bb5d5bb9ba7 100644
--- a/libcxx/docs/Contributing.md
+++ b/libcxx/docs/Contributing.md
@@ -1,148 +1,133 @@
-.. _ContributingToLibcxx:
+(contributingtolibcxx)=
-======================
-Contributing to libc++
-======================
+# Contributing to libc++
This file contains information useful when contributing to libc++. If this is your first time contributing,
-please also read `this document <https://www.llvm.org/docs/Contributing.html>`__ on general rules for
+please also read [this document](https://www.llvm.org/docs/Contributing.html) on general rules for
contributing to LLVM.
-If you plan on contributing to libc++, it can be useful to join the ``#libcxx`` channel
-on `LLVM's Discord server <https://discord.gg/jzUbyP26tQ>`__.
+If you plan on contributing to libc++, it can be useful to join the `#libcxx` channel
+on [LLVM's Discord server](https://discord.gg/jzUbyP26tQ).
-Looking for pre-existing pull requests
-======================================
+## Looking for pre-existing pull requests
Before you start working on any feature, please take a look at the open libc++ pull
requests to avoid duplicating someone else's work. You can do that on GitHub by
-filtering pull requests `tagged with libc++ <https://github.com/llvm/llvm-project/pulls?q=is%3Apr+is%3Aopen+label%3Alibc%2B%2B>`__.
+filtering pull requests [tagged with libc++](https://github.com/llvm/llvm-project/pulls?q=is%3Apr+is%3Aopen+label%3Alibc%2B%2B).
If you see that your feature is already being worked on, please consider chiming in
and helping review the code instead of duplicating work!
-RFCs for significant user-affecting changes
-===========================================
+## RFCs for significant user-affecting changes
Before you start working on a change that can have significant impact on users of the library,
-please consider creating a RFC on the `libc++ forum <https://discourse.llvm.org/c/runtimes/libcxx>`_.
+please consider creating a RFC on the [libc++ forum](https://discourse.llvm.org/c/runtimes/libcxx).
This will ensure that you work in a direction that the project endorses and will ease reviewing your
contribution as directional questions can be raised early. Including a WIP patch is not mandatory,
but it can be useful to ground the discussion in something concrete.
-Writing tests and running the test suite
-========================================
+## Writing tests and running the test suite
Every change in libc++ must come with appropriate tests. Libc++ has an extensive test suite that
should be run locally by developers before submitting patches and is also run as part of our CI
-infrastructure. The documentation about writing tests and running them is :ref:`here <testing>`.
+infrastructure. The documentation about writing tests and running them is {ref}`here <testing>`.
-Coding Guidelines
-=================
+## Coding Guidelines
-libc++'s coding guidelines are documented :ref:`here <CodingGuidelines>`.
+libc++'s coding guidelines are documented {ref}`here <CodingGuidelines>`.
-Procedures for recurring tasks
-==============================
+## Procedures for recurring tasks
-* :ref:`After a WG21 meeting <PostMeetingProcedure>`
-* :ref:`Around a LLVM release <ReleaseProcedure>`
-* :ref:`When a new Standard is introduced <NewStandardProcedure>`
+- {ref}`After a WG21 meeting <PostMeetingProcedure>`
+- {ref}`Around a LLVM release <ReleaseProcedure>`
+- {ref}`When a new Standard is introduced <NewStandardProcedure>`
-Resources
-=========
+## Resources
-Libc++ specific
----------------
+### Libc++ specific
-- ``libcxx/include/__config`` -- this file contains the commonly used
+- `libcxx/include/__config` -- this file contains the commonly used
macros in libc++. Libc++ supports all C++ language versions. Newer versions
- of the Standard add new features. For example, making functions ``constexpr``
- in C++20 is done by using ``_LIBCPP_CONSTEXPR_SINCE_CXX20``. This means the
- function is ``constexpr`` in C++20 and later. The Standard does not allow
+ of the Standard add new features. For example, making functions `constexpr`
+ in C++20 is done by using `_LIBCPP_CONSTEXPR_SINCE_CXX20`. This means the
+ function is `constexpr` in C++20 and later. The Standard does not allow
making this available in C++17 or earlier, so we use a macro to implement
this requirement.
-- ``libcxx/test/support/test_macros.h`` -- similar to the above, but for the
+- `libcxx/test/support/test_macros.h` -- similar to the above, but for the
test suite.
-
-ISO C++ Standard
-----------------
+### ISO C++ Standard
Libc++ implements the library part of the ISO C++ standard. The official
publication must be bought from ISO or your national body. This is not
needed to work on libc++, there are other free resources available.
-- The `LaTeX sources <https://github.com/cplusplus/draft>`_ used to
+- The [LaTeX sources](https://github.com/cplusplus/draft) used to
create the official C++ standard. This can be used to create your own
unofficial build of the standard.
-
-- An `HTML rendered version of the draft <https://eel.is/c++draft/>`_ is
+- An [HTML rendered version of the draft](https://eel.is/c++draft/) is
available. This is the most commonly used place to look for the
wording of the standard.
-
-- An `alternative <https://github.com/timsong-cpp/cppwp>`_ is available.
+- An [alternative](https://github.com/timsong-cpp/cppwp) is available.
This link has both recent and historic versions of the standard.
-
- When implementing features, there are
- `general requirements <https://eel.is/c++draft/#library>`_.
+ [general requirements](https://eel.is/c++draft/#library).
Most papers use this
- `jargon <http://eel.is/c++draft/structure#specifications>`_
+ [jargon](http://eel.is/c++draft/structure#specifications)
to describe how library functions work.
-
-- The `WG21 redirect service <https://wg21.link/>`_ is a tool to quickly locate
+- The [WG21 redirect service](https://wg21.link/) is a tool to quickly locate
papers, issues, and wording in the standard.
-
-- The `paper trail <https://github.com/cplusplus/papers/issues>`_ of
+- The [paper trail](https://github.com/cplusplus/papers/issues) of
papers is publicly available, including the polls taken. It
contains links to the minutes of paper's discussion. Per ISO rules,
these minutes are only accessible by members of the C++ committee.
-
-- `Feature-Test Macros and Policies
- <https://isocpp.org/std/standing-documents/sd-6-sg10-feature-test-recommendations>`_
+- [Feature-Test Macros and Policies](https://isocpp.org/std/standing-documents/sd-6-sg10-feature-test-recommendations)
contains information about feature-test macros in C++.
It contains a list with all feature-test macros, their versions, and the paper
that introduced them.
-
-- `cppreference <https://en.cppreference.com/w/>`_ is a good resource
+- [cppreference](https://en.cppreference.com/w/) is a good resource
for the usage of C++ library and language features. It's easier to
read than the C++ Standard, but it lacks details needed to properly implement
library features.
-
-Pre-commit check list
-=====================
+## Pre-commit check list
Before committing or creating a review, please go through this check-list to make
sure you don't forget anything:
-- Do you have :ref:`tests <testing>` for every public class and/or function you're adding or modifying?
+- Do you have {ref}`tests <testing>` for every public class and/or function you're adding or modifying?
+
- Did you update the synopsis of the relevant headers?
-- Did you update the relevant files to track implementation status (in ``docs/Status/``)?
-- Did you mark all functions and type declarations with the :ref:`proper visibility macro <visibility-macros>`?
-- Did you add all new named declarations to the ``std`` module?
+
+- Did you update the relevant files to track implementation status (in `docs/Status/`)?
+
+- Did you mark all functions and type declarations with the {ref}`proper visibility macro <visibility-macros>`?
+
+- Did you add all new named declarations to the `std` module?
+
- If you added a header:
- - Did you add it to ``include/module.modulemap.in``?
- - Did you add it to ``include/CMakeLists.txt``?
- - If it's a public header, did you update ``utils/libcxx/header_information.py``?
+ - Did you add it to `include/module.modulemap.in`?
+ - Did you add it to `include/CMakeLists.txt`?
+ - If it's a public header, did you update `utils/libcxx/header_information.py`?
+
+- Did you add the relevant feature test macro(s) for your feature? Did you update the `generate_feature_test_macro_components.py` script with it?
+
+- Did you run the `libcxx-generate-files` target and verify its output?
-- Did you add the relevant feature test macro(s) for your feature? Did you update the ``generate_feature_test_macro_components.py`` script with it?
-- Did you run the ``libcxx-generate-files`` target and verify its output?
-- If needed, did you add ``_LIBCPP_PUSH_MACROS`` and ``_LIBCPP_POP_MACROS`` to the relevant headers?
+- If needed, did you add `_LIBCPP_PUSH_MACROS` and `_LIBCPP_POP_MACROS` to the relevant headers?
-The review process
-==================
+## The review process
After uploading your patch, you should see that the "libc++" review group is automatically
added as a reviewer for your patch. Once the group is marked as having approved your patch,
you can commit it. However, if you get an approval very quickly for a significant patch,
please try to wait a couple of business days before committing to give the opportunity for
other reviewers to chime in. If you need someone else to commit the patch for you, please
-mention it and provide your ``Name <email at domain>`` for us to attribute the commit properly.
+mention it and provide your `Name <email at domain>` for us to attribute the commit properly.
Note that the rule for accepting as the "libc++" review group is to wait for two members
of the group to have approved the patch, excluding the patch author. This is not a hard
-rule -- for very simple patches, use your judgement. The `"libc++" review group <https://reviews.llvm.org/project/members/64/>`__
+rule -- for very simple patches, use your judgement. The ["libc++" review group](https://reviews.llvm.org/project/members/64/)
consists of frequent libc++ contributors with a good understanding of the project's
guidelines -- if you would like to be added to it, please reach out on Discord.
@@ -157,178 +142,183 @@ Some tips:
patches to implement one feature if the feature can be split into
self-contained sub-tasks.
-Exporting new symbols from the library
-======================================
+## Exporting new symbols from the library
-When exporting new symbols from libc++, you must update the ABI lists located in ``lib/abi``.
-To test whether the lists are up-to-date, please run the target ``check-cxx-abilist``.
-To regenerate the lists, use the target ``generate-cxx-abilist``.
+When exporting new symbols from libc++, you must update the ABI lists located in `lib/abi`.
+To test whether the lists are up-to-date, please run the target `check-cxx-abilist`.
+To regenerate the lists, use the target `generate-cxx-abilist`.
The ABI lists must be updated for all supported platforms; currently Linux and
-Apple. If you don't have access to one of these platforms, you can download an
+Apple. If you don't have access to one of these platforms, you can download an
updated list from the failed build at
-`Buildkite <https://buildkite.com/llvm-project/libcxx-ci>`__.
-Look for the failed build and select the ``artifacts`` tab. There, download the
+[Buildkite](https://buildkite.com/llvm-project/libcxx-ci).
+Look for the failed build and select the `artifacts` tab. There, download the
abilist for the platform, e.g.:
-* C++<version>.
-* macOS X86_64 and macOS arm64 for the Apple platform.
+- C++\<version>.
+- macOS X86_64 and macOS arm64 for the Apple platform.
+## Pre-commit CI
-Pre-commit CI
-=============
+### Introduction
-Introduction
-------------
-
-Unlike most parts of the LLVM project, libc++ uses a pre-commit CI [#]_. Some of
-this CI is hosted on `Buildkite <https://buildkite.com/llvm-project/libcxx-ci>`__,
+Unlike most parts of the LLVM project, libc++ uses a pre-commit CI [^footnote-1]. Some of
+this CI is hosted on [Buildkite](https://buildkite.com/llvm-project/libcxx-ci),
but some has migrated to the LLVM CI infrastructure. The build results are
visible in the review on GitHub. Please make sure the CI is green before
committing a patch.
-The CI tests libc++ for all :ref:`supported platforms <SupportedPlatforms>`.
+The CI tests libc++ for all {ref}`supported platforms <SupportedPlatforms>`.
The build is started for every commit added to a Pull Request. A complete CI
run takes approximately one hour. To reduce the load:
-* The build is cancelled when a new commit is pushed to a PR that is already running CI.
-* The build is done in several stages and cancelled when a stage fails.
+- The build is cancelled when a new commit is pushed to a PR that is already running CI.
+- The build is done in several stages and cancelled when a stage fails.
Typically, the libc++ jobs use a Ubuntu Docker image. This image contains
-recent `nightly builds <https://apt.llvm.org>`__ of all supported versions of
-Clang and the current version of the ``main`` branch. These versions of Clang
+recent [nightly builds](https://apt.llvm.org) of all supported versions of
+Clang and the current version of the `main` branch. These versions of Clang
are used to build libc++ and execute its tests.
Unless specified otherwise, the configurations:
-* use a nightly build of the ``main`` branch of Clang,
-* execute the tests using the language C++<latest>. This is the version
+- use a nightly build of the `main` branch of Clang,
+- execute the tests using the language C++\<latest>. This is the version
"developed" by the C++ committee.
-.. note:: Updating the Clang nightly builds in the Docker image is a manual
- process and is done at an irregular interval on purpose. When you need to
- have the latest nightly build to test recent Clang changes, ask in the
- ``#libcxx`` channel on `LLVM's Discord server
- <https://discord.gg/jzUbyP26tQ>`__.
+:::{note}
+Updating the Clang nightly builds in the Docker image is a manual
+process and is done at an irregular interval on purpose. When you need to
+have the latest nightly build to test recent Clang changes, ask in the
+`#libcxx` channel on [LLVM's Discord server](https://discord.gg/jzUbyP26tQ).
+:::
-.. [#] There's `LLVM Dev Meeting talk <https://www.youtube.com/watch?v=B7gB6van7Bw>`__
- explaining the benefits of libc++'s pre-commit CI.
+[^footnote-1]: There's [LLVM Dev Meeting talk](https://www.youtube.com/watch?v=B7gB6van7Bw)
+ explaining the benefits of libc++'s pre-commit CI.
-Builds
-------
+### Builds
-Below is a short description of the most interesting CI builds [#]_:
+Below is a short description of the most interesting CI builds [^footnote-2]:
-* ``Format`` runs ``clang-format`` and uploads its output as an artifact. At the
+- `Format` runs `clang-format` and uploads its output as an artifact. At the
moment this build is a soft error and doesn't fail the build.
-* ``Generated output`` runs the ``libcxx-generate-files`` build target and
+
+- `Generated output` runs the `libcxx-generate-files` build target and
tests for non-ASCII characters in libcxx. Some files are excluded since they
use Unicode, mainly tests. The output of these commands are uploaded as
artifact.
-* ``Documentation`` builds the documentation. (This is done early in the build
+
+- `Documentation` builds the documentation. (This is done early in the build
process since it is cheap to run.)
-* ``C++<version>`` these build steps test the various C++ versions, making sure all
+
+- `C++<version>` these build steps test the various C++ versions, making sure all
C++ language versions work with the changes made.
-* ``Clang <version>`` these build steps test whether the changes work with all
+
+- `Clang <version>` these build steps test whether the changes work with all
supported Clang versions.
-* ``Booststrapping build`` builds Clang using the revision of the patch and
+
+- `Booststrapping build` builds Clang using the revision of the patch and
uses that Clang version to build and test libc++. This validates the current
Clang and lib++ are compatible.
When a crash occurs in this build, the crash reproducer is available as an
artifact.
-* ``Modular build`` tests libc++ using Clang modules [#]_.
-* ``GCC <version>`` tests libc++ with the latest stable GCC version. Only C++11
+- `Modular build` tests libc++ using Clang modules [^footnote-3].
+
+- `GCC <version>` tests libc++ with the latest stable GCC version. Only C++11
and the latest C++ version are tested.
-* ``Santitizers`` tests libc++ using the Clang sanitizers.
-* ``Parts disabled`` tests libc++ with certain libc++ features disabled.
-* ``Windows`` tests libc++ using MinGW and clang-cl.
-* ``Apple`` tests libc++ on macOS.
-* ``ARM`` tests libc++ on various Linux ARM platforms.
-* ``AIX`` tests libc++ on AIX.
-.. [#] Not all steps are listed: steps are added and removed when the need arises.
-.. [#] Clang modules are not the same as C++20's modules.
+- `Santitizers` tests libc++ using the Clang sanitizers.
+
+- `Parts disabled` tests libc++ with certain libc++ features disabled.
-Infrastructure
---------------
+- `Windows` tests libc++ using MinGW and clang-cl.
+
+- `Apple` tests libc++ on macOS.
+
+- `ARM` tests libc++ on various Linux ARM platforms.
+
+- `AIX` tests libc++ on AIX.
+
+[^footnote-2]: Not all steps are listed: steps are added and removed when the need arises.
+
+[^footnote-3]: Clang modules are not the same as C++20's modules.
+
+### Infrastructure
The files for the CI infrastructure are split between the llvm-project
and the llvm-zorg repositories. All files of the CI infrastructure in
-the llvm-project are in the directory ``libcxx/utils/ci``. Note that
+the llvm-project are in the directory `libcxx/utils/ci`. Note that
quite a bit of this infrastructure is heavily Linux focused. This is
the platform used by most of libc++'s Buildkite runners and
developers.
-Dockerfile/Container Images
-~~~~~~~~~~~~~~~~~~~~~~~~~~~
+#### Dockerfile/Container Images
Contains the Docker image for the Ubuntu CI. Because the same Docker image is
-used for the ``main`` and ``release`` branch, it should contain no hard-coded
+used for the `main` and `release` branch, it should contain no hard-coded
versions. It contains the used versions of Clang, various clang-tools,
GCC, and CMake.
-.. note:: This image is pulled from Docker hub and not rebuild when changing
- the Dockerfile.
+:::{note}
+This image is pulled from Docker hub and not rebuild when changing
+the Dockerfile.
+:::
-Updating the CI testing container images
-----------------------------------------
+### Updating the CI testing container images
The libcxx linux premerge testing can run on one of three sets of runner
-groups. The three runner group names are ``llvm-premerge-libcxx-runners``,
-``llvm-premerge-libcxx-release-runners`` and ``llvm-premerge-libcxx-next-runners``.
+groups. The three runner group names are `llvm-premerge-libcxx-runners`,
+`llvm-premerge-libcxx-release-runners` and `llvm-premerge-libcxx-next-runners`.
The runner set currently in use is controlled by the contents of
-https://github.com/llvm/llvm-project/blob/main/.github/workflows/libcxx-pr-conformance-tests.yaml.
-By default, it uses ``llvm-premerge-libcxx-runners``. To switch to one of the
-other runner sets, just replace all uses of ``llvm-premerge-libcxx-runners`` in
+<https://github.com/llvm/llvm-project/blob/main/.github/workflows/libcxx-pr-conformance-tests.yaml>.
+By default, it uses `llvm-premerge-libcxx-runners`. To switch to one of the
+other runner sets, just replace all uses of `llvm-premerge-libcxx-runners` in
the yaml file with the desired runner set.
The container image used by these three runner sets is controlled by the contents
-of the corresponding text files in ``libcxx/utils/ci/images``. The content of these
-files is read by the `Terraform configuration in llvm-zorg
-<https://github.com/llvm/llvm-zorg/blob/main/premerge/premerge_resources/main.tf>`__.
+of the corresponding text files in `libcxx/utils/ci/images`. The content of these
+files is read by the [Terraform configuration in llvm-zorg](https://github.com/llvm/llvm-zorg/blob/main/premerge/premerge_resources/main.tf).
When updating the container image, you can either update just the runner binary (the part
that connects to Github), or you can update everything (tools, etc.). To update the runner
-binary, bump the value of ``GITHUB_RUNNER_VERSION`` in ``libcxx/utils/ci/docker/docker-compose.yml``.
-To update all of the tools, bump ``BASE_IMAGE_VERSION`` to a newer version of the ``libcxx-linux-builder-base``
-image. You can see all versions of that image at https://github.com/llvm/llvm-project/pkgs/container/libcxx-linux-builder-base.
+binary, bump the value of `GITHUB_RUNNER_VERSION` in `libcxx/utils/ci/docker/docker-compose.yml`.
+To update all of the tools, bump `BASE_IMAGE_VERSION` to a newer version of the `libcxx-linux-builder-base`
+image. You can see all versions of that image at <https://github.com/llvm/llvm-project/pkgs/container/libcxx-linux-builder-base>.
-On push to ``main``, a new version of both the ``libcxx-linux-builder`` and the ``libcxx-android-builder``
-images will be built and pushed to https://github.com/llvm/llvm-project/packages.
+On push to `main`, a new version of both the `libcxx-linux-builder` and the `libcxx-android-builder`
+images will be built and pushed to <https://github.com/llvm/llvm-project/packages>.
You can then update the image used by the actual runners by changing the image encoded in
-``libcxx/utils/ci/images`` and asking an LLVM premerge maintainer (a Google employee) to
+`libcxx/utils/ci/images` and asking an LLVM premerge maintainer (a Google employee) to
actually deploy the changes to the GKE cluster via Terraform.
-Monitoring premerge testing performance
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+#### Monitoring premerge testing performance
The llvm-premerge-libcxx runners mentioned above collect metrics regarding the
time the tests spend queued up before they start running and also the time it
takes the tests to actually complete running. These metrics are collected and
aggregated (based on stage and PR), and the results can be seen at the
-`Libc++ Premerge Testing dashboard
-<https://llvm.grafana.net/public-dashboards/0bd453e8b3034733a1b0ff8c7728086d>`__
+[Libc++ Premerge Testing dashboard](https://llvm.grafana.net/public-dashboards/0bd453e8b3034733a1b0ff8c7728086d)
.
-run-buildbot-container
-~~~~~~~~~~~~~~~~~~~~~~
+#### run-buildbot-container
Helper script that pulls and runs the Docker image. This image mounts the LLVM
-monorepo at ``/llvm``. This can be used to test with compilers not available on
+monorepo at `/llvm`. This can be used to test with compilers not available on
your system.
-run-buildbot
-~~~~~~~~~~~~
+#### run-buildbot
This is the script executed by the CI runners. This script can be executed
-locally or inside ``run-buildbot-container``. The script must be called with
-the target to test. For example, ``run-buildbot generic-cxx20`` will build
+locally or inside `run-buildbot-container`. The script must be called with
+the target to test. For example, `run-buildbot generic-cxx20` will build
libc++ and test it using C++20.
-.. warning:: This script will overwrite the directory ``<llvm-root>/build/XX``
- where ``XX`` is the target of ``run-buildbot``.
+:::{warning}
+This script will overwrite the directory `<llvm-root>/build/XX`
+where `XX` is the target of `run-buildbot`.
+:::
This script contains as little version information as possible. This makes it
easy to use the script with a different compiler. This allows testing a
@@ -336,14 +326,14 @@ combination not in the libc++ CI. It can be used to add a new (temporary)
job to the CI. For example, testing the C++17 build with Clang-14 can be done
like:
-.. code-block:: bash
+```bash
+CC=clang-14 CXX=clang++-14 run-buildbot generic-cxx17
+```
- CC=clang-14 CXX=clang++-14 run-buildbot generic-cxx17
-
-buildkite-pipeline.yml
-~~~~~~~~~~~~~~~~~~~~~~
+#### buildkite-pipeline.yml
Contains the jobs executed in the CI. This file contains the version
information of the jobs being executed. Since this script differs between the
-``main`` and ``release`` branch, both branches can use different compiler
+`main` and `release` branch, both branches can use different compiler
versions.
+
diff --git a/libcxx/docs/Contributing/NewStandardProcedure.md b/libcxx/docs/Contributing/NewStandardProcedure.md
index 3ba170d50842f..16f8c5432fbfa 100644
--- a/libcxx/docs/Contributing/NewStandardProcedure.md
+++ b/libcxx/docs/Contributing/NewStandardProcedure.md
@@ -1,8 +1,6 @@
-.. _NewStandardProcedure:
+(newstandardprocedure)=
-==========================
-New standard procedure
-==========================
+# New standard procedure
Roughly every three years, WG21 finishes a version of the C++ standard and starts
working on the next one. This page describes the procedure that libc++ developers
@@ -11,23 +9,28 @@ Since introducing a new Standard does not happen often, this document may not be
fully exhaustive and is meant as a starting point. Keep it up-to-date when drift
is noticed.
-* Create status pages for tracking conformance of C++ZZ (``CxxZZIssues.csv``, ``CxxZZPapers.csv`` and related).
-* Create the associated views in the `libc++ Conformance project <https://github.com/orgs/llvm/projects/31>`__.
-* CI updates
+- Create status pages for tracking conformance of C++ZZ (`CxxZZIssues.csv`, `CxxZZPapers.csv` and related).
- * Add a new job testing C++ZZ
- * Move jobs that specify the previous standard over to C++ZZ (except jobs which intend to test older
+- Create the associated views in the [libc++ Conformance project](https://github.com/orgs/llvm/projects/31).
+
+- CI updates
+
+ - Add a new job testing C++ZZ
+ - Move jobs that specify the previous standard over to C++ZZ (except jobs which intend to test older
standard specifically)
-* Teach the test suite about C++ZZ (for example ``--param std=c++zz`` in the ``Lit`` configuration)
-* Add files to track the transitive includes for C++ZZ
-* Add a new version for ``_LIBCPP_STD_VER`` and ``TEST_STD_VER`` for the test suite
+- Teach the test suite about C++ZZ (for example `--param std=c++zz` in the `Lit` configuration)
+
+- Add files to track the transitive includes for C++ZZ
+
+- Add a new version for `_LIBCPP_STD_VER` and `TEST_STD_VER` for the test suite
+
+ - Note that we don't add various versioned macros until we need them (e.g. `_LIBCPP_CONSTEXPR_SINCE_CXXZZ`)
- * Note that we don't add various versioned macros until we need them (e.g. ``_LIBCPP_CONSTEXPR_SINCE_CXXZZ``)
+- Feature-test macros:
-* Feature-test macros:
+ - Update the FTM generation script to account for C++ZZ
+ - Add any missing FTMs for the new standard version in the FTM generation script
+ - Regenerate the FTM files
+ - Update the tests for the FTM generation script itself
- * Update the FTM generation script to account for C++ZZ
- * Add any missing FTMs for the new standard version in the FTM generation script
- * Regenerate the FTM files
- * Update the tests for the FTM generation script itself
diff --git a/libcxx/docs/Contributing/PostMeetingProcedure.md b/libcxx/docs/Contributing/PostMeetingProcedure.md
index a7acaa1c6a4c0..d3b1fba0d026e 100644
--- a/libcxx/docs/Contributing/PostMeetingProcedure.md
+++ b/libcxx/docs/Contributing/PostMeetingProcedure.md
@@ -1,8 +1,6 @@
-.. _PostMeetingProcedure:
+(postmeetingprocedure)=
-===========================
-Post-meeting procedure
-===========================
+# Post-meeting procedure
The C++ standards committee (WG21) meets several times a year. Each plenary
session adopts new papers and Library Working Group (LWG) issues that libc++
@@ -10,26 +8,23 @@ needs to track. This page describes the procedure that libc++ developers must
follow after each WG21 plenary meeting to keep the conformance trackers in
sync with what the committee voted in.
-The tracker files
-=================
+## The tracker files
For each version of the C++ standard, libc++ maintains some CSV files under
-``libcxx/docs/Status/``:
+`libcxx/docs/Status/`:
-* ``Cxx<NN>Papers.csv`` — every WG21 paper with library impact that targets
+- `Cxx<NN>Papers.csv` — every WG21 paper with library impact that targets
this standard version.
-* ``Cxx<NN>Issues.csv`` — every LWG issue that targets this standard version.
+- `Cxx<NN>Issues.csv` — every LWG issue that targets this standard version.
-Each row in the CSVs corresponds to one Github tracking issue on ``llvm/llvm-project``.
-Those tracking issues are also linked to the `libc++ Standards Conformance
-<https://github.com/orgs/llvm/projects/31>`__ project. Together, the CSVs, the tracking
-issues and the project board are kept in sync by the ``libcxx/utils/conformance`` script.
+Each row in the CSVs corresponds to one Github tracking issue on `llvm/llvm-project`.
+Those tracking issues are also linked to the [libc++ Standards Conformance](https://github.com/orgs/llvm/projects/31) project. Together, the CSVs, the tracking
+issues and the project board are kept in sync by the `libcxx/utils/conformance` script.
When tracking new items after a plenary vote, the CSV files should be updated first, and
then the Github issues should be created from the CSV files using the script.
-Deciding what plenary motions to track
-======================================
+## Deciding what plenary motions to track
After each meeting, look at the meeting's straw polls page (requires being a member
of WG21) and decide what needs to be added to the trackers. Generally speaking, we
@@ -41,60 +36,66 @@ Also note that LWG and CWG issues are respectively bundled as a single motion/pa
on the straw polls page. The papers in these motions contain the actual issues that
we should be tracking.
-To confirm that an issue or paper was approved in plenary, ``https://wg21.link/<PAPER>/status``
+To confirm that an issue or paper was approved in plenary, `https://wg21.link/<PAPER>/status`
can be used. That will link to the Github issue tracking the paper in WG21's system,
-where papers approved in plenary have the ``plenary-approved`` label.
+where papers approved in plenary have the `plenary-approved` label.
-Updating the CSV files
-======================
+## Updating the CSV files
For each new paper or issue to track, add a row following the convention used in existing
files. If a paper was voted as a Defect Report, mention it in the notes. The syntax of the
-file can be validated with::
+file can be validated with:
- libcxx/utils/conformance csv validate libcxx/docs/Status/Cxx<NN>Papers.csv \
- libcxx/docs/Status/Cxx<NN>Issues.csv
+```
+libcxx/utils/conformance csv validate libcxx/docs/Status/Cxx<NN>Papers.csv \
+ libcxx/docs/Status/Cxx<NN>Issues.csv
+```
Commit the CSV changes and related updates as a first PR. The Github tracking issues are
created in a separate step.
-Link stray Github issues
-========================
+## Link stray Github issues
People sometimes create Github issues to track standard papers outside of the workflow
described here. While that should be discouraged as only plenary-voted papers should be
tracked and this workflow should be used, issues created outside of this workflow should
-still be linked to prevent duplicates and confusion. This can be done with::
+still be linked to prevent duplicates and confusion. This can be done with:
- libcxx/utils/conformance github find-unlinked --labels wg21-paper --labels lwg-issue
+```
+libcxx/utils/conformance github find-unlinked --labels wg21-paper --labels lwg-issue
+```
This will find existing issues with the given labels that are not linked to the Github project
tracking conformance. They can then be linked manually.
-Create the Github tracking issues
-==================================
+## Create the Github tracking issues
Once the CSV files are committed and any stray issues have been linked, the remaining missing
-Github issues can be created using ``libcxx/utils/conformance``. The script lists every issue
+Github issues can be created using `libcxx/utils/conformance`. The script lists every issue
it would create from the CSV (skipping rows that are already tracked) and asks for a confirmation
before creating them. The issue title, body and labels are all populated automatically, and they
-are appropriately linked to the libc++ conformance project. Run it once per CSV::
+are appropriately linked to the libc++ conformance project. Run it once per CSV:
- libcxx/utils/conformance github create libcxx/docs/Status/Cxx<NN>Papers.csv \
- --labels=wg21-paper --labels=c++<NN>
+```
+libcxx/utils/conformance github create libcxx/docs/Status/Cxx<NN>Papers.csv \
+ --labels=wg21-paper --labels=c++<NN>
- libcxx/utils/conformance github create libcxx/docs/Status/Cxx<NN>Issues.csv \
- --labels=lwg-issue --labels=c++<NN>
+libcxx/utils/conformance github create libcxx/docs/Status/Cxx<NN>Issues.csv \
+ --labels=lwg-issue --labels=c++<NN>
+```
-The CSV ``Notes`` column is written to the issue body between ``BEGIN-RST-NOTES``/``END-RST-NOTES``
-markers so that ``csv synchronize`` can round-trip it back into the CSV.
+The CSV `Notes` column is written to the issue body between `BEGIN-RST-NOTES`/`END-RST-NOTES`
+markers so that `csv synchronize` can round-trip it back into the CSV.
-Once the issues have been created, populate the ``GitHub issue`` column of each CSV row::
+Once the issues have been created, populate the `GitHub issue` column of each CSV row:
- libcxx/utils/conformance csv synchronize libcxx/docs/Status/Cxx<NN>Papers.csv \
- -o libcxx/docs/Status/Cxx<NN>Papers.csv
+```
+libcxx/utils/conformance csv synchronize libcxx/docs/Status/Cxx<NN>Papers.csv \
+ -o libcxx/docs/Status/Cxx<NN>Papers.csv
- libcxx/utils/conformance csv synchronize libcxx/docs/Status/Cxx<NN>Issues.csv \
- -o libcxx/docs/Status/Cxx<NN>Issues.csv
+libcxx/utils/conformance csv synchronize libcxx/docs/Status/Cxx<NN>Issues.csv \
+ -o libcxx/docs/Status/Cxx<NN>Issues.csv
+```
This can then be committed as a follow-up PR.
+
diff --git a/libcxx/docs/Contributing/ReleaseProcedure.md b/libcxx/docs/Contributing/ReleaseProcedure.md
index ad21195185a4c..a8bc7f8cf42e9 100644
--- a/libcxx/docs/Contributing/ReleaseProcedure.md
+++ b/libcxx/docs/Contributing/ReleaseProcedure.md
@@ -1,65 +1,61 @@
-.. _ReleaseProcedure:
+(releaseprocedure)=
-=================
-Release procedure
-=================
+# Release procedure
The LLVM project creates a new release twice a year following a fixed
-`schedule <https://llvm.org/docs/HowToReleaseLLVM.html#annual-release-schedule>`__.
+[schedule](https://llvm.org/docs/HowToReleaseLLVM.html#annual-release-schedule).
This page describes the libc++ procedure for that release.
-Prepare the release
-===================
+## Prepare the release
It should be finished before the Release managers start branching the new
release:
-* Make sure ``libcxx/docs/ReleaseNotes/<VERSION>.md`` is up to date. Typically
+- Make sure `libcxx/docs/ReleaseNotes/<VERSION>.md` is up to date. Typically
this file is updated when contributing patches. Still there might be some
information added regarding the general improvements of larger projects.
-* Make sure the deprecated features on this page are up to date. Typically a
+- Make sure the deprecated features on this page are up to date. Typically a
new deprecated feature should be added to the release notes and this page.
However this should be verified so removals won't get forgotten.
-* Make sure the latest Unicode version is used. The C++ Standard
- `refers to the Unicode Standard <https://wg21.link/intro.refs#1.10>`__
+- Make sure the latest Unicode version is used. The C++ Standard
+ [refers to the Unicode Standard](https://wg21.link/intro.refs#1.10)
- ``The Unicode Consortium. The Unicode Standard. Available from: https://www.unicode.org/versions/latest/``
+ `The Unicode Consortium. The Unicode Standard. Available from: https://www.unicode.org/versions/latest/`
Typically the Unicode Consortium has one release per year. The libc++
format library uses the Unicode Standard. Libc++ should be updated to the
latest Unicode version. Updating means using the latest data files and, if
needed, adapting the code to changes in the Unicode Standard.
-* Make sure all libc++ supported compilers in the CI are updated to their
+- Make sure all libc++ supported compilers in the CI are updated to their
latest release.
-After the branch is created
-===========================
+## After the branch is created
After branching for an LLVM release:
-1. Update ``_LIBCPP_VERSION`` in ``libcxx/include/__config``
-2. Update the version number in ``libcxx/docs/conf.py``
-3. Update ``_LIBCPPABI_VERSION`` in ``libcxxabi/include/cxxabi.h``
-4. Update ``_LIBUNWIND_VERSION`` in ``libunwind/include/__libunwind_config.h``
+1. Update `_LIBCPP_VERSION` in `libcxx/include/__config`
+2. Update the version number in `libcxx/docs/conf.py`
+3. Update `_LIBCPPABI_VERSION` in `libcxxabi/include/cxxabi.h`
+4. Update `_LIBUNWIND_VERSION` in `libunwind/include/__libunwind_config.h`
5. Create a release notes file for the next release from the previous ones and point to it from
- ``libcxx/docs/ReleaseNotes.md``. Remove entries that do not apply anymore, but keep in mind
+ `libcxx/docs/ReleaseNotes.md`. Remove entries that do not apply anymore, but keep in mind
that some entries (such as upcoming deprecations) may still apply, may need rewording and may
also require follow up PRs to implement.
-6. Update the set of runners targeted by the CI on the release branch to ``llvm-premerge-libcxx-release-runners``, and
+6. Update the set of runners targeted by the CI on the release branch to `llvm-premerge-libcxx-release-runners`, and
make sure that runner set is using the appropriate image. This ensures that the release branch CI keeps working even
if the main branch starts using newer images.
7. Update the pre-commit CI to use the new ToT version of Clang available from Compiler Explorer. In order
to make sure patches can be backported to the release branch, we don't remove the oldest compiler yet.
-Post release
-============
+## Post release
Once the release is done and cherry-picks are not expected, we remove support for the ToT - 3 version Clang.
We also perform associated cleanups:
-- Search for ``LLVM RELEASE`` and address their comments
-- Search for test that have ``UNSUPPORTED`` or ``XFAIL`` for the no longer supported version
-- Search for ``TODO(LLVM-<ToT>)`` and address their comments
+- Search for `LLVM RELEASE` and address their comments
+- Search for test that have `UNSUPPORTED` or `XFAIL` for the no longer supported version
+- Search for `TODO(LLVM-<ToT>)` and address their comments
+
diff --git a/libcxx/docs/DesignDocs/ABIVersioning.md b/libcxx/docs/DesignDocs/ABIVersioning.md
index ad7218687d55f..40c85d71f56eb 100644
--- a/libcxx/docs/DesignDocs/ABIVersioning.md
+++ b/libcxx/docs/DesignDocs/ABIVersioning.md
@@ -1,32 +1,28 @@
-
-====================
-Libc++ ABI stability
-====================
+# Libc++ ABI stability
Libc++ aims to preserve a stable ABI to avoid subtle bugs when code built under the old ABI
is linked with code built under the new ABI. At the same time, libc++ wants to make
ABI-breaking improvements and bugfixes in scenarios where the user doesn't mind ABI breaks.
To support both cases, libc++ allows specifying an ABI version at
-build time. The version is defined with CMake option ``LIBCXX_ABI_VERSION``.
-Currently supported values are ``1`` (the stable default)
-and ``2`` (the unstable "next" version). At some point "ABI version 2" will be
-frozen and new ABI-breaking changes will start being applied to version ``3``;
+build time. The version is defined with CMake option `LIBCXX_ABI_VERSION`.
+Currently supported values are `1` (the stable default)
+and `2` (the unstable "next" version). At some point "ABI version 2" will be
+frozen and new ABI-breaking changes will start being applied to version `3`;
but this has not happened yet.
-To always use the most cutting-edge, most unstable ABI (which is currently ``2``
-but at some point will become ``3``), set the CMake option ``LIBCXX_ABI_UNSTABLE``.
+To always use the most cutting-edge, most unstable ABI (which is currently `2`
+but at some point will become `3`), set the CMake option `LIBCXX_ABI_UNSTABLE`.
Internally, each ABI-changing feature is placed under its own C++ macro,
-``_LIBCPP_ABI_XXX``. These macros' definitions are controlled by the C++ macro
-``_LIBCPP_ABI_VERSION``, which is controlled by the ``LIBCXX_ABI_VERSION`` set
+`_LIBCPP_ABI_XXX`. These macros' definitions are controlled by the C++ macro
+`_LIBCPP_ABI_VERSION`, which is controlled by the `LIBCXX_ABI_VERSION` set
at build time. Libc++ does not intend users to interact with these C++ macros
directly.
------------------
-MSVC environments
------------------
+## MSVC environments
The exception to this is MSVC environments. Libc++ does not currently have users
that require a stable ABI in MSVC environments, so MSVC-only changes may be
applied unconditionally.
+
diff --git a/libcxx/docs/DesignDocs/AtomicDesign.md b/libcxx/docs/DesignDocs/AtomicDesign.md
index 4b28ab2a8218a..9a6ba94e5196d 100644
--- a/libcxx/docs/DesignDocs/AtomicDesign.md
+++ b/libcxx/docs/DesignDocs/AtomicDesign.md
@@ -1,463 +1,458 @@
-
-====================
-``<atomic>`` Design
-====================
+# `<atomic>` Design
There were originally 3 designs under consideration. They differ in where most
of the implementation work is done. The functionality exposed to the customer
should be identical (and conforming) for all three designs.
+## Design A: Minimal work for the library
-Design A: Minimal work for the library
-======================================
The compiler supplies all of the intrinsics as described below. This list of
intrinsics roughly parallels the requirements of the C and C++ atomics proposals.
The C and C++ library implementations simply drop through to these intrinsics.
Anything the platform does not support in hardware, the compiler
arranges for a (compiler-rt) library call to be made which will do the job with
a mutex, and in this case ignoring the memory ordering parameter (effectively
-implementing ``memory_order_seq_cst``).
+implementing `memory_order_seq_cst`).
Ultimate efficiency is preferred over run time error checking. Undefined
behavior is acceptable when the inputs do not conform as defined below.
-.. code-block:: cpp
-
- // In every intrinsic signature below, type* atomic_obj may be a pointer to a
- // volatile-qualified type. Memory ordering values map to the following meanings:
- // memory_order_relaxed == 0
- // memory_order_consume == 1
- // memory_order_acquire == 2
- // memory_order_release == 3
- // memory_order_acq_rel == 4
- // memory_order_seq_cst == 5
-
- // type must be trivially copyable
- // type represents a "type argument"
- bool __atomic_is_lock_free(type);
-
- // type must be trivially copyable
- // Behavior is defined for mem_ord = 0, 1, 2, 5
- type __atomic_load(const type* atomic_obj, int mem_ord);
-
- // type must be trivially copyable
- // Behavior is defined for mem_ord = 0, 3, 5
- void __atomic_store(type* atomic_obj, type desired, int mem_ord);
-
- // type must be trivially copyable
- // Behavior is defined for mem_ord = [0 ... 5]
- type __atomic_exchange(type* atomic_obj, type desired, int mem_ord);
-
- // type must be trivially copyable
- // Behavior is defined for mem_success = [0 ... 5],
- // mem_failure <= mem_success
- // mem_failure != 3
- // mem_failure != 4
- bool __atomic_compare_exchange_strong(type* atomic_obj,
- type* expected, type desired,
- int mem_success, int mem_failure);
-
- // type must be trivially copyable
- // Behavior is defined for mem_success = [0 ... 5],
- // mem_failure <= mem_success
- // mem_failure != 3
- // mem_failure != 4
- bool __atomic_compare_exchange_weak(type* atomic_obj,
- type* expected, type desired,
- int mem_success, int mem_failure);
-
- // type is one of: char, signed char, unsigned char, short, unsigned short, int,
- // unsigned int, long, unsigned long, long long, unsigned long long,
- // char16_t, char32_t, wchar_t
- // Behavior is defined for mem_ord = [0 ... 5]
- type __atomic_fetch_add(type* atomic_obj, type operand, int mem_ord);
-
- // type is one of: char, signed char, unsigned char, short, unsigned short, int,
- // unsigned int, long, unsigned long, long long, unsigned long long,
- // char16_t, char32_t, wchar_t
- // Behavior is defined for mem_ord = [0 ... 5]
- type __atomic_fetch_sub(type* atomic_obj, type operand, int mem_ord);
-
- // type is one of: char, signed char, unsigned char, short, unsigned short, int,
- // unsigned int, long, unsigned long, long long, unsigned long long,
- // char16_t, char32_t, wchar_t
- // Behavior is defined for mem_ord = [0 ... 5]
- type __atomic_fetch_and(type* atomic_obj, type operand, int mem_ord);
-
- // type is one of: char, signed char, unsigned char, short, unsigned short, int,
- // unsigned int, long, unsigned long, long long, unsigned long long,
- // char16_t, char32_t, wchar_t
- // Behavior is defined for mem_ord = [0 ... 5]
- type __atomic_fetch_or(type* atomic_obj, type operand, int mem_ord);
-
- // type is one of: char, signed char, unsigned char, short, unsigned short, int,
- // unsigned int, long, unsigned long, long long, unsigned long long,
- // char16_t, char32_t, wchar_t
- // Behavior is defined for mem_ord = [0 ... 5]
- type __atomic_fetch_xor(type* atomic_obj, type operand, int mem_ord);
-
- // Behavior is defined for mem_ord = [0 ... 5]
- void* __atomic_fetch_add(void** atomic_obj, ptrdiff_t operand, int mem_ord);
- void* __atomic_fetch_sub(void** atomic_obj, ptrdiff_t operand, int mem_ord);
-
- // Behavior is defined for mem_ord = [0 ... 5]
- void __atomic_thread_fence(int mem_ord);
- void __atomic_signal_fence(int mem_ord);
-
-If desired the intrinsics taking a single ``mem_ord`` parameter can default
+```cpp
+// In every intrinsic signature below, type* atomic_obj may be a pointer to a
+// volatile-qualified type. Memory ordering values map to the following meanings:
+// memory_order_relaxed == 0
+// memory_order_consume == 1
+// memory_order_acquire == 2
+// memory_order_release == 3
+// memory_order_acq_rel == 4
+// memory_order_seq_cst == 5
+
+// type must be trivially copyable
+// type represents a "type argument"
+bool __atomic_is_lock_free(type);
+
+// type must be trivially copyable
+// Behavior is defined for mem_ord = 0, 1, 2, 5
+type __atomic_load(const type* atomic_obj, int mem_ord);
+
+// type must be trivially copyable
+// Behavior is defined for mem_ord = 0, 3, 5
+void __atomic_store(type* atomic_obj, type desired, int mem_ord);
+
+// type must be trivially copyable
+// Behavior is defined for mem_ord = [0 ... 5]
+type __atomic_exchange(type* atomic_obj, type desired, int mem_ord);
+
+// type must be trivially copyable
+// Behavior is defined for mem_success = [0 ... 5],
+// mem_failure <= mem_success
+// mem_failure != 3
+// mem_failure != 4
+bool __atomic_compare_exchange_strong(type* atomic_obj,
+ type* expected, type desired,
+ int mem_success, int mem_failure);
+
+// type must be trivially copyable
+// Behavior is defined for mem_success = [0 ... 5],
+// mem_failure <= mem_success
+// mem_failure != 3
+// mem_failure != 4
+bool __atomic_compare_exchange_weak(type* atomic_obj,
+ type* expected, type desired,
+ int mem_success, int mem_failure);
+
+// type is one of: char, signed char, unsigned char, short, unsigned short, int,
+// unsigned int, long, unsigned long, long long, unsigned long long,
+// char16_t, char32_t, wchar_t
+// Behavior is defined for mem_ord = [0 ... 5]
+type __atomic_fetch_add(type* atomic_obj, type operand, int mem_ord);
+
+// type is one of: char, signed char, unsigned char, short, unsigned short, int,
+// unsigned int, long, unsigned long, long long, unsigned long long,
+// char16_t, char32_t, wchar_t
+// Behavior is defined for mem_ord = [0 ... 5]
+type __atomic_fetch_sub(type* atomic_obj, type operand, int mem_ord);
+
+// type is one of: char, signed char, unsigned char, short, unsigned short, int,
+// unsigned int, long, unsigned long, long long, unsigned long long,
+// char16_t, char32_t, wchar_t
+// Behavior is defined for mem_ord = [0 ... 5]
+type __atomic_fetch_and(type* atomic_obj, type operand, int mem_ord);
+
+// type is one of: char, signed char, unsigned char, short, unsigned short, int,
+// unsigned int, long, unsigned long, long long, unsigned long long,
+// char16_t, char32_t, wchar_t
+// Behavior is defined for mem_ord = [0 ... 5]
+type __atomic_fetch_or(type* atomic_obj, type operand, int mem_ord);
+
+// type is one of: char, signed char, unsigned char, short, unsigned short, int,
+// unsigned int, long, unsigned long, long long, unsigned long long,
+// char16_t, char32_t, wchar_t
+// Behavior is defined for mem_ord = [0 ... 5]
+type __atomic_fetch_xor(type* atomic_obj, type operand, int mem_ord);
+
+// Behavior is defined for mem_ord = [0 ... 5]
+void* __atomic_fetch_add(void** atomic_obj, ptrdiff_t operand, int mem_ord);
+void* __atomic_fetch_sub(void** atomic_obj, ptrdiff_t operand, int mem_ord);
+
+// Behavior is defined for mem_ord = [0 ... 5]
+void __atomic_thread_fence(int mem_ord);
+void __atomic_signal_fence(int mem_ord);
+```
+
+If desired the intrinsics taking a single `mem_ord` parameter can default
this argument to 5.
-If desired the intrinsics taking two ordering parameters can default ``mem_success``
-to 5, and ``mem_failure`` to ``translate_memory_order(mem_success)`` where
-``translate_memory_order(mem_success)`` is defined as:
-
-.. code-block:: cpp
+If desired the intrinsics taking two ordering parameters can default `mem_success`
+to 5, and `mem_failure` to `translate_memory_order(mem_success)` where
+`translate_memory_order(mem_success)` is defined as:
- int translate_memory_order(int o) {
- switch (o) {
- case 4:
- return 2;
- case 3:
- return 0;
- }
- return o;
+```cpp
+int translate_memory_order(int o) {
+ switch (o) {
+ case 4:
+ return 2;
+ case 3:
+ return 0;
}
+ return o;
+}
+```
Below are representative C++ implementations of all of the operations. Their
purpose is to document the desired semantics of each operation, assuming
-``memory_order_seq_cst``. This is essentially the code that will be called
+`memory_order_seq_cst`. This is essentially the code that will be called
if the front end calls out to compiler-rt.
-.. code-block:: cpp
-
- template <class T>
- T __atomic_load(T const volatile* obj) {
- unique_lock<mutex> _(some_mutex);
- return *obj;
- }
-
- template <class T>
- void __atomic_store(T volatile* obj, T desr) {
- unique_lock<mutex> _(some_mutex);
- *obj = desr;
- }
-
- template <class T>
- T __atomic_exchange(T volatile* obj, T desr) {
- unique_lock<mutex> _(some_mutex);
- T r = *obj;
- *obj = desr;
- return r;
- }
-
- template <class T>
- bool __atomic_compare_exchange_strong(T volatile* obj, T* exp, T desr) {
- unique_lock<mutex> _(some_mutex);
- if (std::memcmp(const_cast<T*>(obj), exp, sizeof(T)) == 0) // if (*obj == *exp)
- {
- std::memcpy(const_cast<T*>(obj), &desr, sizeof(T)); // *obj = desr;
- return true;
- }
- std::memcpy(exp, const_cast<T*>(obj), sizeof(T)); // *exp = *obj;
- return false;
- }
-
- // May spuriously return false (even if *obj == *exp)
- template <class T>
- bool __atomic_compare_exchange_weak(T volatile* obj, T* exp, T desr) {
- unique_lock<mutex> _(some_mutex);
- if (std::memcmp(const_cast<T*>(obj), exp, sizeof(T)) == 0) // if (*obj == *exp)
- {
- std::memcpy(const_cast<T*>(obj), &desr, sizeof(T)); // *obj = desr;
- return true;
- }
- std::memcpy(exp, const_cast<T*>(obj), sizeof(T)); // *exp = *obj;
- return false;
- }
-
- template <class T>
- T __atomic_fetch_add(T volatile* obj, T operand) {
- unique_lock<mutex> _(some_mutex);
- T r = *obj;
- *obj += operand;
- return r;
- }
-
- template <class T>
- T __atomic_fetch_sub(T volatile* obj, T operand) {
- unique_lock<mutex> _(some_mutex);
- T r = *obj;
- *obj -= operand;
- return r;
- }
-
- template <class T>
- T __atomic_fetch_and(T volatile* obj, T operand) {
- unique_lock<mutex> _(some_mutex);
- T r = *obj;
- *obj &= operand;
- return r;
- }
-
- template <class T>
- T __atomic_fetch_or(T volatile* obj, T operand) {
- unique_lock<mutex> _(some_mutex);
- T r = *obj;
- *obj |= operand;
- return r;
- }
-
- template <class T>
- T __atomic_fetch_xor(T volatile* obj, T operand) {
- unique_lock<mutex> _(some_mutex);
- T r = *obj;
- *obj ^= operand;
- return r;
- }
-
- void* __atomic_fetch_add(void* volatile* obj, ptrdiff_t operand) {
- unique_lock<mutex> _(some_mutex);
- void* r = *obj;
- (char*&)(*obj) += operand;
- return r;
- }
-
- void* __atomic_fetch_sub(void* volatile* obj, ptrdiff_t operand) {
- unique_lock<mutex> _(some_mutex);
- void* r = *obj;
- (char*&)(*obj) -= operand;
- return r;
- }
-
- void __atomic_thread_fence() {
- unique_lock<mutex> _(some_mutex);
- }
-
- void __atomic_signal_fence() {
- unique_lock<mutex> _(some_mutex);
- }
-
+```cpp
+template <class T>
+T __atomic_load(T const volatile* obj) {
+ unique_lock<mutex> _(some_mutex);
+ return *obj;
+}
+
+template <class T>
+void __atomic_store(T volatile* obj, T desr) {
+ unique_lock<mutex> _(some_mutex);
+ *obj = desr;
+}
+
+template <class T>
+T __atomic_exchange(T volatile* obj, T desr) {
+ unique_lock<mutex> _(some_mutex);
+ T r = *obj;
+ *obj = desr;
+ return r;
+}
+
+template <class T>
+bool __atomic_compare_exchange_strong(T volatile* obj, T* exp, T desr) {
+ unique_lock<mutex> _(some_mutex);
+ if (std::memcmp(const_cast<T*>(obj), exp, sizeof(T)) == 0) // if (*obj == *exp)
+ {
+ std::memcpy(const_cast<T*>(obj), &desr, sizeof(T)); // *obj = desr;
+ return true;
+ }
+ std::memcpy(exp, const_cast<T*>(obj), sizeof(T)); // *exp = *obj;
+ return false;
+}
+
+// May spuriously return false (even if *obj == *exp)
+template <class T>
+bool __atomic_compare_exchange_weak(T volatile* obj, T* exp, T desr) {
+ unique_lock<mutex> _(some_mutex);
+ if (std::memcmp(const_cast<T*>(obj), exp, sizeof(T)) == 0) // if (*obj == *exp)
+ {
+ std::memcpy(const_cast<T*>(obj), &desr, sizeof(T)); // *obj = desr;
+ return true;
+ }
+ std::memcpy(exp, const_cast<T*>(obj), sizeof(T)); // *exp = *obj;
+ return false;
+}
+
+template <class T>
+T __atomic_fetch_add(T volatile* obj, T operand) {
+ unique_lock<mutex> _(some_mutex);
+ T r = *obj;
+ *obj += operand;
+ return r;
+}
+
+template <class T>
+T __atomic_fetch_sub(T volatile* obj, T operand) {
+ unique_lock<mutex> _(some_mutex);
+ T r = *obj;
+ *obj -= operand;
+ return r;
+}
+
+template <class T>
+T __atomic_fetch_and(T volatile* obj, T operand) {
+ unique_lock<mutex> _(some_mutex);
+ T r = *obj;
+ *obj &= operand;
+ return r;
+}
+
+template <class T>
+T __atomic_fetch_or(T volatile* obj, T operand) {
+ unique_lock<mutex> _(some_mutex);
+ T r = *obj;
+ *obj |= operand;
+ return r;
+}
+
+template <class T>
+T __atomic_fetch_xor(T volatile* obj, T operand) {
+ unique_lock<mutex> _(some_mutex);
+ T r = *obj;
+ *obj ^= operand;
+ return r;
+}
+
+void* __atomic_fetch_add(void* volatile* obj, ptrdiff_t operand) {
+ unique_lock<mutex> _(some_mutex);
+ void* r = *obj;
+ (char*&)(*obj) += operand;
+ return r;
+}
+
+void* __atomic_fetch_sub(void* volatile* obj, ptrdiff_t operand) {
+ unique_lock<mutex> _(some_mutex);
+ void* r = *obj;
+ (char*&)(*obj) -= operand;
+ return r;
+}
+
+void __atomic_thread_fence() {
+ unique_lock<mutex> _(some_mutex);
+}
+
+void __atomic_signal_fence() {
+ unique_lock<mutex> _(some_mutex);
+}
+```
+
+## Design B: Something in between
-Design B: Something in between
-==============================
This is a variation of design A which puts the burden on the library to arrange
for the correct manipulation of the run time memory ordering arguments, and only
calls the compiler for well-defined memory orderings. I think of this design as
the worst of A and C, instead of the best of A and C. But I offer it as an
option in the spirit of completeness.
-.. code-block:: cpp
-
- // type must be trivially copyable
- bool __atomic_is_lock_free(const type* atomic_obj);
-
- // type must be trivially copyable
- type __atomic_load_relaxed(const volatile type* atomic_obj);
- type __atomic_load_consume(const volatile type* atomic_obj);
- type __atomic_load_acquire(const volatile type* atomic_obj);
- type __atomic_load_seq_cst(const volatile type* atomic_obj);
-
- // type must be trivially copyable
- type __atomic_store_relaxed(volatile type* atomic_obj, type desired);
- type __atomic_store_release(volatile type* atomic_obj, type desired);
- type __atomic_store_seq_cst(volatile type* atomic_obj, type desired);
-
- // type must be trivially copyable
- type __atomic_exchange_relaxed(volatile type* atomic_obj, type desired);
- type __atomic_exchange_consume(volatile type* atomic_obj, type desired);
- type __atomic_exchange_acquire(volatile type* atomic_obj, type desired);
- type __atomic_exchange_release(volatile type* atomic_obj, type desired);
- type __atomic_exchange_acq_rel(volatile type* atomic_obj, type desired);
- type __atomic_exchange_seq_cst(volatile type* atomic_obj, type desired);
-
- // type must be trivially copyable
- bool __atomic_compare_exchange_strong_relaxed_relaxed(volatile type* atomic_obj,
- type* expected,
- type desired);
- bool __atomic_compare_exchange_strong_consume_relaxed(volatile type* atomic_obj,
- type* expected,
- type desired);
- bool __atomic_compare_exchange_strong_consume_consume(volatile type* atomic_obj,
- type* expected,
- type desired);
- bool __atomic_compare_exchange_strong_acquire_relaxed(volatile type* atomic_obj,
- type* expected,
- type desired);
- bool __atomic_compare_exchange_strong_acquire_consume(volatile type* atomic_obj,
- type* expected,
- type desired);
- bool __atomic_compare_exchange_strong_acquire_acquire(volatile type* atomic_obj,
- type* expected,
- type desired);
- bool __atomic_compare_exchange_strong_release_relaxed(volatile type* atomic_obj,
- type* expected,
- type desired);
- bool __atomic_compare_exchange_strong_release_consume(volatile type* atomic_obj,
- type* expected,
- type desired);
- bool __atomic_compare_exchange_strong_release_acquire(volatile type* atomic_obj,
- type* expected,
- type desired);
- bool __atomic_compare_exchange_strong_acq_rel_relaxed(volatile type* atomic_obj,
- type* expected,
- type desired);
- bool __atomic_compare_exchange_strong_acq_rel_consume(volatile type* atomic_obj,
- type* expected,
- type desired);
- bool __atomic_compare_exchange_strong_acq_rel_acquire(volatile type* atomic_obj,
- type* expected,
- type desired);
- bool __atomic_compare_exchange_strong_seq_cst_relaxed(volatile type* atomic_obj,
- type* expected,
- type desired);
- bool __atomic_compare_exchange_strong_seq_cst_consume(volatile type* atomic_obj,
- type* expected,
- type desired);
- bool __atomic_compare_exchange_strong_seq_cst_acquire(volatile type* atomic_obj,
- type* expected,
- type desired);
- bool __atomic_compare_exchange_strong_seq_cst_seq_cst(volatile type* atomic_obj,
- type* expected,
- type desired);
-
- // type must be trivially copyable
- bool __atomic_compare_exchange_weak_relaxed_relaxed(volatile type* atomic_obj,
- type* expected,
- type desired);
- bool __atomic_compare_exchange_weak_consume_relaxed(volatile type* atomic_obj,
- type* expected,
- type desired);
- bool __atomic_compare_exchange_weak_consume_consume(volatile type* atomic_obj,
- type* expected,
- type desired);
- bool __atomic_compare_exchange_weak_acquire_relaxed(volatile type* atomic_obj,
- type* expected,
- type desired);
- bool __atomic_compare_exchange_weak_acquire_consume(volatile type* atomic_obj,
- type* expected,
- type desired);
- bool __atomic_compare_exchange_weak_acquire_acquire(volatile type* atomic_obj,
- type* expected,
- type desired);
- bool __atomic_compare_exchange_weak_release_relaxed(volatile type* atomic_obj,
- type* expected,
- type desired);
- bool __atomic_compare_exchange_weak_release_consume(volatile type* atomic_obj,
- type* expected,
- type desired);
- bool __atomic_compare_exchange_weak_release_acquire(volatile type* atomic_obj,
- type* expected,
- type desired);
- bool __atomic_compare_exchange_weak_acq_rel_relaxed(volatile type* atomic_obj,
- type* expected,
- type desired);
- bool __atomic_compare_exchange_weak_acq_rel_consume(volatile type* atomic_obj,
- type* expected,
- type desired);
- bool __atomic_compare_exchange_weak_acq_rel_acquire(volatile type* atomic_obj,
- type* expected,
- type desired);
- bool __atomic_compare_exchange_weak_seq_cst_relaxed(volatile type* atomic_obj,
- type* expected,
- type desired);
- bool __atomic_compare_exchange_weak_seq_cst_consume(volatile type* atomic_obj,
- type* expected,
- type desired);
- bool __atomic_compare_exchange_weak_seq_cst_acquire(volatile type* atomic_obj,
- type* expected,
- type desired);
- bool __atomic_compare_exchange_weak_seq_cst_seq_cst(volatile type* atomic_obj,
- type* expected,
- type desired);
-
- // type is one of: char, signed char, unsigned char, short, unsigned short, int,
- // unsigned int, long, unsigned long, long long, unsigned long long,
- // char16_t, char32_t, wchar_t
- type __atomic_fetch_add_relaxed(volatile type* atomic_obj, type operand);
- type __atomic_fetch_add_consume(volatile type* atomic_obj, type operand);
- type __atomic_fetch_add_acquire(volatile type* atomic_obj, type operand);
- type __atomic_fetch_add_release(volatile type* atomic_obj, type operand);
- type __atomic_fetch_add_acq_rel(volatile type* atomic_obj, type operand);
- type __atomic_fetch_add_seq_cst(volatile type* atomic_obj, type operand);
-
- // type is one of: char, signed char, unsigned char, short, unsigned short, int,
- // unsigned int, long, unsigned long, long long, unsigned long long,
- // char16_t, char32_t, wchar_t
- type __atomic_fetch_sub_relaxed(volatile type* atomic_obj, type operand);
- type __atomic_fetch_sub_consume(volatile type* atomic_obj, type operand);
- type __atomic_fetch_sub_acquire(volatile type* atomic_obj, type operand);
- type __atomic_fetch_sub_release(volatile type* atomic_obj, type operand);
- type __atomic_fetch_sub_acq_rel(volatile type* atomic_obj, type operand);
- type __atomic_fetch_sub_seq_cst(volatile type* atomic_obj, type operand);
-
- // type is one of: char, signed char, unsigned char, short, unsigned short, int,
- // unsigned int, long, unsigned long, long long, unsigned long long,
- // char16_t, char32_t, wchar_t
- type __atomic_fetch_and_relaxed(volatile type* atomic_obj, type operand);
- type __atomic_fetch_and_consume(volatile type* atomic_obj, type operand);
- type __atomic_fetch_and_acquire(volatile type* atomic_obj, type operand);
- type __atomic_fetch_and_release(volatile type* atomic_obj, type operand);
- type __atomic_fetch_and_acq_rel(volatile type* atomic_obj, type operand);
- type __atomic_fetch_and_seq_cst(volatile type* atomic_obj, type operand);
-
- // type is one of: char, signed char, unsigned char, short, unsigned short, int,
- // unsigned int, long, unsigned long, long long, unsigned long long,
- // char16_t, char32_t, wchar_t
- type __atomic_fetch_or_relaxed(volatile type* atomic_obj, type operand);
- type __atomic_fetch_or_consume(volatile type* atomic_obj, type operand);
- type __atomic_fetch_or_acquire(volatile type* atomic_obj, type operand);
- type __atomic_fetch_or_release(volatile type* atomic_obj, type operand);
- type __atomic_fetch_or_acq_rel(volatile type* atomic_obj, type operand);
- type __atomic_fetch_or_seq_cst(volatile type* atomic_obj, type operand);
-
- // type is one of: char, signed char, unsigned char, short, unsigned short, int,
- // unsigned int, long, unsigned long, long long, unsigned long long,
- // char16_t, char32_t, wchar_t
- type __atomic_fetch_xor_relaxed(volatile type* atomic_obj, type operand);
- type __atomic_fetch_xor_consume(volatile type* atomic_obj, type operand);
- type __atomic_fetch_xor_acquire(volatile type* atomic_obj, type operand);
- type __atomic_fetch_xor_release(volatile type* atomic_obj, type operand);
- type __atomic_fetch_xor_acq_rel(volatile type* atomic_obj, type operand);
- type __atomic_fetch_xor_seq_cst(volatile type* atomic_obj, type operand);
-
- void* __atomic_fetch_add_relaxed(void* volatile* atomic_obj, ptrdiff_t operand);
- void* __atomic_fetch_add_consume(void* volatile* atomic_obj, ptrdiff_t operand);
- void* __atomic_fetch_add_acquire(void* volatile* atomic_obj, ptrdiff_t operand);
- void* __atomic_fetch_add_release(void* volatile* atomic_obj, ptrdiff_t operand);
- void* __atomic_fetch_add_acq_rel(void* volatile* atomic_obj, ptrdiff_t operand);
- void* __atomic_fetch_add_seq_cst(void* volatile* atomic_obj, ptrdiff_t operand);
-
- void* __atomic_fetch_sub_relaxed(void* volatile* atomic_obj, ptrdiff_t operand);
- void* __atomic_fetch_sub_consume(void* volatile* atomic_obj, ptrdiff_t operand);
- void* __atomic_fetch_sub_acquire(void* volatile* atomic_obj, ptrdiff_t operand);
- void* __atomic_fetch_sub_release(void* volatile* atomic_obj, ptrdiff_t operand);
- void* __atomic_fetch_sub_acq_rel(void* volatile* atomic_obj, ptrdiff_t operand);
- void* __atomic_fetch_sub_seq_cst(void* volatile* atomic_obj, ptrdiff_t operand);
-
- void __atomic_thread_fence_relaxed();
- void __atomic_thread_fence_consume();
- void __atomic_thread_fence_acquire();
- void __atomic_thread_fence_release();
- void __atomic_thread_fence_acq_rel();
- void __atomic_thread_fence_seq_cst();
-
- void __atomic_signal_fence_relaxed();
- void __atomic_signal_fence_consume();
- void __atomic_signal_fence_acquire();
- void __atomic_signal_fence_release();
- void __atomic_signal_fence_acq_rel();
- void __atomic_signal_fence_seq_cst();
-
-Design C: Minimal work for the front end
-========================================
-The ``<atomic>`` header is one of the most closely coupled headers to the compiler.
-Ideally when you invoke any function from ``<atomic>``, it should result in highly
+```cpp
+// type must be trivially copyable
+bool __atomic_is_lock_free(const type* atomic_obj);
+
+// type must be trivially copyable
+type __atomic_load_relaxed(const volatile type* atomic_obj);
+type __atomic_load_consume(const volatile type* atomic_obj);
+type __atomic_load_acquire(const volatile type* atomic_obj);
+type __atomic_load_seq_cst(const volatile type* atomic_obj);
+
+// type must be trivially copyable
+type __atomic_store_relaxed(volatile type* atomic_obj, type desired);
+type __atomic_store_release(volatile type* atomic_obj, type desired);
+type __atomic_store_seq_cst(volatile type* atomic_obj, type desired);
+
+// type must be trivially copyable
+type __atomic_exchange_relaxed(volatile type* atomic_obj, type desired);
+type __atomic_exchange_consume(volatile type* atomic_obj, type desired);
+type __atomic_exchange_acquire(volatile type* atomic_obj, type desired);
+type __atomic_exchange_release(volatile type* atomic_obj, type desired);
+type __atomic_exchange_acq_rel(volatile type* atomic_obj, type desired);
+type __atomic_exchange_seq_cst(volatile type* atomic_obj, type desired);
+
+// type must be trivially copyable
+bool __atomic_compare_exchange_strong_relaxed_relaxed(volatile type* atomic_obj,
+ type* expected,
+ type desired);
+bool __atomic_compare_exchange_strong_consume_relaxed(volatile type* atomic_obj,
+ type* expected,
+ type desired);
+bool __atomic_compare_exchange_strong_consume_consume(volatile type* atomic_obj,
+ type* expected,
+ type desired);
+bool __atomic_compare_exchange_strong_acquire_relaxed(volatile type* atomic_obj,
+ type* expected,
+ type desired);
+bool __atomic_compare_exchange_strong_acquire_consume(volatile type* atomic_obj,
+ type* expected,
+ type desired);
+bool __atomic_compare_exchange_strong_acquire_acquire(volatile type* atomic_obj,
+ type* expected,
+ type desired);
+bool __atomic_compare_exchange_strong_release_relaxed(volatile type* atomic_obj,
+ type* expected,
+ type desired);
+bool __atomic_compare_exchange_strong_release_consume(volatile type* atomic_obj,
+ type* expected,
+ type desired);
+bool __atomic_compare_exchange_strong_release_acquire(volatile type* atomic_obj,
+ type* expected,
+ type desired);
+bool __atomic_compare_exchange_strong_acq_rel_relaxed(volatile type* atomic_obj,
+ type* expected,
+ type desired);
+bool __atomic_compare_exchange_strong_acq_rel_consume(volatile type* atomic_obj,
+ type* expected,
+ type desired);
+bool __atomic_compare_exchange_strong_acq_rel_acquire(volatile type* atomic_obj,
+ type* expected,
+ type desired);
+bool __atomic_compare_exchange_strong_seq_cst_relaxed(volatile type* atomic_obj,
+ type* expected,
+ type desired);
+bool __atomic_compare_exchange_strong_seq_cst_consume(volatile type* atomic_obj,
+ type* expected,
+ type desired);
+bool __atomic_compare_exchange_strong_seq_cst_acquire(volatile type* atomic_obj,
+ type* expected,
+ type desired);
+bool __atomic_compare_exchange_strong_seq_cst_seq_cst(volatile type* atomic_obj,
+ type* expected,
+ type desired);
+
+// type must be trivially copyable
+bool __atomic_compare_exchange_weak_relaxed_relaxed(volatile type* atomic_obj,
+ type* expected,
+ type desired);
+bool __atomic_compare_exchange_weak_consume_relaxed(volatile type* atomic_obj,
+ type* expected,
+ type desired);
+bool __atomic_compare_exchange_weak_consume_consume(volatile type* atomic_obj,
+ type* expected,
+ type desired);
+bool __atomic_compare_exchange_weak_acquire_relaxed(volatile type* atomic_obj,
+ type* expected,
+ type desired);
+bool __atomic_compare_exchange_weak_acquire_consume(volatile type* atomic_obj,
+ type* expected,
+ type desired);
+bool __atomic_compare_exchange_weak_acquire_acquire(volatile type* atomic_obj,
+ type* expected,
+ type desired);
+bool __atomic_compare_exchange_weak_release_relaxed(volatile type* atomic_obj,
+ type* expected,
+ type desired);
+bool __atomic_compare_exchange_weak_release_consume(volatile type* atomic_obj,
+ type* expected,
+ type desired);
+bool __atomic_compare_exchange_weak_release_acquire(volatile type* atomic_obj,
+ type* expected,
+ type desired);
+bool __atomic_compare_exchange_weak_acq_rel_relaxed(volatile type* atomic_obj,
+ type* expected,
+ type desired);
+bool __atomic_compare_exchange_weak_acq_rel_consume(volatile type* atomic_obj,
+ type* expected,
+ type desired);
+bool __atomic_compare_exchange_weak_acq_rel_acquire(volatile type* atomic_obj,
+ type* expected,
+ type desired);
+bool __atomic_compare_exchange_weak_seq_cst_relaxed(volatile type* atomic_obj,
+ type* expected,
+ type desired);
+bool __atomic_compare_exchange_weak_seq_cst_consume(volatile type* atomic_obj,
+ type* expected,
+ type desired);
+bool __atomic_compare_exchange_weak_seq_cst_acquire(volatile type* atomic_obj,
+ type* expected,
+ type desired);
+bool __atomic_compare_exchange_weak_seq_cst_seq_cst(volatile type* atomic_obj,
+ type* expected,
+ type desired);
+
+// type is one of: char, signed char, unsigned char, short, unsigned short, int,
+// unsigned int, long, unsigned long, long long, unsigned long long,
+// char16_t, char32_t, wchar_t
+type __atomic_fetch_add_relaxed(volatile type* atomic_obj, type operand);
+type __atomic_fetch_add_consume(volatile type* atomic_obj, type operand);
+type __atomic_fetch_add_acquire(volatile type* atomic_obj, type operand);
+type __atomic_fetch_add_release(volatile type* atomic_obj, type operand);
+type __atomic_fetch_add_acq_rel(volatile type* atomic_obj, type operand);
+type __atomic_fetch_add_seq_cst(volatile type* atomic_obj, type operand);
+
+// type is one of: char, signed char, unsigned char, short, unsigned short, int,
+// unsigned int, long, unsigned long, long long, unsigned long long,
+// char16_t, char32_t, wchar_t
+type __atomic_fetch_sub_relaxed(volatile type* atomic_obj, type operand);
+type __atomic_fetch_sub_consume(volatile type* atomic_obj, type operand);
+type __atomic_fetch_sub_acquire(volatile type* atomic_obj, type operand);
+type __atomic_fetch_sub_release(volatile type* atomic_obj, type operand);
+type __atomic_fetch_sub_acq_rel(volatile type* atomic_obj, type operand);
+type __atomic_fetch_sub_seq_cst(volatile type* atomic_obj, type operand);
+
+// type is one of: char, signed char, unsigned char, short, unsigned short, int,
+// unsigned int, long, unsigned long, long long, unsigned long long,
+// char16_t, char32_t, wchar_t
+type __atomic_fetch_and_relaxed(volatile type* atomic_obj, type operand);
+type __atomic_fetch_and_consume(volatile type* atomic_obj, type operand);
+type __atomic_fetch_and_acquire(volatile type* atomic_obj, type operand);
+type __atomic_fetch_and_release(volatile type* atomic_obj, type operand);
+type __atomic_fetch_and_acq_rel(volatile type* atomic_obj, type operand);
+type __atomic_fetch_and_seq_cst(volatile type* atomic_obj, type operand);
+
+// type is one of: char, signed char, unsigned char, short, unsigned short, int,
+// unsigned int, long, unsigned long, long long, unsigned long long,
+// char16_t, char32_t, wchar_t
+type __atomic_fetch_or_relaxed(volatile type* atomic_obj, type operand);
+type __atomic_fetch_or_consume(volatile type* atomic_obj, type operand);
+type __atomic_fetch_or_acquire(volatile type* atomic_obj, type operand);
+type __atomic_fetch_or_release(volatile type* atomic_obj, type operand);
+type __atomic_fetch_or_acq_rel(volatile type* atomic_obj, type operand);
+type __atomic_fetch_or_seq_cst(volatile type* atomic_obj, type operand);
+
+// type is one of: char, signed char, unsigned char, short, unsigned short, int,
+// unsigned int, long, unsigned long, long long, unsigned long long,
+// char16_t, char32_t, wchar_t
+type __atomic_fetch_xor_relaxed(volatile type* atomic_obj, type operand);
+type __atomic_fetch_xor_consume(volatile type* atomic_obj, type operand);
+type __atomic_fetch_xor_acquire(volatile type* atomic_obj, type operand);
+type __atomic_fetch_xor_release(volatile type* atomic_obj, type operand);
+type __atomic_fetch_xor_acq_rel(volatile type* atomic_obj, type operand);
+type __atomic_fetch_xor_seq_cst(volatile type* atomic_obj, type operand);
+
+void* __atomic_fetch_add_relaxed(void* volatile* atomic_obj, ptrdiff_t operand);
+void* __atomic_fetch_add_consume(void* volatile* atomic_obj, ptrdiff_t operand);
+void* __atomic_fetch_add_acquire(void* volatile* atomic_obj, ptrdiff_t operand);
+void* __atomic_fetch_add_release(void* volatile* atomic_obj, ptrdiff_t operand);
+void* __atomic_fetch_add_acq_rel(void* volatile* atomic_obj, ptrdiff_t operand);
+void* __atomic_fetch_add_seq_cst(void* volatile* atomic_obj, ptrdiff_t operand);
+
+void* __atomic_fetch_sub_relaxed(void* volatile* atomic_obj, ptrdiff_t operand);
+void* __atomic_fetch_sub_consume(void* volatile* atomic_obj, ptrdiff_t operand);
+void* __atomic_fetch_sub_acquire(void* volatile* atomic_obj, ptrdiff_t operand);
+void* __atomic_fetch_sub_release(void* volatile* atomic_obj, ptrdiff_t operand);
+void* __atomic_fetch_sub_acq_rel(void* volatile* atomic_obj, ptrdiff_t operand);
+void* __atomic_fetch_sub_seq_cst(void* volatile* atomic_obj, ptrdiff_t operand);
+
+void __atomic_thread_fence_relaxed();
+void __atomic_thread_fence_consume();
+void __atomic_thread_fence_acquire();
+void __atomic_thread_fence_release();
+void __atomic_thread_fence_acq_rel();
+void __atomic_thread_fence_seq_cst();
+
+void __atomic_signal_fence_relaxed();
+void __atomic_signal_fence_consume();
+void __atomic_signal_fence_acquire();
+void __atomic_signal_fence_release();
+void __atomic_signal_fence_acq_rel();
+void __atomic_signal_fence_seq_cst();
+```
+
+## Design C: Minimal work for the front end
+
+The `<atomic>` header is one of the most closely coupled headers to the compiler.
+Ideally when you invoke any function from `<atomic>`, it should result in highly
optimized assembly being inserted directly into your application -- assembly that
is not otherwise representable by higher level C or C++ expressions. The design of
-the libc++ ``<atomic>`` header started with this goal in mind. A secondary, but
+the libc++ `<atomic>` header started with this goal in mind. A secondary, but
still very important goal is that the compiler should have to do minimal work to
-facilitate the implementation of ``<atomic>``. Without this second goal, then
-practically speaking, the libc++ ``<atomic>`` header would be doomed to be a
+facilitate the implementation of `<atomic>`. Without this second goal, then
+practically speaking, the libc++ `<atomic>` header would be doomed to be a
barely supported, second class citizen on almost every platform.
Goals:
@@ -467,309 +462,308 @@ Goals:
- Conformance to the C++0X draft standard
The purpose of this document is to inform compiler writers what they need to do
-to enable a high performance libc++ ``<atomic>`` with minimal effort.
-
-The minimal work that must be done for a conforming ``<atomic>``
-----------------------------------------------------------------
-The only "atomic" operations that must actually be lock free in
-``<atomic>`` are represented by the following compiler intrinsics:
+to enable a high performance libc++ `<atomic>` with minimal effort.
-.. code-block:: cpp
-
- __atomic_flag__ __atomic_exchange_seq_cst(__atomic_flag__ volatile* obj, __atomic_flag__ desr) {
- unique_lock<mutex> _(some_mutex);
- __atomic_flag__ result = *obj;
- *obj = desr;
- return result;
- }
+### The minimal work that must be done for a conforming `<atomic>`
- void __atomic_store_seq_cst(__atomic_flag__ volatile* obj, __atomic_flag__ desr) {
- unique_lock<mutex> _(some_mutex);
- *obj = desr;
- }
+The only "atomic" operations that must actually be lock free in
+`<atomic>` are represented by the following compiler intrinsics:
+
+```cpp
+__atomic_flag__ __atomic_exchange_seq_cst(__atomic_flag__ volatile* obj, __atomic_flag__ desr) {
+ unique_lock<mutex> _(some_mutex);
+ __atomic_flag__ result = *obj;
+ *obj = desr;
+ return result;
+}
+
+void __atomic_store_seq_cst(__atomic_flag__ volatile* obj, __atomic_flag__ desr) {
+ unique_lock<mutex> _(some_mutex);
+ *obj = desr;
+}
+```
Where:
-- If ``__has_feature(__atomic_flag)`` evaluates to 1 in the preprocessor then
- the compiler must define ``__atomic_flag__`` (e.g. as a typedef to ``int``).
-- If ``__has_feature(__atomic_flag)`` evaluates to 0 in the preprocessor then
- the library defines ``__atomic_flag__`` as a typedef to ``bool``.
+- If `__has_feature(__atomic_flag)` evaluates to 1 in the preprocessor then
+ the compiler must define `__atomic_flag__` (e.g. as a typedef to `int`).
+- If `__has_feature(__atomic_flag)` evaluates to 0 in the preprocessor then
+ the library defines `__atomic_flag__` as a typedef to `bool`.
- To communicate that the above intrinsics are available, the compiler must
- arrange for ``__has_feature`` to return 1 when fed the intrinsic name
- appended with an '_' and the mangled type name of ``__atomic_flag__``.
+ arrange for `__has_feature` to return 1 when fed the intrinsic name
+ appended with an '\_' and the mangled type name of `__atomic_flag__`.
-For example if ``__atomic_flag__`` is ``unsigned int``:
+For example if `__atomic_flag__` is `unsigned int`:
-.. code-block:: cpp
+```cpp
+// __has_feature(__atomic_flag) == 1
+// __has_feature(__atomic_exchange_seq_cst_j) == 1
+// __has_feature(__atomic_store_seq_cst_j) == 1
- // __has_feature(__atomic_flag) == 1
- // __has_feature(__atomic_exchange_seq_cst_j) == 1
- // __has_feature(__atomic_store_seq_cst_j) == 1
+typedef unsigned int __atomic_flag__;
- typedef unsigned int __atomic_flag__;
+unsigned int __atomic_exchange_seq_cst(unsigned int volatile*, unsigned int) {
+ // ...
+}
- unsigned int __atomic_exchange_seq_cst(unsigned int volatile*, unsigned int) {
- // ...
- }
-
- void __atomic_store_seq_cst(unsigned int volatile*, unsigned int) {
- // ...
- }
+void __atomic_store_seq_cst(unsigned int volatile*, unsigned int) {
+ // ...
+}
+```
That's it! Compiler writers do the above and you've got a fully conforming
-(though sub-par performance) ``<atomic>`` header!
+(though sub-par performance) `<atomic>` header!
+### Recommended work for a higher performance `<atomic>`
-Recommended work for a higher performance ``<atomic>``
-------------------------------------------------------
It would be good if the above intrinsics worked with all integral types plus
-``void*``. Because this may not be possible to do in a lock-free manner for
+`void*`. Because this may not be possible to do in a lock-free manner for
all integral types on all platforms, a compiler must communicate each type that
-an intrinsic works with. For example, if ``__atomic_exchange_seq_cst`` works
-for all types except for ``long long`` and ``unsigned long long`` then:
-
-.. code-block:: cpp
-
- __has_feature(__atomic_exchange_seq_cst_b) == 1 // bool
- __has_feature(__atomic_exchange_seq_cst_c) == 1 // char
- __has_feature(__atomic_exchange_seq_cst_a) == 1 // signed char
- __has_feature(__atomic_exchange_seq_cst_h) == 1 // unsigned char
- __has_feature(__atomic_exchange_seq_cst_Ds) == 1 // char16_t
- __has_feature(__atomic_exchange_seq_cst_Di) == 1 // char32_t
- __has_feature(__atomic_exchange_seq_cst_w) == 1 // wchar_t
- __has_feature(__atomic_exchange_seq_cst_s) == 1 // short
- __has_feature(__atomic_exchange_seq_cst_t) == 1 // unsigned short
- __has_feature(__atomic_exchange_seq_cst_i) == 1 // int
- __has_feature(__atomic_exchange_seq_cst_j) == 1 // unsigned int
- __has_feature(__atomic_exchange_seq_cst_l) == 1 // long
- __has_feature(__atomic_exchange_seq_cst_m) == 1 // unsigned long
- __has_feature(__atomic_exchange_seq_cst_Pv) == 1 // void*
-
-Note that only the ``__has_feature`` flag is decorated with the argument
+an intrinsic works with. For example, if `__atomic_exchange_seq_cst` works
+for all types except for `long long` and `unsigned long long` then:
+
+```cpp
+__has_feature(__atomic_exchange_seq_cst_b) == 1 // bool
+__has_feature(__atomic_exchange_seq_cst_c) == 1 // char
+__has_feature(__atomic_exchange_seq_cst_a) == 1 // signed char
+__has_feature(__atomic_exchange_seq_cst_h) == 1 // unsigned char
+__has_feature(__atomic_exchange_seq_cst_Ds) == 1 // char16_t
+__has_feature(__atomic_exchange_seq_cst_Di) == 1 // char32_t
+__has_feature(__atomic_exchange_seq_cst_w) == 1 // wchar_t
+__has_feature(__atomic_exchange_seq_cst_s) == 1 // short
+__has_feature(__atomic_exchange_seq_cst_t) == 1 // unsigned short
+__has_feature(__atomic_exchange_seq_cst_i) == 1 // int
+__has_feature(__atomic_exchange_seq_cst_j) == 1 // unsigned int
+__has_feature(__atomic_exchange_seq_cst_l) == 1 // long
+__has_feature(__atomic_exchange_seq_cst_m) == 1 // unsigned long
+__has_feature(__atomic_exchange_seq_cst_Pv) == 1 // void*
+```
+
+Note that only the `__has_feature` flag is decorated with the argument
type. The name of the compiler intrinsic is not decorated, but instead works
like a C++ overloaded function.
-Additionally, there are other intrinsics besides ``__atomic_exchange_seq_cst``
-and ``__atomic_store_seq_cst``. They are optional. But if the compiler can
+Additionally, there are other intrinsics besides `__atomic_exchange_seq_cst`
+and `__atomic_store_seq_cst`. They are optional. But if the compiler can
generate faster code than provided by the library, then clients will benefit
from the compiler writer's expertise and knowledge of the targeted platform.
Below is the complete list of *sequentially consistent* intrinsics, and
their library implementations. Template syntax is used to indicate the desired
-overloading for integral and ``void*`` types. The template does not represent a
+overloading for integral and `void*` types. The template does not represent a
requirement that the intrinsic operate on **any** type!
-.. code-block:: cpp
-
- // T is one of:
- // bool, char, signed char, unsigned char, short, unsigned short,
- // int, unsigned int, long, unsigned long,
- // long long, unsigned long long, char16_t, char32_t, wchar_t, void*
-
- template <class T>
- T __atomic_load_seq_cst(T const volatile* obj) {
- unique_lock<mutex> _(some_mutex);
- return *obj;
- }
-
- template <class T>
- void __atomic_store_seq_cst(T volatile* obj, T desr) {
- unique_lock<mutex> _(some_mutex);
- *obj = desr;
- }
-
- template <class T>
- T __atomic_exchange_seq_cst(T volatile* obj, T desr) {
- unique_lock<mutex> _(some_mutex);
- T r = *obj;
- *obj = desr;
- return r;
- }
-
- template <class T>
- bool __atomic_compare_exchange_strong_seq_cst_seq_cst(T volatile* obj, T* exp, T desr) {
- unique_lock<mutex> _(some_mutex);
- if (std::memcmp(const_cast<T*>(obj), exp, sizeof(T)) == 0) {
- std::memcpy(const_cast<T*>(obj), &desr, sizeof(T));
- return true;
- }
- std::memcpy(exp, const_cast<T*>(obj), sizeof(T));
- return false;
- }
-
- template <class T>
- bool __atomic_compare_exchange_weak_seq_cst_seq_cst(T volatile* obj, T* exp, T desr) {
- unique_lock<mutex> _(some_mutex);
- if (std::memcmp(const_cast<T*>(obj), exp, sizeof(T)) == 0)
- {
- std::memcpy(const_cast<T*>(obj), &desr, sizeof(T));
- return true;
- }
- std::memcpy(exp, const_cast<T*>(obj), sizeof(T));
- return false;
- }
-
- // T is one of:
- // char, signed char, unsigned char, short, unsigned short,
- // int, unsigned int, long, unsigned long,
- // long long, unsigned long long, char16_t, char32_t, wchar_t
-
- template <class T>
- T __atomic_fetch_add_seq_cst(T volatile* obj, T operand) {
- unique_lock<mutex> _(some_mutex);
- T r = *obj;
- *obj += operand;
- return r;
- }
-
- template <class T>
- T __atomic_fetch_sub_seq_cst(T volatile* obj, T operand) {
- unique_lock<mutex> _(some_mutex);
- T r = *obj;
- *obj -= operand;
- return r;
- }
-
- template <class T>
- T __atomic_fetch_and_seq_cst(T volatile* obj, T operand) {
- unique_lock<mutex> _(some_mutex);
- T r = *obj;
- *obj &= operand;
- return r;
- }
-
- template <class T>
- T __atomic_fetch_or_seq_cst(T volatile* obj, T operand) {
- unique_lock<mutex> _(some_mutex);
- T r = *obj;
- *obj |= operand;
- return r;
- }
-
- template <class T>
- T __atomic_fetch_xor_seq_cst(T volatile* obj, T operand) {
- unique_lock<mutex> _(some_mutex);
- T r = *obj;
- *obj ^= operand;
- return r;
- }
-
- void* __atomic_fetch_add_seq_cst(void* volatile* obj, ptrdiff_t operand) {
- unique_lock<mutex> _(some_mutex);
- void* r = *obj;
- (char*&)(*obj) += operand;
- return r;
- }
-
- void* __atomic_fetch_sub_seq_cst(void* volatile* obj, ptrdiff_t operand) {
- unique_lock<mutex> _(some_mutex);
- void* r = *obj;
- (char*&)(*obj) -= operand;
- return r;
- }
-
- void __atomic_thread_fence_seq_cst() {
- unique_lock<mutex> _(some_mutex);
- }
-
- void __atomic_signal_fence_seq_cst() {
- unique_lock<mutex> _(some_mutex);
- }
-
-One should consult the (currently draft) `C++ Standard <https://wg21.link/n3126>`_
+```cpp
+// T is one of:
+// bool, char, signed char, unsigned char, short, unsigned short,
+// int, unsigned int, long, unsigned long,
+// long long, unsigned long long, char16_t, char32_t, wchar_t, void*
+
+template <class T>
+T __atomic_load_seq_cst(T const volatile* obj) {
+ unique_lock<mutex> _(some_mutex);
+ return *obj;
+}
+
+template <class T>
+void __atomic_store_seq_cst(T volatile* obj, T desr) {
+ unique_lock<mutex> _(some_mutex);
+ *obj = desr;
+}
+
+template <class T>
+T __atomic_exchange_seq_cst(T volatile* obj, T desr) {
+ unique_lock<mutex> _(some_mutex);
+ T r = *obj;
+ *obj = desr;
+ return r;
+}
+
+template <class T>
+bool __atomic_compare_exchange_strong_seq_cst_seq_cst(T volatile* obj, T* exp, T desr) {
+ unique_lock<mutex> _(some_mutex);
+ if (std::memcmp(const_cast<T*>(obj), exp, sizeof(T)) == 0) {
+ std::memcpy(const_cast<T*>(obj), &desr, sizeof(T));
+ return true;
+ }
+ std::memcpy(exp, const_cast<T*>(obj), sizeof(T));
+ return false;
+}
+
+template <class T>
+bool __atomic_compare_exchange_weak_seq_cst_seq_cst(T volatile* obj, T* exp, T desr) {
+ unique_lock<mutex> _(some_mutex);
+ if (std::memcmp(const_cast<T*>(obj), exp, sizeof(T)) == 0)
+ {
+ std::memcpy(const_cast<T*>(obj), &desr, sizeof(T));
+ return true;
+ }
+ std::memcpy(exp, const_cast<T*>(obj), sizeof(T));
+ return false;
+}
+
+// T is one of:
+// char, signed char, unsigned char, short, unsigned short,
+// int, unsigned int, long, unsigned long,
+// long long, unsigned long long, char16_t, char32_t, wchar_t
+
+template <class T>
+T __atomic_fetch_add_seq_cst(T volatile* obj, T operand) {
+ unique_lock<mutex> _(some_mutex);
+ T r = *obj;
+ *obj += operand;
+ return r;
+}
+
+template <class T>
+T __atomic_fetch_sub_seq_cst(T volatile* obj, T operand) {
+ unique_lock<mutex> _(some_mutex);
+ T r = *obj;
+ *obj -= operand;
+ return r;
+}
+
+template <class T>
+T __atomic_fetch_and_seq_cst(T volatile* obj, T operand) {
+ unique_lock<mutex> _(some_mutex);
+ T r = *obj;
+ *obj &= operand;
+ return r;
+}
+
+template <class T>
+T __atomic_fetch_or_seq_cst(T volatile* obj, T operand) {
+ unique_lock<mutex> _(some_mutex);
+ T r = *obj;
+ *obj |= operand;
+ return r;
+}
+
+template <class T>
+T __atomic_fetch_xor_seq_cst(T volatile* obj, T operand) {
+ unique_lock<mutex> _(some_mutex);
+ T r = *obj;
+ *obj ^= operand;
+ return r;
+}
+
+void* __atomic_fetch_add_seq_cst(void* volatile* obj, ptrdiff_t operand) {
+ unique_lock<mutex> _(some_mutex);
+ void* r = *obj;
+ (char*&)(*obj) += operand;
+ return r;
+}
+
+void* __atomic_fetch_sub_seq_cst(void* volatile* obj, ptrdiff_t operand) {
+ unique_lock<mutex> _(some_mutex);
+ void* r = *obj;
+ (char*&)(*obj) -= operand;
+ return r;
+}
+
+void __atomic_thread_fence_seq_cst() {
+ unique_lock<mutex> _(some_mutex);
+}
+
+void __atomic_signal_fence_seq_cst() {
+ unique_lock<mutex> _(some_mutex);
+}
+```
+
+One should consult the (currently draft) [C++ Standard](https://wg21.link/n3126)
for the details of the definitions for these operations. For example,
-``__atomic_compare_exchange_weak_seq_cst_seq_cst`` is allowed to fail
-spuriously while ``__atomic_compare_exchange_strong_seq_cst_seq_cst`` is not.
-
-If on your platform the lock-free definition of ``__atomic_compare_exchange_weak_seq_cst_seq_cst``
-would be the same as ``__atomic_compare_exchange_strong_seq_cst_seq_cst``, you may omit the
-``__atomic_compare_exchange_weak_seq_cst_seq_cst`` intrinsic without a performance cost. The
-library will prefer your implementation of ``__atomic_compare_exchange_strong_seq_cst_seq_cst``
-over its own definition for implementing ``__atomic_compare_exchange_weak_seq_cst_seq_cst``.
-That is, the library will arrange for ``__atomic_compare_exchange_weak_seq_cst_seq_cst`` to call
-``__atomic_compare_exchange_strong_seq_cst_seq_cst`` if you supply an intrinsic for the strong
+`__atomic_compare_exchange_weak_seq_cst_seq_cst` is allowed to fail
+spuriously while `__atomic_compare_exchange_strong_seq_cst_seq_cst` is not.
+
+If on your platform the lock-free definition of `__atomic_compare_exchange_weak_seq_cst_seq_cst`
+would be the same as `__atomic_compare_exchange_strong_seq_cst_seq_cst`, you may omit the
+`__atomic_compare_exchange_weak_seq_cst_seq_cst` intrinsic without a performance cost. The
+library will prefer your implementation of `__atomic_compare_exchange_strong_seq_cst_seq_cst`
+over its own definition for implementing `__atomic_compare_exchange_weak_seq_cst_seq_cst`.
+That is, the library will arrange for `__atomic_compare_exchange_weak_seq_cst_seq_cst` to call
+`__atomic_compare_exchange_strong_seq_cst_seq_cst` if you supply an intrinsic for the strong
version but not the weak.
-Taking advantage of weaker memory synchronization
--------------------------------------------------
+### Taking advantage of weaker memory synchronization
+
So far, all of the intrinsics presented require a **sequentially consistent** memory ordering.
That is, no loads or stores can move across the operation (just as if the library had locked
-that internal mutex). But ``<atomic>`` supports weaker memory ordering operations. In all,
+that internal mutex). But `<atomic>` supports weaker memory ordering operations. In all,
there are six memory orderings (listed here from strongest to weakest):
-.. code-block:: cpp
-
- memory_order_seq_cst
- memory_order_acq_rel
- memory_order_release
- memory_order_acquire
- memory_order_consume
- memory_order_relaxed
+```cpp
+memory_order_seq_cst
+memory_order_acq_rel
+memory_order_release
+memory_order_acquire
+memory_order_consume
+memory_order_relaxed
+```
-(See the `C++ Standard <https://wg21.link/n3126>`_ for the detailed definitions of each of these orderings).
+(See the [C++ Standard](https://wg21.link/n3126) for the detailed definitions of each of these orderings).
On some platforms, the compiler vendor can offer some or even all of the above
intrinsics at one or more weaker levels of memory synchronization. This might
-lead for example to not issuing an ``mfence`` instruction on the x86.
+lead for example to not issuing an `mfence` instruction on the x86.
If the compiler does not offer any given operation, at any given memory ordering
level, the library will automatically attempt to call the next highest memory
-ordering operation. This continues up to ``seq_cst``, and if that doesn't
-exist, then the library takes over and does the job with a ``mutex``. This
+ordering operation. This continues up to `seq_cst`, and if that doesn't
+exist, then the library takes over and does the job with a `mutex`. This
is a compile-time search and selection operation. At run time, the application
will only see the few inlined assembly instructions for the selected intrinsic.
Each intrinsic is appended with the 7-letter name of the memory ordering it
-addresses. For example a ``load`` with ``relaxed`` ordering is defined by:
-
-.. code-block:: cpp
+addresses. For example a `load` with `relaxed` ordering is defined by:
- T __atomic_load_relaxed(const volatile T* obj);
+```cpp
+T __atomic_load_relaxed(const volatile T* obj);
+```
And announced with:
-.. code-block:: cpp
+```cpp
+__has_feature(__atomic_load_relaxed_b) == 1 // bool
+__has_feature(__atomic_load_relaxed_c) == 1 // char
+__has_feature(__atomic_load_relaxed_a) == 1 // signed char
+...
+```
- __has_feature(__atomic_load_relaxed_b) == 1 // bool
- __has_feature(__atomic_load_relaxed_c) == 1 // char
- __has_feature(__atomic_load_relaxed_a) == 1 // signed char
- ...
-
-The ``__atomic_compare_exchange_strong(weak)`` intrinsics are parameterized
+The `__atomic_compare_exchange_strong(weak)` intrinsics are parameterized
on two memory orderings. The first ordering applies when the operation returns
-``true`` and the second ordering applies when the operation returns ``false``.
+`true` and the second ordering applies when the operation returns `false`.
-Not every memory ordering is appropriate for every operation. ``exchange``
-and the ``fetch_XXX`` operations support all 6. But ``load`` only supports
-``relaxed``, ``consume``, ``acquire`` and ``seq_cst``. ``store`` only supports
-``relaxed``, ``release``, and ``seq_cst``. The ``compare_exchange`` operations
+Not every memory ordering is appropriate for every operation. `exchange`
+and the `fetch_XXX` operations support all 6. But `load` only supports
+`relaxed`, `consume`, `acquire` and `seq_cst`. `store` only supports
+`relaxed`, `release`, and `seq_cst`. The `compare_exchange` operations
support the following 16 combinations out of the possible 36:
-.. code-block:: cpp
-
- relaxed_relaxed
- consume_relaxed
- consume_consume
- acquire_relaxed
- acquire_consume
- acquire_acquire
- release_relaxed
- release_consume
- release_acquire
- acq_rel_relaxed
- acq_rel_consume
- acq_rel_acquire
- seq_cst_relaxed
- seq_cst_consume
- seq_cst_acquire
- seq_cst_seq_cst
+```cpp
+relaxed_relaxed
+consume_relaxed
+consume_consume
+acquire_relaxed
+acquire_consume
+acquire_acquire
+release_relaxed
+release_consume
+release_acquire
+acq_rel_relaxed
+acq_rel_consume
+acq_rel_acquire
+seq_cst_relaxed
+seq_cst_consume
+seq_cst_acquire
+seq_cst_seq_cst
+```
Again, the compiler supplies intrinsics only for the strongest orderings where
it can make a difference. The library takes care of calling the weakest
supplied intrinsic that is as strong or stronger than the customer asked for.
-Note about ABI
-==============
+## Note about ABI
+
With any design, the (back end) compiler writer should note that the decision to
implement lock-free operations on any given type (or not) is an ABI-binding decision.
One can not change from treating a type as not lock free, to lock free (or vice-versa)
@@ -779,19 +773,19 @@ For example:
**TU1.cpp**:
-.. code-block:: cpp
-
- extern atomic<long long> A;
- int foo() { return A.compare_exchange_strong(w, x); }
-
+```cpp
+extern atomic<long long> A;
+int foo() { return A.compare_exchange_strong(w, x); }
+```
**TU2.cpp**:
-.. code-block:: cpp
+```cpp
+extern atomic<long long> A;
+void bar() { return A.compare_exchange_strong(y, z); }
+```
- extern atomic<long long> A;
- void bar() { return A.compare_exchange_strong(y, z); }
-
-If only **one** of these calls to ``compare_exchange_strong`` is implemented with
+If only **one** of these calls to `compare_exchange_strong` is implemented with
mutex-locked code, then that mutex-locked code will not be executed mutually
exclusively of the one implemented in a lock-free manner.
+
diff --git a/libcxx/docs/DesignDocs/CapturingConfigInfo.md b/libcxx/docs/DesignDocs/CapturingConfigInfo.md
index 402f4c7197c2f..b9083ed794f63 100644
--- a/libcxx/docs/DesignDocs/CapturingConfigInfo.md
+++ b/libcxx/docs/DesignDocs/CapturingConfigInfo.md
@@ -1,41 +1,33 @@
-==================================================
-Capturing configuration information in the headers
-==================================================
+# Capturing configuration information in the headers
-.. contents::
- :local:
+```{contents}
+:local: true
+```
-The Problem
-===========
+## The Problem
libc++ supports building the library with a number of different configuration options.
In order to support persistent configurations and reduce arbitrary preprocessor logic
in the headers, libc++ has a mechanism to capture configuration options in the
installed headers so they can be used in the rest of the code.
+## Design Goals
-Design Goals
-============
-
-* The solution should be simple, consistent and robust to avoid subtle bugs.
-
-* Developers should test the code the same way it will be deployed -- in other words,
+- The solution should be simple, consistent and robust to avoid subtle bugs.
+- Developers should test the code the same way it will be deployed -- in other words,
the headers used to run tests should be the same that we install in order
to avoid bugs creeping up.
-
-* It should allow different targets or flavors of the library to use a different
+- It should allow different targets or flavors of the library to use a different
configuration without having to duplicate all the libc++ headers.
+## The Solution
-The Solution
-============
-
-When you first configure libc++ using CMake, a ``__config_site`` file is generated
-to capture the various configuration options you selected. The ``__config`` header
-used by all other headers includes this ``__config_site`` header first in order to
+When you first configure libc++ using CMake, a `__config_site` file is generated
+to capture the various configuration options you selected. The `__config` header
+used by all other headers includes this `__config_site` header first in order to
get the correct configuration.
-The ``__config_site`` header is hence the only place where persistent configuration
+The `__config_site` header is hence the only place where persistent configuration
is stored in the library. That header essentially reflects how the vendor configured
the library. As we evolve the library, we can lift configuration options into that
header in order to reduce arbitrary hardcoded choices elsewhere in the code. For
@@ -45,24 +37,25 @@ configuring the library on that platform. This makes the "carve off" reusable in
other circumstances instead of tying it tightly to a single platform.
Furthermore, the Clang driver now looks for headers in a target-specific directory
-for libc++. By installing the ``__config_site`` header (and only that header) to
+for libc++. By installing the `__config_site` header (and only that header) to
this target-specific directory, it is possible to share the libc++ headers for
multiple targets, and only duplicate the persistent information located in the
-``__config_site`` header. For example:
+`__config_site` header. For example:
-.. code-block:: bash
+```bash
+include/c++/v1/
+ vector
+ map
+ etc...
- include/c++/v1/
- vector
- map
- etc...
+include/<targetA>/c++/v1/
+ __config_site
- include/<targetA>/c++/v1/
- __config_site
+include/<targetB>/c++/v1/
+ __config_site
+```
- include/<targetB>/c++/v1/
- __config_site
+When compiling for `targetA`, Clang will use the `__config_site` inside
+`include/<targetA>/c++/v1/`, and the corresponding `__config_site` for
+`targetB`.
-When compiling for ``targetA``, Clang will use the ``__config_site`` inside
-``include/<targetA>/c++/v1/``, and the corresponding ``__config_site`` for
-``targetB``.
diff --git a/libcxx/docs/DesignDocs/ExperimentalFeatures.md b/libcxx/docs/DesignDocs/ExperimentalFeatures.md
index f9b23493b2356..8522383c8bc3d 100644
--- a/libcxx/docs/DesignDocs/ExperimentalFeatures.md
+++ b/libcxx/docs/DesignDocs/ExperimentalFeatures.md
@@ -1,14 +1,12 @@
-=====================
-Experimental Features
-=====================
+# Experimental Features
-.. contents::
- :local:
+```{contents}
+:local: true
+```
-.. _experimental features:
+(experimental-features-1)=
-Overview
-========
+## Overview
Libc++ implements technical specifications (TSes) and ships them as experimental
features that users are free to try out. The goal is to allow getting feedback
@@ -20,8 +18,7 @@ is guaranteed, and experimental features are deprecated once the non-experimenta
equivalent has shipped in the library. This document outlines the details of
that process.
-Background
-==========
+## Background
The "end game" of a Technical Specification (TS) is to have the features in
there added to a future version of the C++ Standard. When this happens, the TS
@@ -29,182 +26,166 @@ can be retired. Sometimes, only part of at TS is added to the standard, and
the rest of the features may be incorporated into the next version of the TS.
Adoption leaves library implementors with two implementations of a feature,
-one in namespace ``std``, and the other in namespace ``std::experimental``.
+one in namespace `std`, and the other in namespace `std::experimental`.
The first one will continue to evolve (via issues and papers), while the other
will not. Gradually they will diverge. It's not good for users to have two
(subtly) different implementations of the same functionality in the same library.
-Design
-======
+## Design
When a feature is adopted into the main standard, we implement it in namespace
-``std``. Once that implementation is complete, we then create a deprecation
+`std`. Once that implementation is complete, we then create a deprecation
warning for the corresponding experimental feature warning users to move off
of it and to the now-standardized feature.
These deprecation warnings are guarded by a macro of the form
-``_LIBCPP_NO_EXPERIMENTAL_DEPRECATION_WARNING_<FEATURE>``, which
+`_LIBCPP_NO_EXPERIMENTAL_DEPRECATION_WARNING_<FEATURE>`, which
can be defined by users to disable the deprecation warning. Whenever
possible, deprecation warnings are put on a per-declaration basis
-using the ``[[deprecated]]`` attribute, which also allows disabling
-the warnings using ``-Wno-deprecated-declarations``.
+using the `[[deprecated]]` attribute, which also allows disabling
+the warnings using `-Wno-deprecated-declarations`.
After **2 releases** of LLVM, the experimental feature is removed completely
(and the deprecation notice too). Using the experimental feature simply becomes
an error. Furthermore, when an experimental header becomes empty due to the
removal of the corresponding experimental feature, the header is removed.
Keeping the header around creates incorrect assumptions from users and breaks
-``__has_include``.
+`__has_include`.
+## Status of TSes
-Status of TSes
-==============
-
-Library Fundamentals TS `V1 <https://wg21.link/N4480>`__ and `V2 <https://wg21.link/N4617>`__
----------------------------------------------------------------------------------------------
+### Library Fundamentals TS [V1](https://wg21.link/N4480) and [V2](https://wg21.link/N4617)
Most (but not all) of the features of the LFTS were accepted into C++17.
-+---------+-------------------------------------------------------+--------------------+------------------------------------------+-------------------------+
-| Section | Feature | Shipped in ``std`` | To be removed from ``std::experimental`` | Notes |
-+=========+=======================================================+====================+==========================================+=========================+
-| 2.1 | ``uses_allocator construction`` | 5.0 | 7.0 | |
-+---------+-------------------------------------------------------+--------------------+------------------------------------------+-------------------------+
-| 3.1.2 | ``erased_type`` | | n/a | Not part of C++17 |
-+---------+-------------------------------------------------------+--------------------+------------------------------------------+-------------------------+
-| 3.2.1 | ``tuple_size_v`` | 5.0 | 7.0 | Removed |
-+---------+-------------------------------------------------------+--------------------+------------------------------------------+-------------------------+
-| 3.2.2 | ``apply`` | 5.0 | 7.0 | Removed |
-+---------+-------------------------------------------------------+--------------------+------------------------------------------+-------------------------+
-| 3.3.1 | All of the ``_v`` traits in ``<type_traits>`` | 5.0 | 7.0 | Removed |
-+---------+-------------------------------------------------------+--------------------+------------------------------------------+-------------------------+
-| 3.3.2 | ``invocation_type`` and ``raw_invocation_type`` | | n/a | Not part of C++17 |
-+---------+-------------------------------------------------------+--------------------+------------------------------------------+-------------------------+
-| 3.3.3 | Logical operator traits | 5.0 | 7.0 | Removed |
-+---------+-------------------------------------------------------+--------------------+------------------------------------------+-------------------------+
-| 3.3.3 | Detection Idiom | 5.0 | | Only partially in C++17 |
-+---------+-------------------------------------------------------+--------------------+------------------------------------------+-------------------------+
-| 3.4.1 | All of the ``_v`` traits in ``<ratio>`` | 5.0 | 7.0 | Removed |
-+---------+-------------------------------------------------------+--------------------+------------------------------------------+-------------------------+
-| 3.5.1 | All of the ``_v`` traits in ``<chrono>`` | 5.0 | 7.0 | Removed |
-+---------+-------------------------------------------------------+--------------------+------------------------------------------+-------------------------+
-| 3.6.1 | All of the ``_v`` traits in ``<system_error>`` | 5.0 | 7.0 | Removed |
-+---------+-------------------------------------------------------+--------------------+------------------------------------------+-------------------------+
-| 3.7 | ``propagate_const`` | | n/a | Not part of C++17 |
-+---------+-------------------------------------------------------+--------------------+------------------------------------------+-------------------------+
-| 4.2 | Enhancements to ``function`` | Not yet | | |
-+---------+-------------------------------------------------------+--------------------+------------------------------------------+-------------------------+
-| 4.3 | searchers | 7.0 | 9.0 | |
-+---------+-------------------------------------------------------+--------------------+------------------------------------------+-------------------------+
-| 5 | optional | 5.0 | 7.0 | Removed |
-+---------+-------------------------------------------------------+--------------------+------------------------------------------+-------------------------+
-| 6 | ``any`` | 5.0 | 7.0 | Removed |
-+---------+-------------------------------------------------------+--------------------+------------------------------------------+-------------------------+
-| 7 | ``string_view`` | 5.0 | 7.0 | Removed |
-+---------+-------------------------------------------------------+--------------------+------------------------------------------+-------------------------+
-| 8.2.1 | ``shared_ptr`` enhancements | Not yet | Never added | |
-+---------+-------------------------------------------------------+--------------------+------------------------------------------+-------------------------+
-| 8.2.2 | ``weak_ptr`` enhancements | Not yet | Never added | |
-+---------+-------------------------------------------------------+--------------------+------------------------------------------+-------------------------+
-| 8.5 | ``memory_resource`` | 16.0 | 18.0 | Removed |
-+---------+-------------------------------------------------------+--------------------+------------------------------------------+-------------------------+
-| 8.6 | ``polymorphic_allocator`` | 16.0 | 18.0 | Removed |
-+---------+-------------------------------------------------------+--------------------+------------------------------------------+-------------------------+
-| 8.7 | ``resource_adaptor`` | | n/a | Not part of C++17 |
-+---------+-------------------------------------------------------+--------------------+------------------------------------------+-------------------------+
-| 8.8 | Access to program-wide ``memory_resource`` objects | 16.0 | 18.0 | Removed |
-+---------+-------------------------------------------------------+--------------------+------------------------------------------+-------------------------+
-| 8.9 | Pool resource classes | 16.0 | 18.0 | Removed |
-+---------+-------------------------------------------------------+--------------------+------------------------------------------+-------------------------+
-| 8.10 | ``monotonic_buffer_resource`` | 16.0 | 18.0 | Removed |
-+---------+-------------------------------------------------------+--------------------+------------------------------------------+-------------------------+
-| 8.11 | Alias templates using polymorphic memory resources | 16.0 | 18.0 | Removed |
-+---------+-------------------------------------------------------+--------------------+------------------------------------------+-------------------------+
-| 8.12 | Non-owning pointers | | n/a | Not part of C++17 |
-+---------+-------------------------------------------------------+--------------------+------------------------------------------+-------------------------+
-| 11.2 | ``promise`` | | n/a | Not part of C++17 |
-+---------+-------------------------------------------------------+--------------------+------------------------------------------+-------------------------+
-| 11.3 | ``packaged_task`` | | n/a | Not part of C++17 |
-+---------+-------------------------------------------------------+--------------------+------------------------------------------+-------------------------+
-| 12.2 | ``search`` | 7.0 | 9.0 | |
-+---------+-------------------------------------------------------+--------------------+------------------------------------------+-------------------------+
-| 12.3 | ``sample`` | 5.0 | 7.0 | Removed |
-+---------+-------------------------------------------------------+--------------------+------------------------------------------+-------------------------+
-| 12.4 | ``shuffle`` | | | Not part of C++17 |
-+---------+-------------------------------------------------------+--------------------+------------------------------------------+-------------------------+
-| 13.1 | ``gcd`` and ``lcm`` | 5.0 | 7.0 | Removed |
-+---------+-------------------------------------------------------+--------------------+------------------------------------------+-------------------------+
-| 13.2 | Random number generation | | | Not part of C++17 |
-+---------+-------------------------------------------------------+--------------------+------------------------------------------+-------------------------+
-| 14 | Reflection Library | | | Not part of C++17 |
-+---------+-------------------------------------------------------+--------------------+------------------------------------------+-------------------------+
-
-
-`FileSystem TS <https://wg21.link/N4100>`__
--------------------------------------------
+| Section | Feature | Shipped in `std` | To be removed from `std::experimental` | Notes |
+| ------- | -------------------------------------------------- | ---------------- | -------------------------------------- | ----------------------- |
+| 2.1 | `uses_allocator construction` | 5.0 | 7.0 | |
+| 3.1.2 | `erased_type` | | n/a | Not part of C++17 |
+| 3.2.1 | `tuple_size_v` | 5.0 | 7.0 | Removed |
+| 3.2.2 | `apply` | 5.0 | 7.0 | Removed |
+| 3.3.1 | All of the `_v` traits in `<type_traits>` | 5.0 | 7.0 | Removed |
+| 3.3.2 | `invocation_type` and `raw_invocation_type` | | n/a | Not part of C++17 |
+| 3.3.3 | Logical operator traits | 5.0 | 7.0 | Removed |
+| 3.3.3 | Detection Idiom | 5.0 | | Only partially in C++17 |
+| 3.4.1 | All of the `_v` traits in `<ratio>` | 5.0 | 7.0 | Removed |
+| 3.5.1 | All of the `_v` traits in `<chrono>` | 5.0 | 7.0 | Removed |
+| 3.6.1 | All of the `_v` traits in `<system_error>` | 5.0 | 7.0 | Removed |
+| 3.7 | `propagate_const` | | n/a | Not part of C++17 |
+| 4.2 | Enhancements to `function` | Not yet | | |
+| 4.3 | searchers | 7.0 | 9.0 | |
+| 5 | optional | 5.0 | 7.0 | Removed |
+| 6 | `any` | 5.0 | 7.0 | Removed |
+| 7 | `string_view` | 5.0 | 7.0 | Removed |
+| 8.2.1 | `shared_ptr` enhancements | Not yet | Never added | |
+| 8.2.2 | `weak_ptr` enhancements | Not yet | Never added | |
+| 8.5 | `memory_resource` | 16.0 | 18.0 | Removed |
+| 8.6 | `polymorphic_allocator` | 16.0 | 18.0 | Removed |
+| 8.7 | `resource_adaptor` | | n/a | Not part of C++17 |
+| 8.8 | Access to program-wide `memory_resource` objects | 16.0 | 18.0 | Removed |
+| 8.9 | Pool resource classes | 16.0 | 18.0 | Removed |
+| 8.10 | `monotonic_buffer_resource` | 16.0 | 18.0 | Removed |
+| 8.11 | Alias templates using polymorphic memory resources | 16.0 | 18.0 | Removed |
+| 8.12 | Non-owning pointers | | n/a | Not part of C++17 |
+| 11.2 | `promise` | | n/a | Not part of C++17 |
+| 11.3 | `packaged_task` | | n/a | Not part of C++17 |
+| 12.2 | `search` | 7.0 | 9.0 | |
+| 12.3 | `sample` | 5.0 | 7.0 | Removed |
+| 12.4 | `shuffle` | | | Not part of C++17 |
+| 13.1 | `gcd` and `lcm` | 5.0 | 7.0 | Removed |
+| 13.2 | Random number generation | | | Not part of C++17 |
+| 14 | Reflection Library | | | Not part of C++17 |
+
+### [FileSystem TS](https://wg21.link/N4100)
+
The FileSystem TS was accepted (in totality) for C++17.
-The FileSystem TS implementation was shipped in namespace ``std`` in LLVM 7.0, and was
+The FileSystem TS implementation was shipped in namespace `std` in LLVM 7.0, and was
removed in LLVM 11.0 (due to the lack of deprecation warnings before LLVM 9.0).
-Parallelism TS `V1 <https://wg21.link/N4507>`__ and `V2 <https://wg21.link/N4706>`__
-------------------------------------------------------------------------------------
+### Parallelism TS [V1](https://wg21.link/N4507) and [V2](https://wg21.link/N4706)
+
Some (most) of the Parallelism TS was accepted for C++17.
We have not yet shipped an implementation of the Parallelism TS.
-`Coroutines TS <https://wg21.link/N4680>`__
--------------------------------------------
+### [Coroutines TS](https://wg21.link/N4680)
+
The Coroutines TS was accepted for C++20.
-An implementation of the Coroutines TS was shipped in LLVM 5.0 in namespace ``std::experimental``,
-and C++20 Coroutines shipped in LLVM 14.0. The implementation of the Coroutines TS in ``std::experimental``
+An implementation of the Coroutines TS was shipped in LLVM 5.0 in namespace `std::experimental`,
+and C++20 Coroutines shipped in LLVM 14.0. The implementation of the Coroutines TS in `std::experimental`
has been removed in LLVM 17.0.
-`Networking TS <https://wg21.link/N4656>`__
--------------------------------------------
+### [Networking TS](https://wg21.link/N4656)
+
The Networking TS is not yet part of a shipping standard, and there is discussion around removing it.
Libc++ never shipped an implementation of the Networking TS and does not plan to do so in the future,
unless the C++ Standards Committee expresses a desire to merge the Networking TS into the IS (which is
unlikely at this point).
-`Ranges TS <https://wg21.link/N4685>`__
----------------------------------------
+### [Ranges TS](https://wg21.link/N4685)
+
The Ranges TS was accepted for C++20.
We will not ship an implementation of the Ranges TS, however we are actively working on
the implementation of C++20 Ranges.
-`Concepts TS <https://wg21.link/N4641>`__
------------------------------------------
+### [Concepts TS](https://wg21.link/N4641)
+
The Concepts TS was accepted for C++20.
We will not ship an implementation of the Concepts TS, however we are shipping an
implementation of C++20 Concepts.
-`Concurrency TS <https://wg21.link/P0159>`__
---------------------------------------------
+### [Concurrency TS](https://wg21.link/P0159)
+
The Concurrency TS was adopted in Kona (2015).
None of the Concurrency TS was accepted for C++17.
We have not yet shipped an implementation of the Concurrency TS.
-.. +---------+-------------------------------------------------------+--------------------+------------------------------------------+-------------------------+
-.. | Section | Feature | Shipped in ``std`` | To be removed from ``std::experimental`` | Notes |
-.. +=========+=======================================================+====================+==========================================+=========================+
-.. | 2.3 | class template ``future`` | | | |
-.. +---------+-------------------------------------------------------+--------------------+------------------------------------------+-------------------------+
-.. | 2.4 | class template ``shared_future`` | | | |
-.. +---------+-------------------------------------------------------+--------------------+------------------------------------------+-------------------------+
-.. | 2.5 | class template ``promise`` | | | Only using ``future`` |
-.. +---------+-------------------------------------------------------+--------------------+------------------------------------------+-------------------------+
-.. | 2.6 | class template ``packaged_task`` | | | Only using ``future`` |
-.. +---------+-------------------------------------------------------+--------------------+------------------------------------------+-------------------------+
-.. | 2.7 | function template ``when_all`` | | | Not part of C++17 |
-.. +---------+-------------------------------------------------------+--------------------+------------------------------------------+-------------------------+
-.. | 2.8 | class template ``when_any_result`` | | | Not part of C++17 |
-.. +---------+-------------------------------------------------------+--------------------+------------------------------------------+-------------------------+
-.. | 2.9 | function template ``when_any`` | | | Not part of C++17 |
-.. +---------+-------------------------------------------------------+--------------------+------------------------------------------+-------------------------+
-.. | 2.10 | function template ``make_ready_future`` | | | Not part of C++17 |
-.. +---------+-------------------------------------------------------+--------------------+------------------------------------------+-------------------------+
-.. | 2.11 | function template ``make_exeptional_future`` | | | Not part of C++17 |
-.. +---------+-------------------------------------------------------+--------------------+------------------------------------------+-------------------------+
-.. | 3 | ``latches`` and ``barriers`` | | | Not part of C++17 |
-.. +---------+-------------------------------------------------------+--------------------+------------------------------------------+-------------------------+
-.. | 4 | Atomic Smart Pointers | | | Adopted for C++20 |
-.. +---------+-------------------------------------------------------+--------------------+------------------------------------------+-------------------------+
+% +---------+-------------------------------------------------------+--------------------+------------------------------------------+-------------------------+
+
+% | Section | Feature | Shipped in ``std`` | To be removed from ``std::experimental`` | Notes |
+
+% +=========+=======================================================+====================+==========================================+=========================+
+
+% | 2.3 | class template ``future`` | | | |
+
+% +---------+-------------------------------------------------------+--------------------+------------------------------------------+-------------------------+
+
+% | 2.4 | class template ``shared_future`` | | | |
+
+% +---------+-------------------------------------------------------+--------------------+------------------------------------------+-------------------------+
+
+% | 2.5 | class template ``promise`` | | | Only using ``future`` |
+
+% +---------+-------------------------------------------------------+--------------------+------------------------------------------+-------------------------+
+
+% | 2.6 | class template ``packaged_task`` | | | Only using ``future`` |
+
+% +---------+-------------------------------------------------------+--------------------+------------------------------------------+-------------------------+
+
+% | 2.7 | function template ``when_all`` | | | Not part of C++17 |
+
+% +---------+-------------------------------------------------------+--------------------+------------------------------------------+-------------------------+
+
+% | 2.8 | class template ``when_any_result`` | | | Not part of C++17 |
+
+% +---------+-------------------------------------------------------+--------------------+------------------------------------------+-------------------------+
+
+% | 2.9 | function template ``when_any`` | | | Not part of C++17 |
+
+% +---------+-------------------------------------------------------+--------------------+------------------------------------------+-------------------------+
+
+% | 2.10 | function template ``make_ready_future`` | | | Not part of C++17 |
+
+% +---------+-------------------------------------------------------+--------------------+------------------------------------------+-------------------------+
+
+% | 2.11 | function template ``make_exeptional_future`` | | | Not part of C++17 |
+
+% +---------+-------------------------------------------------------+--------------------+------------------------------------------+-------------------------+
+
+% | 3 | ``latches`` and ``barriers`` | | | Not part of C++17 |
+
+% +---------+-------------------------------------------------------+--------------------+------------------------------------------+-------------------------+
+
+% | 4 | Atomic Smart Pointers | | | Adopted for C++20 |
+
+% +---------+-------------------------------------------------------+--------------------+------------------------------------------+-------------------------+
+
diff --git a/libcxx/docs/DesignDocs/ExtendedCXX03Support.md b/libcxx/docs/DesignDocs/ExtendedCXX03Support.md
index 42d59db2bb7a4..40911fd6a2a3c 100644
--- a/libcxx/docs/DesignDocs/ExtendedCXX03Support.md
+++ b/libcxx/docs/DesignDocs/ExtendedCXX03Support.md
@@ -1,12 +1,10 @@
-=======================
-Extended C++03 Support
-=======================
+# Extended C++03 Support
-.. contents::
- :local:
+```{contents}
+:local: true
+```
-Overview
-========
+## Overview
libc++ is an implementation of the C++ standard library targeting C++11 or later.
@@ -16,34 +14,33 @@ by Clang.
This document tracks the C++11 extensions libc++ requires, the C++11 extensions it provides,
and how to write minimal C++11 inside libc++.
-Required C++11 Compiler Extensions
-==================================
+## Required C++11 Compiler Extensions
Clang provides a large subset of C++11 in C++03 as an extension. The features
-libc++ expects Clang to provide are:
+libc++ expects Clang to provide are:
-* Variadic templates.
-* RValue references and perfect forwarding.
-* Alias templates
-* defaulted and deleted Functions.
-* reference qualified Functions
-* ``auto``
+- Variadic templates.
+- RValue references and perfect forwarding.
+- Alias templates
+- defaulted and deleted Functions.
+- reference qualified Functions
+- `auto`
There are also features that Clang *does not* provide as an extension in C++03
mode. These include:
-* ``constexpr`` and ``noexcept``
-* Trailing return types.
-* ``>>`` without a space.
+- `constexpr` and `noexcept`
+- Trailing return types.
+- `>>` without a space.
+## Provided C++11 Library Extensions
-Provided C++11 Library Extensions
-=================================
+:::{warning}
+The C++11 extensions libc++ provides in C++03 are currently undergoing change. Existing extensions
+may be removed in the future. New users are strongly discouraged depending on these extension
+in new code.
-.. warning::
- The C++11 extensions libc++ provides in C++03 are currently undergoing change. Existing extensions
- may be removed in the future. New users are strongly discouraged depending on these extension
- in new code.
+This section will be updated once the libc++ developer community has further discussed the
+future of C++03 with libc++.
+:::
- This section will be updated once the libc++ developer community has further discussed the
- future of C++03 with libc++.
diff --git a/libcxx/docs/DesignDocs/FeatureTestMacros.md b/libcxx/docs/DesignDocs/FeatureTestMacros.md
index fc3a4e355d6a0..8799442319028 100644
--- a/libcxx/docs/DesignDocs/FeatureTestMacros.md
+++ b/libcxx/docs/DesignDocs/FeatureTestMacros.md
@@ -1,20 +1,16 @@
-===================
-Feature Test Macros
-===================
+# Feature Test Macros
-.. contents::
- :local:
+```{contents}
+:local: true
+```
-Overview
-========
+## Overview
Libc++ implements the C++ feature test macros as specified in the C++20 standard,
and before that in non-normative guiding documents
-(`See cppreference <https://en.cppreference.com/w/User:D41D8CD98F/feature_testing_macros>`_)
+([See cppreference](https://en.cppreference.com/w/User:D41D8CD98F/feature_testing_macros))
-
-Design
-======
+## Design
Feature test macros are tricky to track, implement, test, and document correctly.
They must be available from a list of headers, they may have different values in
@@ -28,12 +24,11 @@ the tests, and the documentation.
Therefore we maintain a SSoA in `libcxx/utils/generate_feature_test_macro_components.py`
which doubles as a script to generate the following components:
-* The `<version>` header.
-* The version tests under `support.limits.general`.
-* Documentation of libc++'s implementation of each macro.
+- The `<version>` header.
+- The version tests under `support.limits.general`.
+- Documentation of libc++'s implementation of each macro.
-Usage
-=====
+## Usage
The `generate_feature_test_macro_components.py` script is used to track and
update feature test macros in libc++.
@@ -41,3 +36,4 @@ update feature test macros in libc++.
Whenever a feature test macro is added or changed, the table should be updated
and the script should be re-ran. The script will clobber the existing test files,
the documentation and the `<version>` header.
+
diff --git a/libcxx/docs/DesignDocs/FileTimeType.md b/libcxx/docs/DesignDocs/FileTimeType.md
index 946c9e515fb9b..c625c8260e692 100644
--- a/libcxx/docs/DesignDocs/FileTimeType.md
+++ b/libcxx/docs/DesignDocs/FileTimeType.md
@@ -1,81 +1,74 @@
-==============
-File Time Type
-==============
+# File Time Type
-.. contents::
- :local:
+```{contents}
+:local: true
+```
-.. _file-time-type-motivation:
+(file-time-type-motivation)=
-Motivation
-==========
+## Motivation
The filesystem library provides interfaces for getting and setting the last
-write time of a file or directory. The interfaces use the ``file_time_type``
-type, which is a specialization of ``chrono::time_point`` for the
+write time of a file or directory. The interfaces use the `file_time_type`
+type, which is a specialization of `chrono::time_point` for the
"filesystem clock". According to [fs.filesystem.syn]
- trivial-clock is an implementation-defined type that satisfies the
- Cpp17TrivialClock requirements ([time.clock.req]) and that is capable of
- representing and measuring file time values. Implementations should ensure
- that the resolution and range of file_time_type reflect the operating
- system dependent resolution and range of file time values.
+> trivial-clock is an implementation-defined type that satisfies the
+> Cpp17TrivialClock requirements ([time.clock.req]) and that is capable of
+> representing and measuring file time values. Implementations should ensure
+> that the resolution and range of file_time_type reflect the operating
+> system dependent resolution and range of file time values.
-
-On POSIX systems, file times are represented using the ``timespec`` struct,
+On POSIX systems, file times are represented using the `timespec` struct,
which is defined as follows:
-.. code-block:: cpp
-
- struct timespec {
- time_t tv_sec;
- long tv_nsec;
- };
+```cpp
+struct timespec {
+ time_t tv_sec;
+ long tv_nsec;
+};
+```
-To represent the range and resolution of ``timespec``, we need to (A) have
-nanosecond resolution, and (B) use more than 64 bits (assuming a 64-bit ``time_t``).
+To represent the range and resolution of `timespec`, we need to (A) have
+nanosecond resolution, and (B) use more than 64 bits (assuming a 64-bit `time_t`).
-As the standard requires us to use the ``chrono`` interface, we have to define
+As the standard requires us to use the `chrono` interface, we have to define
our own filesystem clock which specifies the period and representation of
the time points and duration it provides. It will look like this:
-.. code-block:: cpp
-
- struct _FilesystemClock {
- using period = nano;
- using rep = TBD; // What is this?
+```cpp
+struct _FilesystemClock {
+ using period = nano;
+ using rep = TBD; // What is this?
- using duration = chrono::duration<rep, period>;
- using time_point = chrono::time_point<_FilesystemClock>;
+ using duration = chrono::duration<rep, period>;
+ using time_point = chrono::time_point<_FilesystemClock>;
- // ... //
- };
+ // ... //
+};
- using file_time_type = _FilesystemClock::time_point;
+using file_time_type = _FilesystemClock::time_point;
+```
-
-To get nanosecond resolution, we simply define ``period`` to be ``std::nano``.
+To get nanosecond resolution, we simply define `period` to be `std::nano`.
But what type can we use as the arithmetic representation that is capable
-of representing the range of the ``timespec`` struct?
+of representing the range of the `timespec` struct?
-Problems To Consider
-====================
+## Problems To Consider
Before considering solutions, let's consider the problems they should solve,
and how important solving those problems are:
-
-Having a Smaller Range than ``timespec``
-----------------------------------------
+### Having a Smaller Range than `timespec`
One solution to the range problem is to simply reduce the resolution of
-``file_time_type`` to be less than that of nanoseconds. This is what libc++'s
-initial implementation of ``file_time_type`` did; it's also what
-``std::system_clock`` does. As a result, it can represent time points about
+`file_time_type` to be less than that of nanoseconds. This is what libc++'s
+initial implementation of `file_time_type` did; it's also what
+`std::system_clock` does. As a result, it can represent time points about
292 thousand years on either side of the epoch, as opposed to only 292 years
at nanosecond resolution.
-``timespec`` can represent time points +/- 292 billion years from the epoch
+`timespec` can represent time points +/- 292 billion years from the epoch
(just in case you needed a time point 200 billion years before the big bang,
and with nanosecond resolution).
@@ -91,52 +84,49 @@ a value, then we should too. Our wrappers should not place artificial restrictio
on users that are not present in the underlying filesystem.
Having a smaller range that the underlying filesystem forces the
-implementation to report ``value_too_large`` errors when it encounters a time
-point that it can't represent. This can cause the call to ``last_write_time``
+implementation to report `value_too_large` errors when it encounters a time
+point that it can't represent. This can cause the call to `last_write_time`
to throw in cases where the user was confident the call should succeed. (See below)
-
-.. code-block:: cpp
-
- #include <filesystem>
- using namespace std::filesystem;
-
- // Set the times using the system interface.
- void set_file_times(const char* path, struct timespec ts) {
- timespec both_times[2];
- both_times[0] = ts;
- both_times[1] = ts;
- int result = ::utimensat(AT_FDCWD, path, both_times, 0);
- assert(result != -1);
- }
-
- // Called elsewhere to set the file time to something insane, and way
- // out of the 300 year range we might expect.
- void some_bad_persons_code() {
- struct timespec new_times;
- new_times.tv_sec = numeric_limits<time_t>::max();
- new_times.tv_nsec = 0;
- set_file_times("/tmp/foo", new_times); // OK, supported by most FSes
- }
-
- int main(int, char**) {
- path p = "/tmp/foo";
- file_status st = status(p);
- if (!exists(st) || !is_regular_file(st))
- return 1;
- if ((st.permissions() & perms::others_read) == perms::none)
- return 1;
- // It seems reasonable to assume this call should succeed.
- file_time_type tp = last_write_time(p); // BAD! Throws value_too_large.
- return 0;
- }
-
-
-Having a Smaller Resolution than ``timespec``
----------------------------------------------
+```cpp
+#include <filesystem>
+using namespace std::filesystem;
+
+// Set the times using the system interface.
+void set_file_times(const char* path, struct timespec ts) {
+ timespec both_times[2];
+ both_times[0] = ts;
+ both_times[1] = ts;
+ int result = ::utimensat(AT_FDCWD, path, both_times, 0);
+ assert(result != -1);
+}
+
+// Called elsewhere to set the file time to something insane, and way
+// out of the 300 year range we might expect.
+void some_bad_persons_code() {
+ struct timespec new_times;
+ new_times.tv_sec = numeric_limits<time_t>::max();
+ new_times.tv_nsec = 0;
+ set_file_times("/tmp/foo", new_times); // OK, supported by most FSes
+}
+
+int main(int, char**) {
+ path p = "/tmp/foo";
+ file_status st = status(p);
+ if (!exists(st) || !is_regular_file(st))
+ return 1;
+ if ((st.permissions() & perms::others_read) == perms::none)
+ return 1;
+ // It seems reasonable to assume this call should succeed.
+ file_time_type tp = last_write_time(p); // BAD! Throws value_too_large.
+ return 0;
+}
+```
+
+### Having a Smaller Resolution than `timespec`
As mentioned in the previous section, one way to solve the range problem
-is by reducing the resolution. But matching the range of ``timespec`` using a
+is by reducing the resolution. But matching the range of `timespec` using a
64 bit representation requires limiting the resolution to seconds.
So we might ask: Do users "need" nanosecond precision? Is seconds not good enough?
@@ -145,29 +135,27 @@ the underlying system interfaces? If it wasn't good enough for them, then it
isn't good enough for us. Our job is to match the filesystems range and
representation, not design it.
+### Having a Larger Range than `timespec`
-Having a Larger Range than ``timespec``
-----------------------------------------
-
-We should also consider the opposite problem of having a ``file_time_type``
-that is able to represent a larger range than ``timespec``. At least in
-this case ``last_write_time`` can be used to get and set all possible values
-supported by the underlying filesystem; meaning ``last_write_time(p)`` will
+We should also consider the opposite problem of having a `file_time_type`
+that is able to represent a larger range than `timespec`. At least in
+this case `last_write_time` can be used to get and set all possible values
+supported by the underlying filesystem; meaning `last_write_time(p)` will
never throw an overflow error when retrieving a value.
However, this introduces a new problem, where users are allowed to attempt to
create a time point beyond what the filesystem can represent. Two particular
-values which cause this are ``file_time_type::min()`` and
-``file_time_type::max()``. As a result, the following code would throw:
-
-.. code-block:: cpp
+values which cause this are `file_time_type::min()` and
+`file_time_type::max()`. As a result, the following code would throw:
- void test() {
- last_write_time("/tmp/foo", file_time_type::max()); // Throws
- last_write_time("/tmp/foo", file_time_type::min()); // Throws.
- }
+```cpp
+void test() {
+ last_write_time("/tmp/foo", file_time_type::max()); // Throws
+ last_write_time("/tmp/foo", file_time_type::min()); // Throws.
+}
+```
-Apart from cases explicitly using ``min`` and ``max``, I don't see users taking
+Apart from cases explicitly using `min` and `max`, I don't see users taking
a valid time point, adding a couple hundred billions of years in error,
and then trying to update a file's write time to that value very often.
@@ -179,15 +167,13 @@ I posit that we should only consider this concern *after* we have something
with at least the same range and resolution of the underlying filesystem. The
latter two problems are much more important to solve.
-Potential Solutions And Their Complications
-===========================================
+## Potential Solutions And Their Complications
-Source Code Portability Across Implementations
------------------------------------------------
+### Source Code Portability Across Implementations
-As we've discussed, ``file_time_type`` needs a representation that uses more
-than 64 bits. The possible solutions include using ``__int128_t``, emulating a
-128 bit integer using a class, or potentially defining a ``timespec`` like
+As we've discussed, `file_time_type` needs a representation that uses more
+than 64 bits. The possible solutions include using `__int128_t`, emulating a
+128 bit integer using a class, or potentially defining a `timespec` like
arithmetic type. All three will allow us to, at minimum, match the range
and resolution, and the last one might even allow us to match them exactly.
@@ -196,43 +182,42 @@ just the values they can represent. We need to consider the effects they will
have on users and their code. For example, each of them breaks the following
code in some way:
-.. code-block:: cpp
-
- // Bug caused by an unexpected 'rep' type returned by count.
- void print_time(path p) {
- // __int128_t doesn't have streaming operators, and neither would our
- // custom arithmetic types.
- cout << last_write_time(p).time_since_epoch().count() << endl;
- }
-
- // Overflow during creation bug.
- file_time_type timespec_to_file_time_type(struct timespec ts) {
- // woops! chrono::seconds and chrono::nanoseconds use a 64-bit representation
- // this may overflow before it's converted to a file_time_type.
- auto dur = seconds(ts.tv_sec) + nanoseconds(ts.tv_nsec);
- return file_time_type(dur);
- }
-
- file_time_type correct_timespec_to_file_time_type(struct timespec ts) {
- // This is the correct version of the above example, where we
- // avoid using the chrono typedefs as they're not sufficient.
- // Can we expect users to avoid this bug?
- using fs_seconds = chrono::duration<file_time_type::rep>;
- using fs_nanoseconds = chrono::duration<file_time_type::rep, nano>;
- auto dur = fs_seconds(ts.tv_sec) + fs_nanoseconds(tv.tv_nsec);
- return file_time_type(dur);
- }
-
- // Implicit truncation during conversion bug.
- intmax_t get_time_in_seconds(path p) {
- using fs_seconds = duration<file_time_type::rep, ratio<1, 1> >;
- auto tp = last_write_time(p);
-
- // This works with truncation for __int128_t, but what does it do for
- // our custom arithmetic types.
- return duration_cast<fs_seconds>().count();
- }
-
+```cpp
+// Bug caused by an unexpected 'rep' type returned by count.
+void print_time(path p) {
+ // __int128_t doesn't have streaming operators, and neither would our
+ // custom arithmetic types.
+ cout << last_write_time(p).time_since_epoch().count() << endl;
+}
+
+// Overflow during creation bug.
+file_time_type timespec_to_file_time_type(struct timespec ts) {
+ // woops! chrono::seconds and chrono::nanoseconds use a 64-bit representation
+ // this may overflow before it's converted to a file_time_type.
+ auto dur = seconds(ts.tv_sec) + nanoseconds(ts.tv_nsec);
+ return file_time_type(dur);
+}
+
+file_time_type correct_timespec_to_file_time_type(struct timespec ts) {
+ // This is the correct version of the above example, where we
+ // avoid using the chrono typedefs as they're not sufficient.
+ // Can we expect users to avoid this bug?
+ using fs_seconds = chrono::duration<file_time_type::rep>;
+ using fs_nanoseconds = chrono::duration<file_time_type::rep, nano>;
+ auto dur = fs_seconds(ts.tv_sec) + fs_nanoseconds(tv.tv_nsec);
+ return file_time_type(dur);
+}
+
+// Implicit truncation during conversion bug.
+intmax_t get_time_in_seconds(path p) {
+ using fs_seconds = duration<file_time_type::rep, ratio<1, 1> >;
+ auto tp = last_write_time(p);
+
+ // This works with truncation for __int128_t, but what does it do for
+ // our custom arithmetic types.
+ return duration_cast<fs_seconds>().count();
+}
+```
Each of the above examples would require a user to adjust their filesystem code
to the particular eccentricities of the representation, hopefully only in such
@@ -240,249 +225,242 @@ a way that the code is still portable across implementations.
At least some of the above issues are unavoidable, no matter what
representation we choose. But some representations may be quirkier than others,
-and, as I'll argue later, using an actual arithmetic type (``__int128_t``)
+and, as I'll argue later, using an actual arithmetic type (`__int128_t`)
provides the least aberrant behavior.
+### Chrono and `timespec` Emulation.
-Chrono and ``timespec`` Emulation.
-----------------------------------
-
-One of the options we've considered is using something akin to ``timespec``
-to represent the ``file_time_type``. It only seems natural seeing as that's
+One of the options we've considered is using something akin to `timespec`
+to represent the `file_time_type`. It only seems natural seeing as that's
what the underlying system uses, and because it might allow us to match
the range and resolution exactly. But would it work with chrono? And could
-it still act at all like a ``timespec`` struct?
+it still act at all like a `timespec` struct?
For ease of consideration, let's consider what the implementation might
look like.
-.. code-block:: cpp
-
- struct fs_timespec_rep {
- fs_timespec_rep(long long v)
- : tv_sec(v / nano::den), tv_nsec(v % nano::den)
- { }
- private:
- time_t tv_sec;
- long tv_nsec;
- };
- bool operator==(fs_timespec_rep, fs_timespec_rep);
- fs_int128_rep operator+(fs_timespec_rep, fs_timespec_rep);
- // ... arithmetic operators ... //
-
-The first thing to notice is that we can't construct ``fs_timespec_rep`` like
-a ``timespec`` by passing ``{secs, nsecs}``. Instead we're limited to
+```cpp
+struct fs_timespec_rep {
+ fs_timespec_rep(long long v)
+ : tv_sec(v / nano::den), tv_nsec(v % nano::den)
+ { }
+private:
+ time_t tv_sec;
+ long tv_nsec;
+};
+bool operator==(fs_timespec_rep, fs_timespec_rep);
+fs_int128_rep operator+(fs_timespec_rep, fs_timespec_rep);
+// ... arithmetic operators ... //
+```
+
+The first thing to notice is that we can't construct `fs_timespec_rep` like
+a `timespec` by passing `{secs, nsecs}`. Instead we're limited to
constructing it from a single 64-bit integer.
-We also can't allow the user to inspect the ``tv_sec`` or ``tv_nsec`` values
-directly. A ``chrono::duration`` represents its value as a tick period and a
-number of ticks stored using ``rep``. The representation is unaware of the
-tick period it is being used to represent, but ``timespec`` is setup to assume
-a nanosecond tick period; which is the only case where the names ``tv_sec``
-and ``tv_nsec`` match the values they store.
+We also can't allow the user to inspect the `tv_sec` or `tv_nsec` values
+directly. A `chrono::duration` represents its value as a tick period and a
+number of ticks stored using `rep`. The representation is unaware of the
+tick period it is being used to represent, but `timespec` is setup to assume
+a nanosecond tick period; which is the only case where the names `tv_sec`
+and `tv_nsec` match the values they store.
-When we convert a nanosecond duration to seconds, ``fs_timespec_rep`` will
-use ``tv_sec`` to represent the number of giga seconds, and ``tv_nsec`` the
+When we convert a nanosecond duration to seconds, `fs_timespec_rep` will
+use `tv_sec` to represent the number of giga seconds, and `tv_nsec` the
remaining seconds. Let's consider how this might cause a bug were users allowed
to manipulate the fields directly.
-.. code-block:: cpp
-
- template <class Period>
- timespec convert_to_timespec(duration<fs_time_rep, Period> dur) {
- fs_timespec_rep rep = dur.count();
- return {rep.tv_sec, rep.tv_nsec}; // Oops! Period may not be nanoseconds.
- }
-
- template <class Duration>
- Duration convert_to_duration(timespec ts) {
- Duration dur({ts.tv_sec, ts.tv_nsec}); // Oops! Period may not be nanoseconds.
- return file_time_type(dur);
- file_time_type tp = last_write_time(p);
- auto dur =
- }
-
- time_t extract_seconds(file_time_type tp) {
- // Converting to seconds is a silly bug, but I could see it happening.
- using SecsT = chrono::duration<file_time_type::rep, ratio<1, 1>>;
- auto secs = duration_cast<Secs>(tp.time_since_epoch());
- // tv_sec is now representing gigaseconds.
- return secs.count().tv_sec; // Oops!
- }
-
-Despite ``fs_timespec_rep`` not being usable in any manner resembling
-``timespec``, it still might buy us our goal of matching its range exactly,
+```cpp
+template <class Period>
+timespec convert_to_timespec(duration<fs_time_rep, Period> dur) {
+ fs_timespec_rep rep = dur.count();
+ return {rep.tv_sec, rep.tv_nsec}; // Oops! Period may not be nanoseconds.
+}
+
+template <class Duration>
+Duration convert_to_duration(timespec ts) {
+ Duration dur({ts.tv_sec, ts.tv_nsec}); // Oops! Period may not be nanoseconds.
+ return file_time_type(dur);
+ file_time_type tp = last_write_time(p);
+ auto dur =
+}
+
+time_t extract_seconds(file_time_type tp) {
+ // Converting to seconds is a silly bug, but I could see it happening.
+ using SecsT = chrono::duration<file_time_type::rep, ratio<1, 1>>;
+ auto secs = duration_cast<Secs>(tp.time_since_epoch());
+ // tv_sec is now representing gigaseconds.
+ return secs.count().tv_sec; // Oops!
+}
+```
+
+Despite `fs_timespec_rep` not being usable in any manner resembling
+`timespec`, it still might buy us our goal of matching its range exactly,
right?
Sort of. Chrono provides a specialization point which specifies the minimum
and maximum values for a custom representation. It looks like this:
-.. code-block:: cpp
-
- template <>
- struct duration_values<fs_timespec_rep> {
- static fs_timespec_rep zero();
- static fs_timespec_rep min();
- static fs_timespec_rep max() { // assume friendship.
- fs_timespec_rep val;
- val.tv_sec = numeric_limits<time_t>::max();
- val.tv_nsec = nano::den - 1;
- return val;
- }
- };
+```cpp
+template <>
+struct duration_values<fs_timespec_rep> {
+ static fs_timespec_rep zero();
+ static fs_timespec_rep min();
+ static fs_timespec_rep max() { // assume friendship.
+ fs_timespec_rep val;
+ val.tv_sec = numeric_limits<time_t>::max();
+ val.tv_nsec = nano::den - 1;
+ return val;
+ }
+};
+```
-Notice that ``duration_values`` doesn't tell the representation what tick
+Notice that `duration_values` doesn't tell the representation what tick
period it's actually representing. This would indeed correctly limit the range
-of ``duration<fs_timespec_rep, nano>`` to exactly that of ``timespec``. But
+of `duration<fs_timespec_rep, nano>` to exactly that of `timespec`. But
nanoseconds isn't the only tick period it will be used to represent. For
example:
-.. code-block:: cpp
-
- void test() {
- using rep = file_time_type::rep;
- using fs_nsec = duration<rep, nano>;
- using fs_sec = duration<rep>;
- fs_nsec nsecs(fs_seconds::max()); // Truncates
- }
+```cpp
+void test() {
+ using rep = file_time_type::rep;
+ using fs_nsec = duration<rep, nano>;
+ using fs_sec = duration<rep>;
+ fs_nsec nsecs(fs_seconds::max()); // Truncates
+}
+```
Though the above example may appear silly, I think it follows from the incorrect
-notion that using a ``timespec`` rep in chrono actually makes it act as if it
-were an actual ``timespec``.
+notion that using a `timespec` rep in chrono actually makes it act as if it
+were an actual `timespec`.
-Interactions with 32-bit ``time_t``
------------------------------------
+### Interactions with 32-bit `time_t`
-Up until now we've only be considering cases where ``time_t`` is 64 bits, but what
-about 32-bit systems/builds where ``time_t`` is 32 bits? (this is the common case
+Up until now we've only be considering cases where `time_t` is 64 bits, but what
+about 32-bit systems/builds where `time_t` is 32 bits? (this is the common case
for 32-bit builds).
-When ``time_t`` is 32 bits, we can implement ``file_time_type`` simply using 64-bit
-``long long``. There is no need to get either ``__int128_t`` or ``timespec`` emulation
+When `time_t` is 32 bits, we can implement `file_time_type` simply using 64-bit
+`long long`. There is no need to get either `__int128_t` or `timespec` emulation
involved. And nor should we, as it would suffer from the numerous complications
described by this paper.
Obviously our implementation for 32-bit builds should act as similarly to the
64-bit build as possible. Code which compiles in one, should compile in the other.
-This consideration is important when choosing between ``__int128_t`` and
-emulating ``timespec``. The solution which provides the most uniformity with
+This consideration is important when choosing between `__int128_t` and
+emulating `timespec`. The solution which provides the most uniformity with
the least eccentricity is the preferable one.
-Summary
-=======
+## Summary
-The ``file_time_type`` time point is used to represent the write times for files.
+The `file_time_type` time point is used to represent the write times for files.
Its job is to act as part of a C++ wrapper for less ideal system interfaces. The
-underlying filesystem uses the ``timespec`` struct for the same purpose.
+underlying filesystem uses the `timespec` struct for the same purpose.
-However, the initial implementation of ``file_time_type`` could not represent
-either the range or resolution of ``timespec``, making it unsuitable. Fixing
+However, the initial implementation of `file_time_type` could not represent
+either the range or resolution of `timespec`, making it unsuitable. Fixing
this requires an implementation which uses more than 64 bits to store the
time point.
-We primarily considered two solutions: Using ``__int128_t`` and using a
-arithmetic emulation of ``timespec``. Each has its pros and cons, and both
+We primarily considered two solutions: Using `__int128_t` and using a
+arithmetic emulation of `timespec`. Each has its pros and cons, and both
come with more than one complication.
-The Potential Solutions
------------------------
+### The Potential Solutions
-``long long`` - The Status Quo
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+#### `long long` - The Status Quo
Pros:
-* As a type ``long long`` plays the nicest with others:
+- As a type `long long` plays the nicest with others:
- * It works with streaming operators and other library entities which support
- builtin integer types, but don't support ``__int128_t``.
- * Its the representation used by chrono's ``nanosecond`` and ``second`` typedefs.
+ - It works with streaming operators and other library entities which support
+ builtin integer types, but don't support `__int128_t`.
+ - Its the representation used by chrono's `nanosecond` and `second` typedefs.
Cons:
-* It cannot provide the same resolution as ``timespec`` unless we limit it
+- It cannot provide the same resolution as `timespec` unless we limit it
to a range of +/- 300 years from the epoch.
-* It cannot provide the same range as ``timespec`` unless we limit its resolution
+- It cannot provide the same range as `timespec` unless we limit its resolution
to seconds.
-* ``last_write_time`` has to report an error when the time reported by the filesystem
+- `last_write_time` has to report an error when the time reported by the filesystem
is unrepresentable.
-__int128_t
-~~~~~~~~~~~
+#### \_\_int128_t
Pros:
-* It is an integer type.
-* It makes the implementation simple and efficient.
-* Acts exactly like other arithmetic types.
-* Can be implicitly converted to a builtin integer type by the user.
+- It is an integer type.
- * This is important for doing things like:
+- It makes the implementation simple and efficient.
- .. code-block:: cpp
+- Acts exactly like other arithmetic types.
- void c_interface_using_time_t(const char* p, time_t);
+- Can be implicitly converted to a builtin integer type by the user.
- void foo(path p) {
- file_time_type tp = last_write_time(p);
- time_t secs = duration_cast<seconds>(tp.time_since_epoch()).count();
- c_interface_using_time_t(p.c_str(), secs);
- }
+ - This is important for doing things like:
+
+ ```cpp
+ void c_interface_using_time_t(const char* p, time_t);
+
+ void foo(path p) {
+ file_time_type tp = last_write_time(p);
+ time_t secs = duration_cast<seconds>(tp.time_since_epoch()).count();
+ c_interface_using_time_t(p.c_str(), secs);
+ }
+ ```
Cons:
-* It isn't always available (but on 64-bit machines, it normally is).
-* It causes ``file_time_type`` to have a larger range than ``timespec``.
-* It doesn't always act the same as other builtin integer types. For example
- with ``cout`` or ``to_string``.
-* Allows implicit truncation to 64-bit integers.
-* It can be implicitly converted to a builtin integer type by the user,
+- It isn't always available (but on 64-bit machines, it normally is).
+- It causes `file_time_type` to have a larger range than `timespec`.
+- It doesn't always act the same as other builtin integer types. For example
+ with `cout` or `to_string`.
+- Allows implicit truncation to 64-bit integers.
+- It can be implicitly converted to a builtin integer type by the user,
truncating its value.
-Arithmetic ``timespec`` Emulation
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+#### Arithmetic `timespec` Emulation
Pros:
-* It has the exact same range and resolution of ``timespec`` when representing
+- It has the exact same range and resolution of `timespec` when representing
a nanosecond tick period.
-* It's always available, unlike ``__int128_t``.
+- It's always available, unlike `__int128_t`.
Cons:
-* It has a larger range when representing any period longer than a nanosecond.
-* Doesn't actually allow users to use it like a ``timespec``.
-* The required representation of using ``tv_sec`` to store the giga tick count
- and ``tv_nsec`` to store the remainder adds nothing over a 128 bit integer,
+- It has a larger range when representing any period longer than a nanosecond.
+- Doesn't actually allow users to use it like a `timespec`.
+- The required representation of using `tv_sec` to store the giga tick count
+ and `tv_nsec` to store the remainder adds nothing over a 128 bit integer,
but complicates a lot.
-* It isn't a builtin integer type, and can't be used anything like one.
-* Chrono can be made to work with it, but not nicely.
-* Emulating arithmetic classes come with their own host of problems regarding
+- It isn't a builtin integer type, and can't be used anything like one.
+- Chrono can be made to work with it, but not nicely.
+- Emulating arithmetic classes come with their own host of problems regarding
overload resolution (Each operator needs three SFINAE constrained versions of
it in order to act like builtin integer types).
-* It offers little over simply using ``__int128_t``.
-* It acts the most differently than implementations using an actual integer type,
+- It offers little over simply using `__int128_t`.
+- It acts the most differently than implementations using an actual integer type,
which has a high chance of breaking source compatibility.
+## Selected Solution - Using `__int128_t`
-Selected Solution - Using ``__int128_t``
-=========================================
+The solution I selected for libc++ is using `__int128_t` when available,
+and otherwise falling back to using `long long` with nanosecond precision.
-The solution I selected for libc++ is using ``__int128_t`` when available,
-and otherwise falling back to using ``long long`` with nanosecond precision.
-
-When ``__int128_t`` is available, or when ``time_t`` is 32-bits, the implementation
-provides same resolution and a greater range than ``timespec``. Otherwise
+When `__int128_t` is available, or when `time_t` is 32-bits, the implementation
+provides same resolution and a greater range than `timespec`. Otherwise
it still provides the same resolution, but is limited to a range of +/- 300
-years. This final case should be rather rare, as ``__int128_t``
-is normally available in 64-bit builds, and ``time_t`` is normally 32-bits
+years. This final case should be rather rare, as `__int128_t`
+is normally available in 64-bit builds, and `time_t` is normally 32-bits
during 32-bit builds.
-Although falling back to ``long long`` and nanosecond precision is less than
+Although falling back to `long long` and nanosecond precision is less than
ideal, it also happens to be the implementation provided by both libstdc++
and MSVC. (So that makes it better, right?)
-Although the ``timespec`` emulation solution is feasible and would largely
+Although the `timespec` emulation solution is feasible and would largely
do what we want, it comes with too many complications, potential problems
and discrepancies when compared to "normal" chrono time points and durations.
@@ -492,4 +470,5 @@ to expect them to tolerate and work around these differences. And once
we commit to an ABI it will be too late to change. Committing to this seems
risky.
-Therefore, ``__int128_t`` seems like the better solution.
+Therefore, `__int128_t` seems like the better solution.
+
diff --git a/libcxx/docs/DesignDocs/HeaderRemovalPolicy.md b/libcxx/docs/DesignDocs/HeaderRemovalPolicy.md
index e52b625fae8bc..5b6b62576d86b 100644
--- a/libcxx/docs/DesignDocs/HeaderRemovalPolicy.md
+++ b/libcxx/docs/DesignDocs/HeaderRemovalPolicy.md
@@ -1,19 +1,16 @@
-=====================
-Header Removal Policy
-=====================
+# Header Removal Policy
-Policy
-------
+## Policy
Libc++ is in the process of splitting larger headers into smaller modular
headers. This makes it possible to remove these large headers from other
-headers. For example, instead of including ``<algorithm>`` entirely it is
+headers. For example, instead of including `<algorithm>` entirely it is
possible to only include the headers for the algorithms used. When the
Standard indirectly adds additional header includes, using the smaller headers
-aids reducing the growth of top-level headers. For example ``<atomic>`` uses
-``std::chrono::nanoseconds`` and included ``<chrono>``. In C++20 ``<chrono>``
-requires ``<format>`` which adds several other headers (like ``<string>``,
-``<optional>``, ``<tuple>``) which are not needed in ``<atomic>``.
+aids reducing the growth of top-level headers. For example `<atomic>` uses
+`std::chrono::nanoseconds` and included `<chrono>`. In C++20 `<chrono>`
+requires `<format>` which adds several other headers (like `<string>`,
+`<optional>`, `<tuple>`) which are not needed in `<atomic>`.
The benefit of using minimal headers is that the size of libc++'s top-level
headers becomes smaller. This improves the compilation time when users include
@@ -23,7 +20,7 @@ to port headers to platforms with reduced functionality.
A disadvantage is that users unknowingly depend on these transitive includes.
Thus removing an include might break their build after upgrading a newer
version of libc++ by reducing the set of declarations provided by a header.
-For example, ``<algorithm>`` is often forgotten but using algorithms will
+For example, `<algorithm>` is often forgotten but using algorithms will
still work through those transitive includes. This problem is solved by modules,
however in practice most people do not use modules (yet).
@@ -42,13 +39,13 @@ do it in a user-friendly way, again within reason. For libc++ developers, this
means that any transitive include removal of a public header must be guarded by
something of the form:
-.. code-block:: cpp
-
- #if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 23
- # include <algorithm>
- # include <iterator>
- # include <utility>
- #endif
+```cpp
+#if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 23
+# include <algorithm>
+# include <iterator>
+# include <utility>
+#endif
+```
Occasionally, private headers may also be included transitively for backwards
compatibility in the same manner. We currently strive to provide backwards
@@ -56,16 +53,14 @@ compatibility on the set of declarations provided by a header in all Standard
modes starting with **C++23**. Note that this is very difficult to actually
enforce, so this is done only on a best effort basis.
-When users define ``_LIBCPP_REMOVE_TRANSITIVE_INCLUDES``, libc++ will not include
+When users define `_LIBCPP_REMOVE_TRANSITIVE_INCLUDES`, libc++ will not include
transitive headers, regardless of the language version. This can be useful for users
to aid the transition to a newer language version, or by users who simply want to
make sure they include what they use in their code. However, note that defining this
macro means that the set of declarations and transitive includes provided by the library
may change from release to release, which can break your code.
-
-Rationale
----------
+## Rationale
Removing headers is not only an issue for software developers, but also for
vendors. When a vendor updates libc++ several of their upstream packages might
@@ -73,3 +68,4 @@ fail to compile, forcing them to fix these packages or file a bug with their
upstream packages. Usually upgrading software to a new language standard is
done explicitly by software developers. This means they most likely will
discover and fix the missing includes, lessening the burden for the vendors.
+
diff --git a/libcxx/docs/DesignDocs/NoexceptPolicy.md b/libcxx/docs/DesignDocs/NoexceptPolicy.md
index 74c8ca406ed84..bfefb48d86897 100644
--- a/libcxx/docs/DesignDocs/NoexceptPolicy.md
+++ b/libcxx/docs/DesignDocs/NoexceptPolicy.md
@@ -1,13 +1,11 @@
-===================
-``noexcept`` Policy
-===================
+# `noexcept` Policy
-Extended applications of ``noexcept``
--------------------------------------
+## Extended applications of `noexcept`
As of version 13 libc++ may mark functions that do not throw (i.e.,
-"Throws: Nothing") as ``noexcept``. This has two primary consequences:
+"Throws: Nothing") as `noexcept`. This has two primary consequences:
first, functions might not report precondition violations by throwing.
Second, user-provided functions, such as custom predicates or custom
traits, which throw might not be propagated up to the caller (unless
specified otherwise by the Standard).
+
diff --git a/libcxx/docs/DesignDocs/PSTLIntegration.md b/libcxx/docs/DesignDocs/PSTLIntegration.md
index e2b9e89f050eb..111e5e94953a1 100644
--- a/libcxx/docs/DesignDocs/PSTLIntegration.md
+++ b/libcxx/docs/DesignDocs/PSTLIntegration.md
@@ -1,22 +1,21 @@
-================
-PSTL integration
-================
+# PSTL integration
The PSTL (or Parallel STL) project is quite complex in its current form and does not provide everything that libc++
-requires, for example ``_LIBCPP_HIDE_FROM_ABI`` or similar annotations and including granularized headers. Furthermore,
+requires, for example `_LIBCPP_HIDE_FROM_ABI` or similar annotations and including granularized headers. Furthermore,
the PSTL provides various layers of indirection that make sense in a generic implementation of the parallel algorithms,
but are unnecessarily complex in the context of a single standard library implementation. Because of these drawbacks, we
decided to adopt a modified PSTL in libc++. Specifically, the goals of the modified PSTL are
-- No ``<__pstl_algorithm>`` and similar glue headers -- instead, the implementation files are included directly in
- ``<algorithm>`` and friends.
-- No ``<pstl/internal/algorithm_impl.h>`` and ``<pstl/internal/algorithm_fwd.h>`` headers and friends -- these contain
+- No `<__pstl_algorithm>` and similar glue headers -- instead, the implementation files are included directly in
+ `<algorithm>` and friends.
+- No `<pstl/internal/algorithm_impl.h>` and `<pstl/internal/algorithm_fwd.h>` headers and friends -- these contain
the implementation and forward declarations for internal functions respectively. The implementation lives inside
- ``<__algorithm/pstl_any_of.h>`` and friends, and the forward declarations are not needed inside libc++.
-- No ``<pstl/internal/glue_algorithm_defs.h>`` and ``<pstl/internal/glue_algorithm_impl.h>`` headers and friends --
- these contain the public API. It lives inside ``<__algorithm/pstl_any_of.h>`` and friends instead.
+ `<__algorithm/pstl_any_of.h>` and friends, and the forward declarations are not needed inside libc++.
+- No `<pstl/internal/glue_algorithm_defs.h>` and `<pstl/internal/glue_algorithm_impl.h>` headers and friends --
+ these contain the public API. It lives inside `<__algorithm/pstl_any_of.h>` and friends instead.
- The headers implementing backends are kept with as few changes as possible to make it easier to keep the backends in
sync with the backends from the original PSTL.
-- The configuration headers ``__pstl_config_site.in`` and ``pstl_config.h`` are removed, and any required configuration
- is done inside ``__config_site.in`` and ``__config`` respectively.
+- The configuration headers `__pstl_config_site.in` and `pstl_config.h` are removed, and any required configuration
+ is done inside `__config_site.in` and `__config` respectively.
- libc++-style tests for the public PSTL API
+
diff --git a/libcxx/docs/DesignDocs/ThreadingSupportAPI.md b/libcxx/docs/DesignDocs/ThreadingSupportAPI.md
index d103c49e25952..88894cb8d1416 100644
--- a/libcxx/docs/DesignDocs/ThreadingSupportAPI.md
+++ b/libcxx/docs/DesignDocs/ThreadingSupportAPI.md
@@ -1,37 +1,33 @@
-=====================
-Threading Support API
-=====================
+# Threading Support API
-.. contents::
- :local:
+```{contents}
+:local: true
+```
-Overview
-========
+## Overview
Libc++ supports using multiple different threading models and configurations
-to implement the threading parts of libc++, including ``<thread>`` and ``<mutex>``.
+to implement the threading parts of libc++, including `<thread>` and `<mutex>`.
These different models provide entirely different interfaces from each
other. To address this libc++ wraps the underlying threading API in a new and
consistent API, which it uses internally to implement threading primitives.
-The ``<__thread/support.h>`` header is where libc++ defines its internal
+The `<__thread/support.h>` header is where libc++ defines its internal
threading interface. It documents the functions and declarations required
to fullfil the internal threading interface.
-External Threading API and the ``<__external_threading>`` header
-================================================================
+## External Threading API and the `<__external_threading>` header
In order to support vendors with custom threading API's libc++ allows the
entire internal threading interface to be provided by an external,
vendor provided, header.
-When ``_LIBCPP_HAS_THREAD_API_EXTERNAL`` is defined the ``<__thread/support.h>``
-header simply forwards to the ``<__external_threading>`` header (which must exist).
-It is expected that the ``<__external_threading>`` header provide the exact
-interface normally provided by ``<__thread/support.h>``.
+When `_LIBCPP_HAS_THREAD_API_EXTERNAL` is defined the `<__thread/support.h>`
+header simply forwards to the `<__external_threading>` header (which must exist).
+It is expected that the `<__external_threading>` header provide the exact
+interface normally provided by `<__thread/support.h>`.
-External Threading Library
-==========================
+## External Threading Library
libc++ can be compiled with its internal threading API delegating to an external
library. Such a configuration is useful for library vendors who wish to
@@ -39,29 +35,34 @@ distribute a thread-agnostic libc++ library, where the users of the library are
expected to provide the implementation of the libc++ internal threading API.
On a production setting, this would be achieved through a custom
-``<__external_threading>`` header, which declares the libc++ internal threading
+`<__external_threading>` header, which declares the libc++ internal threading
API but leaves out the implementation.
-Threading Configuration Macros
-==============================
+## Threading Configuration Macros
-**_LIBCPP_HAS_THREADS**
- This macro is set to 1 when libc++ is built with threading support. Otherwise
+**\_LIBCPP_HAS_THREADS**
+
+: This macro is set to 1 when libc++ is built with threading support. Otherwise
it is set to 0. It should not be manually defined by the user.
-**_LIBCPP_HAS_THREAD_API_EXTERNAL**
- This macro is defined when libc++ should use the ``<__external_threading>``
+**\_LIBCPP_HAS_THREAD_API_EXTERNAL**
+
+: This macro is defined when libc++ should use the `<__external_threading>`
header to provide the internal threading API. This macro overrides
- ``_LIBCPP_HAS_THREAD_API_PTHREAD``.
+ `_LIBCPP_HAS_THREAD_API_PTHREAD`.
+
+**\_LIBCPP_HAS_THREAD_API_PTHREAD**
-**_LIBCPP_HAS_THREAD_API_PTHREAD**
- This macro is defined when libc++ should use POSIX threads to implement the
+: This macro is defined when libc++ should use POSIX threads to implement the
internal threading API.
-**_LIBCPP_HAS_THREAD_API_C11**
- This macro is defined when libc++ should use C11 threads to implement the
+**\_LIBCPP_HAS_THREAD_API_C11**
+
+: This macro is defined when libc++ should use C11 threads to implement the
internal threading API.
-**_LIBCPP_HAS_THREAD_API_WIN32**
- This macro is defined when libc++ should use Win32 threads to implement the
+**\_LIBCPP_HAS_THREAD_API_WIN32**
+
+: This macro is defined when libc++ should use Win32 threads to implement the
internal threading API.
+
diff --git a/libcxx/docs/DesignDocs/TimeZone.md b/libcxx/docs/DesignDocs/TimeZone.md
index 60adaa4541248..37f47054a9615 100644
--- a/libcxx/docs/DesignDocs/TimeZone.md
+++ b/libcxx/docs/DesignDocs/TimeZone.md
@@ -1,101 +1,92 @@
-=================
-Time Zone Support
-=================
+# Time Zone Support
-Introduction
-============
+## Introduction
-Starting with C++20 the ``<chrono>`` library has support for time zones.
+Starting with C++20 the `<chrono>` library has support for time zones.
These are available in the
-`IANA Time Zone Database <https://data.iana.org/time-zones/tz-link.html>`_.
+[IANA Time Zone Database](https://data.iana.org/time-zones/tz-link.html).
This page describes the design decisions and trade-offs made to implement this
feature. This page contains several links with more information regarding the
contents of the IANA database, this page assumes the reader is familiar with
this information.
-Which version of the Time Zone Database to use
-==============================================
+## Which version of the Time Zone Database to use
The data of the database is available on several platforms in different forms:
- Typically Unix systems ship the database as
- `TZif files <https://www.rfc-editor.org/rfc/rfc8536.html>`_. This format has
- 3 versions and the ``time_zone_link`` information is not always available.
+ [TZif files](https://www.rfc-editor.org/rfc/rfc8536.html). This format has
+ 3 versions and the `time_zone_link` information is not always available.
If available, they are symlinks in the file system.
These files don't provide the database version information. This information
- is needed for the functions ``std::chrono:: remote_version()`` and
- ``std::chrono::reload_tzdb()``.
-
+ is needed for the functions `std::chrono:: remote_version()` and
+ `std::chrono::reload_tzdb()`.
- On several Unix systems the time zone source files are available. These files
are stored in several regions, mainly the continents. This file contains a
large amount of comment with historical information regarding time zones.
The format is documented in the
- `IANA documentation <https://data.iana.org/time-zones/tz-how-to.html>`_
- and in the `man page <https://man7.org/linux/man-pages/man8/zic.8.html>`_ of zic.
+ [IANA documentation](https://data.iana.org/time-zones/tz-how-to.html)
+ and in the [man page](https://man7.org/linux/man-pages/man8/zic.8.html) of zic.
The disadvantage of this version is that at least Linux versions don't have
the database version information. This information is needed for the functions
- ``std::chrono:: remote_version()`` and ``std::chrono::reload_tzdb()``.
-
-- On Linux systems ``tzdata.zi`` is available. This contains the same
+ `std::chrono:: remote_version()` and `std::chrono::reload_tzdb()`.
+- On Linux systems `tzdata.zi` is available. This contains the same
information as the source files but in one file without the comments. This
file uses the same format as the sources, but shortens the names. For example
- ``Rule`` is abbreviated to ``R``. This file contains the database version
+ `Rule` is abbreviated to `R`. This file contains the database version
information.
-The disadvantage of the ``TZif`` format (which is a binary format) is that it's
-not possible to get the proper ``time_zone_link`` information on all platforms.
-The time zone database version number is also missing from ``TZif`` files.
+The disadvantage of the `TZif` format (which is a binary format) is that it's
+not possible to get the proper `time_zone_link` information on all platforms.
+The time zone database version number is also missing from `TZif` files.
Since the time zone database is supposed to contain both these informations,
-``TZif`` files can't be used to create a conforming implementation.
+`TZif` files can't be used to create a conforming implementation.
Since it's easier to parse one file than a set of files we decided
-to use the ``tzdata.zi``. The other benefit is that the ``tzdata.zi`` file
+to use the `tzdata.zi`. The other benefit is that the `tzdata.zi` file
contains the database version information needed for a conforming
implementation.
-The ``tzdata.zi`` file is not available on all platforms as of August 2023, so
+The `tzdata.zi` file is not available on all platforms as of August 2023, so
some vendors will need to make changes to their platform. Most vendors already
ship the database, so they only need to adjust the packaging of their time zone
package to include the files we require. One notable exception is Windows,
where no IANA time zone database is provided at all. However it's possible for
Windows packagers to add these files to their libc++ packages. The IANA
databases can be
-`downloaded <https://data.iana.org/time-zones/releases/>`_.
+[downloaded](https://data.iana.org/time-zones/releases/).
An alternative would be to ship the database with libc++, either as a file or
compiled in the dylib. The text file is about 112 KB. For now libc++ will not
ship this file. If it's hard to get vendors to ship these files we can
reconsider based on that information.
-Leap seconds
-------------
+### Leap seconds
-For the leap seconds libc++ will use the source file ``leap-seconds.list``.
-This file is easier to parse than the ``leapseconds`` file. Both files are
+For the leap seconds libc++ will use the source file `leap-seconds.list`.
+This file is easier to parse than the `leapseconds` file. Both files are
present on Linux, but not always on other platforms. Since these platforms need
-to change their packaging for ``tzdata.zi``, adding two instead of one files
+to change their packaging for `tzdata.zi`, adding two instead of one files
seems a small change.
+## Updating the Time Zone Database
-Updating the Time Zone Database
-===============================
-
-Per `[time.zone.db.remote]/1 <http://eel.is/c++draft/time.zone#db.remote-1>`_
+Per [[time.zone.db.remote]/1](http://eel.is/c++draft/time.zone#db.remote-1)
-.. code-block:: text
-
- The local time zone database is that supplied by the implementation when the
- program first accesses the database, for example via current_zone(). While the
- program is running, the implementation may choose to update the time zone
- database. This update shall not impact the program in any way unless the
- program calls the functions in this subclause. This potentially updated time
- zone database is referred to as the remote time zone database.
+```text
+The local time zone database is that supplied by the implementation when the
+program first accesses the database, for example via current_zone(). While the
+program is running, the implementation may choose to update the time zone
+database. This update shall not impact the program in any way unless the
+program calls the functions in this subclause. This potentially updated time
+zone database is referred to as the remote time zone database.
+```
There is an update mechanism in libc++, however this is not done automatically.
-Invoking the function ``std::chrono::remote_version()`` will parse the version
-information of the ``tzdata.zi`` file and return that information. Similarly,
-``std::chrono::reload_tzdb()`` will parse the ``tzdata.zi`` and
-``leap-seconds.list`` again. This makes it possible to update the database if
+Invoking the function `std::chrono::remote_version()` will parse the version
+information of the `tzdata.zi` file and return that information. Similarly,
+`std::chrono::reload_tzdb()` will parse the `tzdata.zi` and
+`leap-seconds.list` again. This makes it possible to update the database if
needed by the application and gives the user full power over the update policy.
This approach has several advantages:
@@ -107,7 +98,7 @@ This approach has several advantages:
from that task.
- If there is no threading available this polling
becomes more involved. For example, query the file every *x* calls to
- ``std::chrono::get_tzdb()``. This mean calls to ``std::chrono::get_tzdb()``
+ `std::chrono::get_tzdb()`. This mean calls to `std::chrono::get_tzdb()`
would have different performance characteristics.
The small drawback is:
@@ -120,3 +111,4 @@ Another issue with the automatic update is that it may not be considered
Standard compliant, since the Standard uses the wording "This update shall not
impact the program in any way". Using resources could be considered as
impacting the program.
+
diff --git a/libcxx/docs/DesignDocs/UniquePtrTrivialAbi.md b/libcxx/docs/DesignDocs/UniquePtrTrivialAbi.md
index 1af0b34263662..92df3ba1abe0b 100644
--- a/libcxx/docs/DesignDocs/UniquePtrTrivialAbi.md
+++ b/libcxx/docs/DesignDocs/UniquePtrTrivialAbi.md
@@ -1,69 +1,55 @@
-=============================================
-Enable std::unique_ptr [[clang::trivial_abi]]
-=============================================
+# Enable std::unique_ptr \[[clang::trivial_abi]\]
-Background
-==========
+## Background
Consider the follow snippets
+```cpp
+void raw_func(Foo* raw_arg) { ... }
+void smart_func(std::unique_ptr<Foo> smart_arg) { ... }
-.. code-block:: cpp
+Foo* raw_ptr_retval() { ... }
+std::unique_ptr<Foo*> smart_ptr_retval() { ... }
+```
- void raw_func(Foo* raw_arg) { ... }
- void smart_func(std::unique_ptr<Foo> smart_arg) { ... }
-
- Foo* raw_ptr_retval() { ... }
- std::unique_ptr<Foo*> smart_ptr_retval() { ... }
-
-
-
-The argument ``raw_arg`` could be passed in a register but ``smart_arg`` could not, due to current
+The argument `raw_arg` could be passed in a register but `smart_arg` could not, due to current
implementation.
-Specifically, in the ``smart_arg`` case, the caller secretly constructs a temporary ``std::unique_ptr``
+Specifically, in the `smart_arg` case, the caller secretly constructs a temporary `std::unique_ptr`
in its stack-frame, and then passes a pointer to it to the callee in a hidden parameter.
-Similarly, the return value from ``smart_ptr_retval`` is secretly allocated in the caller and
+Similarly, the return value from `smart_ptr_retval` is secretly allocated in the caller and
passed as a secret reference to the callee.
+## Goal
-Goal
-===================
+`std::unique_ptr` is passed directly in a register.
-``std::unique_ptr`` is passed directly in a register.
-
-Design
-======
-
-* Annotate the two definitions of ``std::unique_ptr`` with ``clang::trivial_abi`` attribute.
-* Put the attribute behind a flag because this change has potential compilation and runtime breakages.
+## Design
+- Annotate the two definitions of `std::unique_ptr` with `clang::trivial_abi` attribute.
+- Put the attribute behind a flag because this change has potential compilation and runtime breakages.
This comes with some side effects:
-* ``std::unique_ptr`` parameters will now be destroyed by callees, rather than callers.
+- `std::unique_ptr` parameters will now be destroyed by callees, rather than callers.
It is worth noting that destruction by callee is not unique to the use of trivial_abi attribute.
In most Microsoft's ABIs, arguments are always destroyed by the callee.
Consequently, this may change the destruction order for function parameters to an order that is non-conforming to the standard.
For example:
+ ```cpp
+ struct A { ~A(); };
+ struct B { ~B(); };
+ struct C { C(A, unique_ptr<B>, A) {} };
+ C c{{}, make_unique<B>, {}};
+ ```
- .. code-block:: cpp
-
- struct A { ~A(); };
- struct B { ~B(); };
- struct C { C(A, unique_ptr<B>, A) {} };
- C c{{}, make_unique<B>, {}};
+ In a conforming implementation, the destruction order for C::C's parameters is required to be `~A(), ~B(), ~A()` but with this mode enabled, we'll instead see `~B(), ~A(), ~A()`.
+- Reduced code-size.
- In a conforming implementation, the destruction order for C::C's parameters is required to be ``~A(), ~B(), ~A()`` but with this mode enabled, we'll instead see ``~B(), ~A(), ~A()``.
-
-* Reduced code-size.
-
-
-Performance impact
-------------------
+### Performance impact
Google has measured performance improvements of up to 1.6% on some large server macrobenchmarks, and a small reduction in binary sizes.
@@ -72,78 +58,75 @@ This also affects null pointer optimization
Clang's optimizer can now figure out when a `std::unique_ptr` is known to contain *non*-null.
(Actually, this has been a *missed* optimization all along.)
+```cpp
+struct Foo {
+ ~Foo();
+};
+std::unique_ptr<Foo> make_foo();
+void do_nothing(const Foo&)
-.. code-block:: cpp
-
- struct Foo {
- ~Foo();
- };
- std::unique_ptr<Foo> make_foo();
- void do_nothing(const Foo&)
-
- void bar() {
- auto x = make_foo();
- do_nothing(*x);
- }
-
+void bar() {
+ auto x = make_foo();
+ do_nothing(*x);
+}
+```
-With this change, ``~Foo()`` will be called even if ``make_foo`` returns ``unique_ptr<Foo>(nullptr)``.
-The compiler can now assume that ``x.get()`` cannot be null by the end of ``bar()``, because
-the deference of ``x`` would be UB if it were ``nullptr``. (This dereference would not have caused
-a segfault, because no load is generated for dereferencing a pointer to a reference. This can be detected with ``-fsanitize=null``).
+With this change, `~Foo()` will be called even if `make_foo` returns `unique_ptr<Foo>(nullptr)`.
+The compiler can now assume that `x.get()` cannot be null by the end of `bar()`, because
+the deference of `x` would be UB if it were `nullptr`. (This dereference would not have caused
+a segfault, because no load is generated for dereferencing a pointer to a reference. This can be detected with `-fsanitize=null`).
-
-Potential breakages
--------------------
+### Potential breakages
The following breakages were discovered by enabling this change and fixing the resulting issues in a large code base.
- Compilation failures
- - Function definitions now require complete type ``T`` for parameters with type ``std::unique_ptr<T>``. The following code will no longer compile.
-
- .. code-block:: cpp
-
- class Foo;
- void func(std::unique_ptr<Foo> arg) { /* never use `arg` directly */ }
-
- - Fix: Remove forward-declaration of ``Foo`` and include its proper header.
+> - Function definitions now require complete type `T` for parameters with type `std::unique_ptr<T>`. The following code will no longer compile.
+>
+> ```cpp
+> class Foo;
+> void func(std::unique_ptr<Foo> arg) { /* never use `arg` directly */ }
+> ```
+>
+> - Fix: Remove forward-declaration of `Foo` and include its proper header.
- Runtime Failures
- - Lifetime of ``std::unique_ptr<>`` arguments end earlier (at the end of the callee's body, rather than at the end of the full expression containing the call).
-
- .. code-block:: cpp
-
- util::Status run_worker(std::unique_ptr<Foo>);
- void func() {
- std::unique_ptr<Foo> smart_foo = ...;
- Foo* owned_foo = smart_foo.get();
- // Currently, the following would "work" because the argument to run_worker() is deleted at the end of func()
- // With the new calling convention, it will be deleted at the end of run_worker(),
- // making this an access to freed memory.
- owned_foo->Bar(run_worker(std::move(smart_foo)));
- ^
- // <<<Crash expected here
- }
-
- - Lifetime of local *returned* ``std::unique_ptr<>`` ends earlier.
-
- Spot the bug:
-
- .. code-block:: cpp
-
- std::unique_ptr<Foo> create_and_subscribe(Bar* subscriber) {
- auto foo = std::make_unique<Foo>();
- subscriber->sub([&foo] { foo->do_thing();} );
- return foo;
- }
-
- One could point out this is an obvious stack-use-after return bug.
- With the current calling convention, running this code with ASAN enabled, however, would not yield any "issue".
- So is this a bug in ASAN? (Spoiler: No)
-
- This currently would "work" only because the storage for ``foo`` is in the caller's stackframe.
- In other words, ``&foo`` in callee and ``&foo`` in the caller are the same address.
+> - Lifetime of `std::unique_ptr<>` arguments end earlier (at the end of the callee's body, rather than at the end of the full expression containing the call).
+>
+> ```cpp
+> util::Status run_worker(std::unique_ptr<Foo>);
+> void func() {
+> std::unique_ptr<Foo> smart_foo = ...;
+> Foo* owned_foo = smart_foo.get();
+> // Currently, the following would "work" because the argument to run_worker() is deleted at the end of func()
+> // With the new calling convention, it will be deleted at the end of run_worker(),
+> // making this an access to freed memory.
+> owned_foo->Bar(run_worker(std::move(smart_foo)));
+> ^
+> // <<<Crash expected here
+> }
+> ```
+>
+> - Lifetime of local *returned* `std::unique_ptr<>` ends earlier.
+>
+> Spot the bug:
+>
+> > ```cpp
+> > std::unique_ptr<Foo> create_and_subscribe(Bar* subscriber) {
+> > auto foo = std::make_unique<Foo>();
+> > subscriber->sub([&foo] { foo->do_thing();} );
+> > return foo;
+> > }
+> > ```
+>
+> One could point out this is an obvious stack-use-after return bug.
+> With the current calling convention, running this code with ASAN enabled, however, would not yield any "issue".
+> So is this a bug in ASAN? (Spoiler: No)
+>
+> This currently would "work" only because the storage for `foo` is in the caller's stackframe.
+> In other words, `&foo` in callee and `&foo` in the caller are the same address.
ASAN can be used to detect both of these.
+
diff --git a/libcxx/docs/DesignDocs/UnspecifiedBehaviorRandomization.md b/libcxx/docs/DesignDocs/UnspecifiedBehaviorRandomization.md
index 70278798ecf63..9a82c8b3c8239 100644
--- a/libcxx/docs/DesignDocs/UnspecifiedBehaviorRandomization.md
+++ b/libcxx/docs/DesignDocs/UnspecifiedBehaviorRandomization.md
@@ -1,65 +1,57 @@
-==================================
-Unspecified Behavior Randomization
-==================================
+# Unspecified Behavior Randomization
-Background
-==========
+## Background
Consider the follow snippet which steadily happens in tests:
-
-.. code-block:: cpp
-
- std::vector<std::pair<int, int>> v(SomeData());
- std::sort(v.begin(), v.end(), [](const auto& lhs, const auto& rhs) {
- return lhs.first < rhs.first;
- });
+```cpp
+std::vector<std::pair<int, int>> v(SomeData());
+std::sort(v.begin(), v.end(), [](const auto& lhs, const auto& rhs) {
+ return lhs.first < rhs.first;
+});
+```
Under this assumption all elements in the vector whose first elements are equal
do not guarantee any order. Unfortunately, this prevents libcxx introducing
other implementations because tests might silently fail and the users might
heavily depend on the stability of implementations.
-Goal
-===================
+## Goal
Provide functionality for randomizing the unspecified behavior so that the users
can test and migrate their components and libcxx can introduce new sorting
algorithms and optimizations to the containers.
For example, as of LLVM version 13, libcxx sorting algorithm takes
-`O(n^2) worst case <https://llvm.org/PR20837>`_ but according
+[O(n^2) worst case](https://llvm.org/PR20837) but according
to the standard its worst case should be `O(n log n)`. This effort helps users
to gradually fix their tests while updating to new faster algorithms.
-Design
-======
+## Design
-* Introduce new macro ``_LIBCPP_DEBUG_RANDOMIZE_UNSPECIFIED_STABILITY`` which should
+- Introduce new macro `_LIBCPP_DEBUG_RANDOMIZE_UNSPECIFIED_STABILITY` which should
be a part of the libcxx config.
-* This macro randomizes the unspecified behavior of algorithms and containers.
+- This macro randomizes the unspecified behavior of algorithms and containers.
For example, for sorting algorithm the input range is shuffled and then
sorted.
-* This macro is off by default because users should enable it only for testing
+- This macro is off by default because users should enable it only for testing
purposes and/or migrations if they happen to libcxx.
-* This feature is only available for C++11 and further because of
- ``std::shuffle`` availability.
-* We may use `ASLR <https://en.wikipedia.org/wiki/Address_space_layout_randomization>`_ or
- static ``std::random_device`` for seeding the random number generator. This
+- This feature is only available for C++11 and further because of
+ `std::shuffle` availability.
+- We may use [ASLR](https://en.wikipedia.org/wiki/Address_space_layout_randomization) or
+ static `std::random_device` for seeding the random number generator. This
guarantees the same stability guarantee within a run but not through different
runs, for example, for tests become flaky and eventually be seen as broken.
For platforms which do not support ASLR, the seed is fixed during build.
-* The users can fix the seed of the random number generator by providing
- ``_LIBCPP_RANDOMIZE_UNSPECIFIED_STABILITY_SEED=seed`` definition.
+- The users can fix the seed of the random number generator by providing
+ `_LIBCPP_RANDOMIZE_UNSPECIFIED_STABILITY_SEED=seed` definition.
This comes with some side effects if any of the flags is on:
-* Computation penalty, we think users are OK with that if they use this feature.
-* Non reproducible results if they don't use the fixed seed.
+- Computation penalty, we think users are OK with that if they use this feature.
+- Non reproducible results if they don't use the fixed seed.
-
-Impact
-------------------
+### Impact
Google has measured couple of thousands of tests to be dependent on the
stability of sorting and selection algorithms. As we also plan on updating
@@ -68,19 +60,18 @@ doing it gradually and sustainably. This is also bad for users to depend on the
unspecified behavior in their tests, this effort helps to turn this flag in
debug mode.
-Potential breakages
--------------------
+### Potential breakages
None if the flag is off. If the flag is on, it may lead to some non-reproducible
results, for example, for caching.
-Currently supported randomization
----------------------------------
+### Currently supported randomization
-* ``std::sort``, there is no guarantee on the order of equal elements
-* ``std::partial_sort``, there is no guarantee on the order of equal elements and
- on the order of the remaining part
-* ``std::nth_element``, there is no guarantee on the order from both sides of the
- partition
+- `std::sort`, there is no guarantee on the order of equal elements
+- `std::partial_sort`, there is no guarantee on the order of equal elements and
+ : on the order of the remaining part
+- `std::nth_element`, there is no guarantee on the order from both sides of the
+ : partition
Patches welcome.
+
diff --git a/libcxx/docs/DesignDocs/VisibilityMacros.md b/libcxx/docs/DesignDocs/VisibilityMacros.md
index db54b35386b19..8e41ca9d00277 100644
--- a/libcxx/docs/DesignDocs/VisibilityMacros.md
+++ b/libcxx/docs/DesignDocs/VisibilityMacros.md
@@ -1,14 +1,12 @@
-========================
-Symbol Visibility Macros
-========================
+# Symbol Visibility Macros
-.. contents::
- :local:
+```{contents}
+:local: true
+```
-.. _visibility-macros:
+(visibility-macros)=
-Overview
-========
+## Overview
Libc++ uses various "visibility" macros in order to provide a stable ABI in
both the library and the headers. These macros work by changing the
@@ -21,22 +19,24 @@ type_visibility is only supported by Clang, so this doesn't replace
type-specific attributes. The only exception are enums, which GCC always gives
default visibility, thus removing the need for any annotations.
-Visibility Macros
-=================
+## Visibility Macros
-**_LIBCPP_HIDDEN**
- Mark a symbol as hidden so it will not be exported from shared libraries.
+**\_LIBCPP_HIDDEN**
-**_LIBCPP_EXPORTED_FROM_ABI**
- Mark a symbol as being part of our ABI. This includes functions that are part
+: Mark a symbol as hidden so it will not be exported from shared libraries.
+
+**\_LIBCPP_EXPORTED_FROM_ABI**
+
+: Mark a symbol as being part of our ABI. This includes functions that are part
of the libc++ library, type information and other symbols. On Windows,
this macro applies `dllimport`/`dllexport` to the symbol, and on other
platforms it gives the symbol default visibility. This macro should never be
used on class templates. On classes it should only be used if the vtable
lives in the built library.
-**_LIBCPP_OVERRIDABLE_FUNC_VIS**
- Mark a symbol as being exported by the libc++ library, but allow it to be
+**\_LIBCPP_OVERRIDABLE_FUNC_VIS**
+
+: Mark a symbol as being exported by the libc++ library, but allow it to be
overridden locally. On non-Windows, this is equivalent to `_LIBCPP_FUNC_VIS`.
This macro is applied to all `operator new` and `operator delete` overloads.
@@ -47,12 +47,14 @@ Visibility Macros
this macro therefore expands to `__declspec(dllexport)` when building the
library and has an empty definition otherwise.
-**_LIBCPP_HIDE_FROM_ABI**
- Mark a function as not being part of the ABI of any final linked image that
+**\_LIBCPP_HIDE_FROM_ABI**
+
+: Mark a function as not being part of the ABI of any final linked image that
uses it.
-**_LIBCPP_HIDE_FROM_ABI_AFTER_V1**
- Mark a function as being hidden from the ABI (per `_LIBCPP_HIDE_FROM_ABI`)
+**\_LIBCPP_HIDE_FROM_ABI_AFTER_V1**
+
+: Mark a function as being hidden from the ABI (per `_LIBCPP_HIDE_FROM_ABI`)
when libc++ is built with an ABI version after ABI v1. This macro is used to
maintain ABI compatibility for symbols that have been historically exported
by libc++ in v1 of the ABI, but that we don't want to export in the future.
@@ -63,11 +65,12 @@ Visibility Macros
building libc++), the macro always marks symbols as internal so that programs
built using new libc++ headers stop relying on symbols that are removed from
the ABI in a future version. Each time we release a new stable version of the
- ABI, we should create a new _LIBCPP_HIDE_FROM_ABI_AFTER_XXX macro, and we can
+ ABI, we should create a new \_LIBCPP_HIDE_FROM_ABI_AFTER_XXX macro, and we can
use it to start removing symbols from the ABI after that stable version.
-**_LIBCPP_EXTERN_TEMPLATE_TYPE_VIS**
- Mark the member functions, typeinfo, and vtable of the type named in
+**\_LIBCPP_EXTERN_TEMPLATE_TYPE_VIS**
+
+: Mark the member functions, typeinfo, and vtable of the type named in
an extern template declaration as being exported by the libc++ library.
This attribute must be specified on all extern class template declarations.
@@ -86,8 +89,9 @@ Visibility Macros
extern template declaration (i.e. using `_LIBCPP_FUNC_VIS`) is the correct
thing to do for them.
-**_LIBCPP_CLASS_TEMPLATE_INSTANTIATION_VIS**
- Mark the member functions, typeinfo, and vtable of an explicit instantiation
+**\_LIBCPP_CLASS_TEMPLATE_INSTANTIATION_VIS**
+
+: Mark the member functions, typeinfo, and vtable of an explicit instantiation
of a class template as being exported by the libc++ library. This attribute
must be specified on all class template explicit instantiations.
@@ -95,9 +99,9 @@ Visibility Macros
the extern template declaration) as exported on Windows, as discussed above.
On all other platforms, this macro has an empty definition.
-Links
-=====
+## Links
+
+- [[cfe-dev] Visibility in libc++ - 1](http://lists.llvm.org/pipermail/cfe-dev/2013-July/030610.html)
+- [[cfe-dev] Visibility in libc++ - 2](http://lists.llvm.org/pipermail/cfe-dev/2013-August/031195.html)
+- [[libcxx] Visibility fixes for Windows](http://lists.llvm.org/pipermail/cfe-commits/Week-of-Mon-20130805/085461.html)
-* `[cfe-dev] Visibility in libc++ - 1 <http://lists.llvm.org/pipermail/cfe-dev/2013-July/030610.html>`_
-* `[cfe-dev] Visibility in libc++ - 2 <http://lists.llvm.org/pipermail/cfe-dev/2013-August/031195.html>`_
-* `[libcxx] Visibility fixes for Windows <http://lists.llvm.org/pipermail/cfe-commits/Week-of-Mon-20130805/085461.html>`_
diff --git a/libcxx/docs/DesignDocs/WindowsSupport.md b/libcxx/docs/DesignDocs/WindowsSupport.md
index bf79c0e827131..2ba0ba55c48f4 100644
--- a/libcxx/docs/DesignDocs/WindowsSupport.md
+++ b/libcxx/docs/DesignDocs/WindowsSupport.md
@@ -1,20 +1,16 @@
-===============
-Windows support
-===============
+# Windows support
**This document only applies to the MSVC Mode.**
-Motivation:
------------
+## Motivation:
-Currently libc++ needs to link to the MSVC STL ``msvcprt`` library to implement part of the functionality on Windows. This dependency is counterintuitive since one standard library is depending on another standard library. Our goal is to remove this dependency by implementing the required functionality in libc++ itself.
+Currently libc++ needs to link to the MSVC STL `msvcprt` library to implement part of the functionality on Windows. This dependency is counterintuitive since one standard library is depending on another standard library. Our goal is to remove this dependency by implementing the required functionality in libc++ itself.
-Goals:
-------
+## Goals:
-- ``VCRuntime`` is the underlying ABI layer that libc++ will be using to implement the required functionality for Windows support.
+- `VCRuntime` is the underlying ABI layer that libc++ will be using to implement the required functionality for Windows support.
-Non-Goals:
-----------
+## Non-Goals:
+
+- Interoperability with the MSVC STL in the case where both libraries are linked in the same binary is not a goal. For example if you link both libc++ and the MSVC STL in the same binary, a call to a function that needs to maintain internal state like `std::set_new_handler` from the libc++ side should not be expected to also change the MSVC STL internal state (since they are separate). We will be maintaining our own internal state for such functions, therefore any such functions should only be expected to have an effect on the libc++ side.
-- Interoperability with the MSVC STL in the case where both libraries are linked in the same binary is not a goal. For example if you link both libc++ and the MSVC STL in the same binary, a call to a function that needs to maintain internal state like ``std::set_new_handler`` from the libc++ side should not be expected to also change the MSVC STL internal state (since they are separate). We will be maintaining our own internal state for such functions, therefore any such functions should only be expected to have an effect on the libc++ side.
diff --git a/libcxx/docs/FeatureTestMacroTable.md b/libcxx/docs/FeatureTestMacroTable.md
index 7035b01904a19..450181f8fd0f3 100644
--- a/libcxx/docs/FeatureTestMacroTable.md
+++ b/libcxx/docs/FeatureTestMacroTable.md
@@ -1,22 +1,20 @@
-.. _FeatureTestMacroTable:
+(featuretestmacrotable)=
-==========================
-Feature Test Macro Support
-==========================
+# Feature Test Macro Support
-.. contents::
- :local:
+```{contents}
+:local: true
+```
-Overview
-========
+## Overview
This file documents the feature test macros currently supported by libc++.
-.. _feature-status:
+(feature-status)=
-Status
-======
+## Status
+```{eval-rst}
.. table:: Current Status
:name: feature-status-table
:widths: auto
@@ -576,4 +574,5 @@ Status
---------------------------------------------------------- -----------------
``__cpp_lib_view_interface`` ``202606L``
========================================================== =================
+```
diff --git a/libcxx/docs/Hardening.md b/libcxx/docs/Hardening.md
index 8178a25e82648..4e50a1240ba09 100644
--- a/libcxx/docs/Hardening.md
+++ b/libcxx/docs/Hardening.md
@@ -1,16 +1,14 @@
-.. _hardening:
+(hardening)=
-===============
-Hardening Modes
-===============
+# Hardening Modes
-.. contents::
- :local:
+```{contents}
+:local: true
+```
-.. _using-hardening-modes:
+(using-hardening-modes)=
-Using hardening modes
-=====================
+## Using hardening modes
libc++ provides several hardening modes, where each mode enables a set of
assertions that prevent undefined behavior caused by violating preconditions of
@@ -35,14 +33,13 @@ modes are:
We do not commit to a particular level of performance in this mode.
In particular, this mode is *not* intended to be used in production.
-.. note::
+:::{note}
+Enabling hardening has no impact on the ABI.
+:::
- Enabling hardening has no impact on the ABI.
+(notes-for-users)=
-.. _notes-for-users:
-
-Notes for users
----------------
+### Notes for users
As a libc++ user, consult with your vendor to determine the level of hardening
enabled by default.
@@ -50,98 +47,94 @@ enabled by default.
Users wishing for a different hardening level to their vendor default are able
to control the level by passing **one** of the following options to the compiler:
-- ``-D_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_NONE``
-- ``-D_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_FAST``
-- ``-D_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_EXTENSIVE``
-- ``-D_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_DEBUG``
-
-.. warning::
-
- The exact numeric values of these macros are unspecified and users should not
- rely on them (e.g. expect the values to be sorted in any way).
-
-.. warning::
+- `-D_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_NONE`
+- `-D_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_FAST`
+- `-D_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_EXTENSIVE`
+- `-D_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_DEBUG`
- If you would prefer to override the hardening level on a per-translation-unit
- basis, you must do so **before** including any headers to avoid `ODR issues`_.
+:::{warning}
+The exact numeric values of these macros are unspecified and users should not
+rely on them (e.g. expect the values to be sorted in any way).
+:::
-.. _`ODR issues`: https://en.cppreference.com/w/cpp/language/definition#:~:text=is%20ill%2Dformed.-,One%20Definition%20Rule,-Only%20one%20definition
+:::{warning}
+If you would prefer to override the hardening level on a per-translation-unit
+basis, you must do so **before** including any headers to avoid [ODR issues][odr issues].
+:::
-.. note::
-
- Since the static and shared library components of libc++ are built by the
- vendor, setting this macro will have no impact on the hardening mode for the
- pre-built components. Most libc++ code is header-based, so a user-provided
- value for ``_LIBCPP_HARDENING_MODE`` will be mostly respected.
+:::{note}
+Since the static and shared library components of libc++ are built by the
+vendor, setting this macro will have no impact on the hardening mode for the
+pre-built components. Most libc++ code is header-based, so a user-provided
+value for `_LIBCPP_HARDENING_MODE` will be mostly respected.
+:::
In some cases, users might want to override the assertion semantic used by the
library. This can be done similarly to setting the hardening mode; please refer
-to the :ref:`relevant section <assertion-semantics>`.
+to the {ref}`relevant section <assertion-semantics>`.
-Notes for vendors
------------------
+### Notes for vendors
Vendors can set the default hardening mode by providing
-``LIBCXX_HARDENING_MODE`` as a configuration option, with the possible values of
-``none``, ``fast``, ``extensive`` and ``debug``. The default value is ``none``
+`LIBCXX_HARDENING_MODE` as a configuration option, with the possible values of
+`none`, `fast`, `extensive` and `debug`. The default value is `none`
which doesn't enable any hardening checks (this mode is sometimes called the
-``unchecked`` mode).
+`unchecked` mode).
This option controls both the hardening mode that the precompiled library is
built with and the default hardening mode that users will build with. If set to
-``none``, the precompiled library will not contain any assertions, and user code
+`none`, the precompiled library will not contain any assertions, and user code
will default to building without assertions.
Vendors can also override the way the program is terminated when an assertion
-fails by :ref:`providing a custom header <override-assertion-handler>`.
+fails by {ref}`providing a custom header <override-assertion-handler>`.
-Assertion categories
-====================
+## Assertion categories
Inside the library, individual assertions are grouped into different
*categories*. Each hardening mode enables a different set of assertion
categories; categories provide an additional layer of abstraction that makes it
easier to reason about the high-level semantics of a hardening mode.
-.. note::
-
- Users are not intended to interact with these categories directly -- the
- categories are considered internal to the library and subject to change.
+:::{note}
+Users are not intended to interact with these categories directly -- the
+categories are considered internal to the library and subject to change.
+:::
-- ``valid-element-access`` -- checks that any attempts to access a container
+- `valid-element-access` -- checks that any attempts to access a container
element, whether through the container object or through an iterator, are
valid and do not attempt to go out of bounds or otherwise access
a non-existent element. This also includes operations that set up an imminent
invalid access (e.g. incrementing an end iterator). For iterator checks to
work, bounded iterators must be enabled in the ABI. Types like
- ``std::optional`` and ``std::function`` are considered containers (with at
+ `std::optional` and `std::function` are considered containers (with at
most one element) for the purposes of this check.
-- ``valid-input-range`` -- checks that ranges (whether expressed as an iterator
+- `valid-input-range` -- checks that ranges (whether expressed as an iterator
pair, an iterator and a sentinel, an iterator and a count, or
- a ``std::range``) given as input to library functions are valid:
- - the sentinel is reachable from the begin iterator;
- - TODO(hardening): both iterators refer to the same container.
+ a `std::range`) given as input to library functions are valid:
+ \- the sentinel is reachable from the begin iterator;
+ \- TODO(hardening): both iterators refer to the same container.
("input" here refers to "an input given to an algorithm", not to an iterator
category)
Violating assertions in this category leads to an out-of-bounds access.
-- ``non-null`` -- checks that the pointer being dereferenced is not null. On
+- `non-null` -- checks that the pointer being dereferenced is not null. On
most modern platforms, the zero address does not refer to an actual location
in memory, so a null pointer dereference would not compromise the memory
security of a program (however, it is still undefined behavior that can result
in strange errors due to compiler optimizations).
-- ``non-overlapping-ranges`` -- for functions that take several ranges as
+- `non-overlapping-ranges` -- for functions that take several ranges as
arguments, checks that those ranges do not overlap.
-- ``valid-deallocation`` -- checks that an attempt to deallocate memory is valid
+- `valid-deallocation` -- checks that an attempt to deallocate memory is valid
(e.g. the given object was allocated by the given allocator). Violating this
category typically results in a memory leak.
-- ``valid-external-api-call`` -- checks that a call to an external API doesn't
+- `valid-external-api-call` -- checks that a call to an external API doesn't
fail in an unexpected manner. This includes triggering documented cases of
undefined behavior in an external library (like attempting to unlock an
unlocked mutex in pthreads). Any API external to the library falls under this
@@ -149,36 +142,36 @@ easier to reason about the high-level semantics of a hardening mode.
these failures to compromise memory safety or otherwise create an immediate
security issue.
-- ``compatible-allocator`` -- checks any operations that exchange nodes between
+- `compatible-allocator` -- checks any operations that exchange nodes between
containers to make sure the containers have compatible allocators.
-- ``argument-within-domain`` -- checks that the given argument is within the
+- `argument-within-domain` -- checks that the given argument is within the
domain of valid arguments for the function. Violating this typically produces
- an incorrect result (e.g. ``std::clamp`` returns the original value without
+ an incorrect result (e.g. `std::clamp` returns the original value without
clamping it due to incorrect functors) or puts an object into an invalid state
(e.g. a string view where only a subset of elements is accessible). This
category is for assertions violating which doesn't cause any immediate issues
in the library -- whatever the consequences are, they will happen in the user
code.
-- ``pedantic`` -- checks preconditions that are imposed by the C++ standard,
+- `pedantic` -- checks preconditions that are imposed by the C++ standard,
but violating which happens to be benign in libc++.
-- ``semantic-requirement`` -- checks that the given argument satisfies the
+- `semantic-requirement` -- checks that the given argument satisfies the
semantic requirements imposed by the C++ standard. Typically, there is no
simple way to completely prove that a semantic requirement is satisfied;
thus, this would often be a heuristic check and it might be quite expensive.
-- ``internal`` -- checks that internal invariants of the library hold. These
+- `internal` -- checks that internal invariants of the library hold. These
assertions don't depend on user input.
-- ``uncategorized`` -- for assertions that haven't been properly classified yet.
+- `uncategorized` -- for assertions that haven't been properly classified yet.
This category is an escape hatch used for some existing assertions in the
library; all new code should have its assertions properly classified.
-Mapping between the hardening modes and the assertion categories
-================================================================
+## Mapping between the hardening modes and the assertion categories
+```{eval-rst}
.. list-table::
:header-rows: 1
:widths: auto
@@ -235,128 +228,125 @@ Mapping between the hardening modes and the assertion categories
- ❌
- ✅
- ✅
+```
-.. note::
-
- At the moment, each subsequent hardening mode is a strict superset of the
- previous one (in other words, each subsequent mode only enables additional
- assertion categories without disabling any), but this won't necessarily be
- true for any hardening modes that might be added in the future.
+:::{note}
+At the moment, each subsequent hardening mode is a strict superset of the
+previous one (in other words, each subsequent mode only enables additional
+assertion categories without disabling any), but this won't necessarily be
+true for any hardening modes that might be added in the future.
+:::
-.. note::
+:::{note}
+The categories enabled by each mode are subject to change. Users should not
+rely on the precise assertions enabled by a mode at a given point in time.
+However, the library does guarantee to keep the hardening modes stable and
+to fulfill the semantics documented here.
+:::
- The categories enabled by each mode are subject to change. Users should not
- rely on the precise assertions enabled by a mode at a given point in time.
- However, the library does guarantee to keep the hardening modes stable and
- to fulfill the semantics documented here.
+## Hardening assertion failure
-Hardening assertion failure
-===========================
-
-In production modes (``fast`` and ``extensive``), a hardening assertion failure
-immediately ``_traps <https://clang.llvm.org/docs/LanguageExtensions.html#builtin-verbose-trap>``
+In production modes (`fast` and `extensive`), a hardening assertion failure
+immediately `_traps <https://clang.llvm.org/docs/LanguageExtensions.html#builtin-verbose-trap>`
the program. This is the safest approach that also minimizes the code size
penalty as the failure handler maps to a single instruction. The downside is
that the failure provides no additional details other than the stack trace
(which might also be affected by optimizations).
-In the ``debug`` mode, an assertion failure terminates the program in an
+In the `debug` mode, an assertion failure terminates the program in an
unspecified manner and also outputs the associated error message to the error
output. This is less secure and increases the size of the binary (among other
things, it has to store the error message strings) but makes the failure easier
to debug. It also allows testing the error messages in our test suite.
-This default behavior can be customized by users via :ref:`assertion semantics
+This default behavior can be customized by users via {ref}`assertion semantics
<assertion-semantics>`; it can also be completely overridden by vendors by
-providing a :ref:`custom assertion failure handler
+providing a {ref}`custom assertion failure handler
<override-assertion-handler>`.
-.. _assertion-semantics:
-
-Assertion semantics
--------------------
-
-.. warning::
+(assertion-semantics)=
- Assertion semantics are currently an experimental feature.
+### Assertion semantics
-.. note::
+:::{warning}
+Assertion semantics are currently an experimental feature.
+:::
- Assertion semantics are not available in the C++03 mode.
+:::{note}
+Assertion semantics are not available in the C++03 mode.
+:::
What happens when an assertion fails depends on the assertion semantic being
used. Four assertion semantics are available, based on C++26 Contracts
evaluation semantics:
-- ``ignore`` evaluates the assertion but has no effect if it fails (note that it
- differs from the Contracts ``ignore`` semantic which would not evaluate
+- `ignore` evaluates the assertion but has no effect if it fails (note that it
+ differs from the Contracts `ignore` semantic which would not evaluate
the assertion at all);
-- ``observe`` logs an error (indicating, if possible on the platform, that the
+- `observe` logs an error (indicating, if possible on the platform, that the
error is fatal) but continues execution;
-- ``quick-enforce`` terminates the program as fast as possible via a trap
- instruction. It is the default semantic for the production modes (``fast`` and
- ``extensive``);
-- ``enforce`` logs an error and then terminates the program. It is the default
- semantic for the ``debug`` mode.
+- `quick-enforce` terminates the program as fast as possible via a trap
+ instruction. It is the default semantic for the production modes (`fast` and
+ `extensive`);
+- `enforce` logs an error and then terminates the program. It is the default
+ semantic for the `debug` mode.
Notes:
- Continuing execution after a hardening check fails results in undefined
- behavior; the ``observe`` semantic is meant to make adopting hardening easier
+ behavior; the `observe` semantic is meant to make adopting hardening easier
but should not be used outside of the adoption period;
- C++26 wording for Library Hardening precludes a conforming Hardened
- implementation from using the Contracts ``ignore`` semantic when evaluating
+ implementation from using the Contracts `ignore` semantic when evaluating
hardened preconditions in the Library. Libc++ allows using this semantic for
- hardened preconditions, but please be aware that using ``ignore`` does not
+ hardened preconditions, but please be aware that using `ignore` does not
produce a conforming "Hardened" implementation, unlike the other semantics
above.
The default assertion semantics are as follows:
-- ``fast``: ``quick-enforce``;
-- ``extensive``: ``quick-enforce``;
-- ``debug``: ``enforce``.
+- `fast`: `quick-enforce`;
+- `extensive`: `quick-enforce`;
+- `debug`: `enforce`.
The default assertion semantics can be overridden by passing **one** of the
following options to the compiler:
-- ``-D_LIBCPP_ASSERTION_SEMANTIC=_LIBCPP_ASSERTION_SEMANTIC_IGNORE``
-- ``-D_LIBCPP_ASSERTION_SEMANTIC=_LIBCPP_ASSERTION_SEMANTIC_OBSERVE``
-- ``-D_LIBCPP_ASSERTION_SEMANTIC=_LIBCPP_ASSERTION_SEMANTIC_QUICK_ENFORCE``
-- ``-D_LIBCPP_ASSERTION_SEMANTIC=_LIBCPP_ASSERTION_SEMANTIC_ENFORCE``
+- `-D_LIBCPP_ASSERTION_SEMANTIC=_LIBCPP_ASSERTION_SEMANTIC_IGNORE`
+- `-D_LIBCPP_ASSERTION_SEMANTIC=_LIBCPP_ASSERTION_SEMANTIC_OBSERVE`
+- `-D_LIBCPP_ASSERTION_SEMANTIC=_LIBCPP_ASSERTION_SEMANTIC_QUICK_ENFORCE`
+- `-D_LIBCPP_ASSERTION_SEMANTIC=_LIBCPP_ASSERTION_SEMANTIC_ENFORCE`
-All the :ref:`same notes <notes-for-users>` apply to setting this macro as for
-setting ``_LIBCPP_HARDENING_MODE``.
+All the {ref}`same notes <notes-for-users>` apply to setting this macro as for
+setting `_LIBCPP_HARDENING_MODE`.
-Notes for vendors
------------------
+### Notes for vendors
Similarly to hardening modes, vendors can set the default assertion semantic by
-providing ``LIBCXX_ASSERTION_SEMANTIC`` as a configuration option, with the
-possible values of ``hardening_dependent``, ``ignore``, ``observe``,
-``quick_enforce`` and ``enforce``. The default value is ``hardening_dependent``
+providing `LIBCXX_ASSERTION_SEMANTIC` as a configuration option, with the
+possible values of `hardening_dependent`, `ignore`, `observe`,
+`quick_enforce` and `enforce`. The default value is `hardening_dependent`
which is a special value that instructs the library to select the semantic based
on the hardening mode in effect (the mapping is described in
-:ref:`the main section on assertion semantics <assertion-semantics>`).
+{ref}`the main section on assertion semantics <assertion-semantics>`).
This option controls both the assertion semantic that the precompiled library is
built with and the default assertion semantic that users will build with.
-.. _override-assertion-handler:
+(override-assertion-handler)=
-Overriding the assertion failure handler
-----------------------------------------
+### Overriding the assertion failure handler
Vendors can override the default assertion handler mechanism by following these
steps:
- create a header file that provides a definition of a macro called
- ``_LIBCPP_ASSERTION_HANDLER``. The macro will be invoked when a hardening
+ `_LIBCPP_ASSERTION_HANDLER`. The macro will be invoked when a hardening
assertion fails, with a single parameter containing a null-terminated string
with the error message.
- when configuring the library, provide the path to custom header (relative to
the root of the repository) via the CMake variable
- ``LIBCXX_ASSERTION_HANDLER_FILE``.
+ `LIBCXX_ASSERTION_HANDLER_FILE`.
Note that almost all libc++ headers include the assertion handler header which
means it should not include anything non-trivial from the standard library to
@@ -370,8 +360,7 @@ what's right on their platform for their users -- a vendor who wishes to provide
this capability is free to do so, e.g. by declaring the assertion handler as an
overridable function.
-ABI
-===
+## ABI
Setting a hardening mode does **not** affect the ABI. Each mode uses the subset
of checks available in the current ABI configuration which is determined by the
@@ -382,21 +371,20 @@ the combination of the selected hardening mode and the hardening-related ABI
options. Some checks require changing the ABI from the "default" to store
additional information in the library classes -- e.g. checking whether an
iterator is valid upon dereference generally requires storing data about bounds
-inside the iterator object. Using ``std::span`` as an example, setting the
-hardening mode to ``fast`` will always enable the ``valid-element-access``
-checks when accessing elements via a ``std::span`` object, but whether
-dereferencing a ``std::span`` iterator does the equivalent check depends on the
+inside the iterator object. Using `std::span` as an example, setting the
+hardening mode to `fast` will always enable the `valid-element-access`
+checks when accessing elements via a `std::span` object, but whether
+dereferencing a `std::span` iterator does the equivalent check depends on the
ABI configuration.
-ABI options
------------
+### ABI options
Vendors can use some ABI options at CMake configuration time (when building libc++
itself) to enable additional hardening checks. This is done by passing these
-macros as ``-DLIBCXX_ABI_DEFINES="_LIBCPP_ABI_FOO;_LIBCPP_ABI_BAR;etc"`` at
+macros as `-DLIBCXX_ABI_DEFINES="_LIBCPP_ABI_FOO;_LIBCPP_ABI_BAR;etc"` at
CMake configuration time. The available options are:
-- ``_LIBCPP_ABI_BOUNDED_ITERATORS`` -- changes the iterator type of select
+- `_LIBCPP_ABI_BOUNDED_ITERATORS` -- changes the iterator type of select
containers (see below) to a bounded iterator that keeps track of whether it's
within the bounds of the original container and asserts valid bounds on every
dereference.
@@ -405,78 +393,79 @@ CMake configuration time. The available options are:
Supported containers:
- - ``span``;
- - ``string_view``.
+ - `span`;
+ - `string_view`.
-- ``_LIBCPP_ABI_BOUNDED_ITERATORS_IN_STRING`` -- changes the iterator type of
- ``basic_string`` to a bounded iterator that keeps track of whether it's within
+- `_LIBCPP_ABI_BOUNDED_ITERATORS_IN_STRING` -- changes the iterator type of
+ `basic_string` to a bounded iterator that keeps track of whether it's within
the bounds of the original container and asserts it on every dereference and
when performing iterator arithmetics.
- ABI impact: changes the iterator type of ``basic_string`` and its
- specializations, such as ``string`` and ``wstring``.
+ ABI impact: changes the iterator type of `basic_string` and its
+ specializations, such as `string` and `wstring`.
-- ``_LIBCPP_ABI_BOUNDED_ITERATORS_IN_VECTOR`` -- changes the iterator type of
- ``vector`` to a bounded iterator that keeps track of whether it's within the
+- `_LIBCPP_ABI_BOUNDED_ITERATORS_IN_VECTOR` -- changes the iterator type of
+ `vector` to a bounded iterator that keeps track of whether it's within the
bounds of the original container and asserts it on every dereference and when
performing iterator arithmetics. Note: this doesn't yet affect
- ``vector<bool>``.
+ `vector<bool>`.
- ABI impact: changes the iterator type of ``vector`` (except ``vector<bool>``).
+ ABI impact: changes the iterator type of `vector` (except `vector<bool>`).
-- ``_LIBCPP_ABI_BOUNDED_UNIQUE_PTR`` -- tracks the bounds of the array stored inside
- a ``std::unique_ptr<T[]>``, allowing it to trap when accessed out-of-bounds. This
- requires the ``std::unique_ptr`` to be created using an API like ``std::make_unique``
- or ``std::make_unique_for_overwrite``, otherwise the bounds information is not available
+- `_LIBCPP_ABI_BOUNDED_UNIQUE_PTR` -- tracks the bounds of the array stored inside
+ a `std::unique_ptr<T[]>`, allowing it to trap when accessed out-of-bounds. This
+ requires the `std::unique_ptr` to be created using an API like `std::make_unique`
+ or `std::make_unique_for_overwrite`, otherwise the bounds information is not available
to the library.
- ABI impact: changes the layout of ``std::unique_ptr<T[]>``, and the representation
- of a few library types that use ``std::unique_ptr`` internally, such as
- the unordered containers.
+ ABI impact: changes the layout of `std::unique_ptr<T[]>`, and the representation
-- ``_LIBCPP_ABI_BOUNDED_ITERATORS_IN_STD_ARRAY`` -- changes the iterator type of ``std::array`` to a
+ : of a few library types that use `std::unique_ptr` internally, such as
+ the unordered containers.
+
+- `_LIBCPP_ABI_BOUNDED_ITERATORS_IN_STD_ARRAY` -- changes the iterator type of `std::array` to a
bounded iterator that keeps track of whether it's within the bounds of the container and asserts it
on every dereference and when performing iterator arithmetic.
- ABI impact: changes the iterator type of ``std::array``, its size and its layout.
+ ABI impact: changes the iterator type of `std::array`, its size and its layout.
-- ``_LIBCPP_ABI_BOUNDED_ITERATORS_IN_OPTIONAL`` -- changes the iterator type of ``std::optional`` to a
+- `_LIBCPP_ABI_BOUNDED_ITERATORS_IN_OPTIONAL` -- changes the iterator type of `std::optional` to a
bounded iterator that keeps track of whether it's within the bounds of its container and asserts it
on every dereference and when performing iterator arithmetic.
- ABI impact: changes the iterator type of ``std::optional``.
+ ABI impact: changes the iterator type of `std::optional`.
-ABI tags
---------
+### ABI tags
We use ABI tags to allow translation units built with different hardening modes
to interact with each other without causing ODR violations. Knowing how
hardening modes are encoded into the ABI tags might be useful to examine
a binary and determine whether it was built with hardening enabled.
-.. warning::
- We don't commit to the encoding scheme used by the ABI tags being stable
- between different releases of libc++. The tags themselves are never stable, by
- design -- new releases increase the version number. The following describes
- the state of the latest release and is for informational purposes only.
+:::{warning}
+We don't commit to the encoding scheme used by the ABI tags being stable
+between different releases of libc++. The tags themselves are never stable, by
+design -- new releases increase the version number. The following describes
+the state of the latest release and is for informational purposes only.
+:::
The first character of an ABI tag encodes the hardening mode:
-- ``f`` -- [f]ast mode;
-- ``s`` -- extensive ("[s]afe") mode;
-- ``d`` -- [d]ebug mode;
-- ``n`` -- [n]one mode.
+- `f` -- [f]ast mode;
+- `s` -- extensive ("[s]afe") mode;
+- `d` -- [d]ebug mode;
+- `n` -- [n]one mode.
The second character of an ABI tag encodes the assertion semantic:
-- ``i`` -- [i]gnore semantic;
-- ``o`` -- [o]bserve semantic;
-- ``q`` -- [q]uick-enforce semantic;
-- ``e`` -- [e]nforce semantic.
+- `i` -- [i]gnore semantic;
+- `o` -- [o]bserve semantic;
+- `q` -- [q]uick-enforce semantic;
+- `e` -- [e]nforce semantic.
-Hardened containers status
-==========================
+## Hardened containers status
+```{eval-rst}
.. list-table::
:header-rows: 1
:widths: auto
@@ -556,20 +545,22 @@ Hardened containers status
* - ``bitset``
- ✅
- N/A
+```
-Note: for ``vector`` and ``string``, the iterator does not check for
+Note: for `vector` and `string`, the iterator does not check for
invalidation (accesses made via an invalidated iterator still lead to undefined
behavior)
-Note: ``vector<bool>`` iterator is not currently hardened.
+Note: `vector<bool>` iterator is not currently hardened.
-Testing
-=======
+## Testing
-Please see :ref:`Testing documentation <testing-hardening-assertions>`.
+Please see {ref}`Testing documentation <testing-hardening-assertions>`.
-Further reading
-===============
+## Further reading
-- `Hardening RFC <https://discourse.llvm.org/t/rfc-hardening-in-libc/73925>`_:
+- [Hardening RFC](https://discourse.llvm.org/t/rfc-hardening-in-libc/73925):
contains some of the design rationale.
+
+[odr issues]: https://en.cppreference.com/w/cpp/language/definition#:~:text=is%20ill%2Dformed.-,One%20Definition%20Rule,-Only%20one%20definition
+
diff --git a/libcxx/docs/Helpers/ReleaseNotesTemplate.md b/libcxx/docs/Helpers/ReleaseNotesTemplate.md
index 395a5378b7105..60e93db15e4da 100644
--- a/libcxx/docs/Helpers/ReleaseNotesTemplate.md
+++ b/libcxx/docs/Helpers/ReleaseNotesTemplate.md
@@ -1,62 +1,47 @@
-===========================================
-Libc++ XX.YY.ZZ (In-Progress) Release Notes
-===========================================
+# Libc++ XX.YY.ZZ (In-Progress) Release Notes
-.. contents::
- :local:
- :depth: 2
+```{contents}
+:depth: 2
+:local: true
+```
-Written by the `Libc++ Team <https://libcxx.llvm.org>`_
+Written by the [Libc++ Team](https://libcxx.llvm.org)
-.. warning::
+:::{warning}
+These are in-progress notes for the upcoming libc++ XX.YY.ZZ release.
+Release notes for previous releases can be found on
+[the Download Page](https://releases.llvm.org/download.html).
+:::
- These are in-progress notes for the upcoming libc++ XX.YY.ZZ release.
- Release notes for previous releases can be found on
- `the Download Page <https://releases.llvm.org/download.html>`_.
-
-Introduction
-============
+## Introduction
This document contains the release notes for the libc++ C++ Standard Library,
part of the LLVM Compiler Infrastructure, release XX.YY.ZZ. Here we describe the
status of libc++ in some detail, including major improvements from the previous
-release and new feature work. For the general LLVM release notes, see `the LLVM
-documentation <https://llvm.org/docs/ReleaseNotes.html>`_. All LLVM releases may
-be downloaded from the `LLVM releases web site <https://llvm.org/releases/>`_.
+release and new feature work. For the general LLVM release notes, see [the LLVM
+documentation](https://llvm.org/docs/ReleaseNotes.html). All LLVM releases may
+be downloaded from the [LLVM releases web site](https://llvm.org/releases/).
-For more information about libc++, please see the `Libc++ Web Site
-<https://libcxx.llvm.org>`_ or the `LLVM Web Site <https://llvm.org>`_.
+For more information about libc++, please see the [Libc++ Web Site](https://libcxx.llvm.org) or the [LLVM Web Site](https://llvm.org).
Note that if you are reading this file from a Git checkout or the
main Libc++ web page, this document applies to the *next* release, not
the current one. To see the release notes for a specific release, please
-see the `releases page <https://llvm.org/releases/>`_.
-
-What's New in Libc++ XX.YY.ZZ?
-==============================
-
+see the [releases page](https://llvm.org/releases/).
-Implemented Papers
-------------------
+## What's New in Libc++ XX.YY.ZZ?
+### Implemented Papers
-Improvements and New Features
------------------------------
+### Improvements and New Features
+### Deprecations and Removals
-Deprecations and Removals
--------------------------
-
-
-Upcoming Deprecations and Removals
-----------------------------------
+### Upcoming Deprecations and Removals
NOTE: THIS SHOULD BE POPULATED FROM THE PREVIOUS RELEASE'S UPCOMING DEPRECATIONS AND REMOVALS FOR THE NEXT-NEXT RELEASE (IF ANY)
-ABI Affecting Changes
----------------------
-
+### ABI Affecting Changes
-Build System Changes
---------------------
+### Build System Changes
diff --git a/libcxx/docs/Helpers/Styles.md b/libcxx/docs/Helpers/Styles.md
index b13d2c91ac323..358dde4ad8ea8 100644
--- a/libcxx/docs/Helpers/Styles.md
+++ b/libcxx/docs/Helpers/Styles.md
@@ -1,37 +1,63 @@
-.. raw:: html
-
- <style type="text/css">
- td { text-align: left; }
- .notstarted { opacity: 60%; }
- .nothingtodo {
- background-color: #99FF99;
- font-style: italic;
- }
- .inprogress {
- background-color: #FFFF99;
- font-style: italic;
- }
- .inreview { background-color: #FFFF99; }
- .partial {
- background-color: #2CCCFF;
- font-style: italic;
- }
- .complete { background-color: #99FF99; }
- </style>
+---
+substitutions:
+ Complete: '{complete}`Complete`'
+ In Progress: '{inprogress}`In Progress`'
+ Not Started: '{notstarted}`Not Started`'
+ Nothing To Do: '{nothingtodo}`Nothing To Do`'
+ Partial: '{partial}`Partial`'
+ Review: '{inreview}`Review`'
+ hellip: |-
+ ```{eval-rst}
+ .. unicode:: U+2026
+ ```
+ sect: |-
+ ```{eval-rst}
+ .. unicode:: U+00A7
+ ```
+---
+```{raw} html
+<style type="text/css">
+ td { text-align: left; }
+ .notstarted { opacity: 60%; }
+ .nothingtodo {
+ background-color: #99FF99;
+ font-style: italic;
+ }
+ .inprogress {
+ background-color: #FFFF99;
+ font-style: italic;
+ }
+ .inreview { background-color: #FFFF99; }
+ .partial {
+ background-color: #2CCCFF;
+ font-style: italic;
+ }
+ .complete { background-color: #99FF99; }
+</style>
+```
+
+```{eval-rst}
.. role:: notstarted
+```
+
+```{eval-rst}
.. role:: nothingtodo
+```
+
+```{eval-rst}
.. role:: inprogress
+```
+
+```{eval-rst}
.. role:: inreview
+```
+
+```{eval-rst}
.. role:: partial
-.. role:: complete
+```
-.. |Not Started| replace:: :notstarted:`Not Started`
-.. |Nothing To Do| replace:: :nothingtodo:`Nothing To Do`
-.. |In Progress| replace:: :inprogress:`In Progress`
-.. |Review| replace:: :inreview:`Review`
-.. |Partial| replace:: :partial:`Partial`
-.. |Complete| replace:: :complete:`Complete`
+```{eval-rst}
+.. role:: complete
+```
-.. |sect| unicode:: U+00A7
-.. |hellip| unicode:: U+2026
diff --git a/libcxx/docs/ImplementationDefinedBehavior.md b/libcxx/docs/ImplementationDefinedBehavior.md
index 97ea96a506363..355b978a39313 100644
--- a/libcxx/docs/ImplementationDefinedBehavior.md
+++ b/libcxx/docs/ImplementationDefinedBehavior.md
@@ -1,84 +1,69 @@
-.. _implementation-defined-behavior:
+(implementation-defined-behavior)=
-===============================
-Implementation-defined behavior
-===============================
+# Implementation-defined behavior
This document contains the implementation details of the implementation-defined behavior in libc++.
The C++ standard mandates that implementation-defined behavior is documented.
-.. note:
- This page is far from complete.
+% note:
+% This page is far from complete.
+## Implementation-defined behavior
-Implementation-defined behavior
-===============================
-
-Updating the Time Zone Database
--------------------------------
+### Updating the Time Zone Database
The C++ standard allows implementations to automatically update the
*remote time zone database*. Libc++ opts not to do that. Instead calling
- - ``std::chrono::remote_version()`` will update the version information of the
- *remote time zone database*,
- - ``std::chrono::reload_tzdb()``, if needed, will update the entire
- *remote time zone database*.
+> - `std::chrono::remote_version()` will update the version information of the
+> *remote time zone database*,
+> - `std::chrono::reload_tzdb()`, if needed, will update the entire
+> *remote time zone database*.
This offers a way for users to update the *remote time zone database* and
give them full control over the process.
-
-`[ostream.formatted.print]/3 <http://eel.is/c++draft/ostream.formatted.print#3>`_ A terminal capable of displaying Unicode
---------------------------------------------------------------------------------------------------------------------------
+### [[ostream.formatted.print]/3](http://eel.is/c++draft/ostream.formatted.print#3) A terminal capable of displaying Unicode
The C++ standard specifies that the manner in which a stream is determined to refer
to a terminal capable of displaying Unicode is implementation-defined. This is
-used for ``std::print`` and similar functions taking an ``ostream&`` argument.
+used for `std::print` and similar functions taking an `ostream&` argument.
Libc++ determines that a stream is Unicode-capable terminal by:
-* First it determines whether the stream's ``rdbuf()`` has an underlying
- ``FILE*``. This is ``true`` in the following cases:
+- First it determines whether the stream's `rdbuf()` has an underlying
+ `FILE*`. This is `true` in the following cases:
- * The stream is ``std::cout``, ``std::cerr``, or ``std::clog``.
+ - The stream is `std::cout`, `std::cerr`, or `std::clog`.
+ - A `std::basic_filebuf<CharT, Traits>` derived from `std::filebuf`.
- * A ``std::basic_filebuf<CharT, Traits>`` derived from ``std::filebuf``.
+- The way to determine whether this `FILE*` refers to a terminal capable of
+ displaying Unicode is the same as specified for [void vprint_unicode(FILE\*
+ stream, string_view fmt, format_args args);](http://eel.is/c++draft/print.fun#7). This function is used for other
+ `std::print` overloads that don't take an `ostream&` argument.
-* The way to determine whether this ``FILE*`` refers to a terminal capable of
- displaying Unicode is the same as specified for `void vprint_unicode(FILE*
- stream, string_view fmt, format_args args);
- <http://eel.is/c++draft/print.fun#7>`_. This function is used for other
- ``std::print`` overloads that don't take an ``ostream&`` argument.
-
-`[sf.cmath] <https://wg21.link/sf.cmath>`_ Mathematical Special Functions: Large indices
-----------------------------------------------------------------------------------------
+### [[sf.cmath]](https://wg21.link/sf.cmath) Mathematical Special Functions: Large indices
Most functions within the Mathematical Special Functions section contain integral indices.
The C++ standard specifies the result for larger indices as implementation-defined.
Libc++ pursuits reasonable results by choosing the same formulas as for indices below that threshold.
E.g.,
-- ``std::hermite(unsigned n, T x)`` for ``n >= 128``
-
+- `std::hermite(unsigned n, T x)` for `n >= 128`
-`[filebuf.virtuals] <https://eel.is/c++draft/filebuf.virtual>`_ Effect of calling ``basic_filebuf::setbuf`` with nonzero arguments
-----------------------------------------------------------------------------------------------------------------------------------
+### [[filebuf.virtuals]](https://eel.is/c++draft/filebuf.virtual) Effect of calling `basic_filebuf::setbuf` with nonzero arguments
Libc++ uses the provided buffer as the underlying buffer for input and output, and
does not discard that buffer even when the stream is closed.
-
-`[stringbuf.cons] <http://eel.is/c++draft/stringbuf.cons>`_ Whether sequence pointers are initialized to null pointers
-----------------------------------------------------------------------------------------------------------------------
+### [[stringbuf.cons]](http://eel.is/c++draft/stringbuf.cons) Whether sequence pointers are initialized to null pointers
Libc++ does not initialize the pointers to null pointers. It resizes the buffer
to its capacity and uses that size. This means the SSO buffer of
-``std::string`` is used as initial output buffer.
-
+`std::string` is used as initial output buffer.
-Listed in the index of implementation-defined behavior
-======================================================
+## Listed in the index of implementation-defined behavior
The order of the entries matches the entries in the
-`draft of the Standard <http://eel.is/c++draft/impldefindex>`_.
+[draft of the Standard](http://eel.is/c++draft/impldefindex).
+
diff --git a/libcxx/docs/Modules.md b/libcxx/docs/Modules.md
index c8f3e6194fd84..38ddd34be8611 100644
--- a/libcxx/docs/Modules.md
+++ b/libcxx/docs/Modules.md
@@ -1,226 +1,226 @@
-.. _ModulesInLibcxx:
+(modulesinlibcxx)=
-=================
-Modules in libc++
-=================
+# Modules in libc++
-.. warning:: Modules are an experimental feature. It has additional build
- requirements and not all libc++ configurations are supported yet.
+:::{warning}
+Modules are an experimental feature. It has additional build
+requirements and not all libc++ configurations are supported yet.
- The work is still in an early development state and not
- considered stable nor complete
+The work is still in an early development state and not
+considered stable nor complete
+:::
This page contains information regarding C++23 module support in libc++.
There are two kinds of modules available in Clang
- * `Clang specific modules <https://clang.llvm.org/docs/Modules.html>`_
- * `C++ modules <https://clang.llvm.org/docs/StandardCPlusPlusModules.html>`_
+> - [Clang specific modules](https://clang.llvm.org/docs/Modules.html)
+> - [C++ modules](https://clang.llvm.org/docs/StandardCPlusPlusModules.html)
This page mainly discusses the C++ modules. In C++20 there are also header units,
these are not part of this document.
-Overview
-========
+## Overview
-The module sources are stored in ``.cppm`` files. Modules need to be available
-as BMIs, which are ``.pcm`` files for Clang. BMIs are not portable, they depend
+The module sources are stored in `.cppm` files. Modules need to be available
+as BMIs, which are `.pcm` files for Clang. BMIs are not portable, they depend
on the compiler and the compilation flags used. Therefore there needs to be a
-way to distribute the ``.cppm`` files to the user and offer a way for them to
-build and use the ``.pcm`` files. It is expected this will be done by build
+way to distribute the `.cppm` files to the user and offer a way for them to
+build and use the `.pcm` files. It is expected this will be done by build
systems in the future. To aid early adaptor and build system vendors libc++
currently ships a CMake project to aid building modules.
-.. note:: This CMake file is intended to be a temporary solution and will
- be removed in the future. The timeline for the removal depends
- on the availability of build systems with proper module support.
-
-What works
-~~~~~~~~~~
-
- * Building BMIs
- * Running tests using the ``std`` and ``std.compat`` module
- * Using the ``std`` and ``std.compat`` module in external projects
- * The following "parts disabled" configuration options are supported
-
- * ``LIBCXX_ENABLE_LOCALIZATION``
- * ``LIBCXX_ENABLE_WIDE_CHARACTERS``
- * ``LIBCXX_ENABLE_THREADS``
- * ``LIBCXX_ENABLE_FILESYSTEM``
- * ``LIBCXX_ENABLE_RANDOM_DEVICE``
- * ``LIBCXX_ENABLE_UNICODE``
- * ``LIBCXX_ENABLE_EXCEPTIONS`` [#note-no-windows]_
-
- * A C++20 based extension
-
-.. note::
-
- .. [#note-no-windows] This configuration will probably not work on Windows
- due to hard-coded compilation flags.
-
-Some of the current limitations
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
- * There is no official build system support, libc++ has experimental CMake support
- * Requires CMake 3.26 for C++20 support
- * Requires CMake 3.26 for C++23 support
- * Requires CMake 3.27 for C++26 support
- * Requires Ninja 1.11
- * Requires Clang 17
- * The path to the compiler may not be a symlink, ``clang-scan-deps`` does
- not handle that case properly
- * Libc++ is not tested with modules instead of headers
- * Clang:
- * Including headers after importing the ``std`` module may fail. This is
- hard to solve and there is a work-around by first including all headers
- `bug report <https://llvm.org/PR61465>`__.
-
-Blockers
-~~~~~~~~
-
- * libc++
-
- * Currently the tests only test with modules enabled, but do not import
- modules instead of headers. When converting tests to using modules there
- are still failures. These are under investigation.
-
- * It has not been determined how to fully test libc++ with modules instead
- of headers.
-
- * Clang
-
- * Some concepts do not work properly `bug report <https://llvm.org/PR61465>`__.
-
-
-Using in external projects
-==========================
+:::{note}
+This CMake file is intended to be a temporary solution and will
+be removed in the future. The timeline for the removal depends
+on the availability of build systems with proper module support.
+:::
+
+### What works
+
+> - Building BMIs
+>
+> - Running tests using the `std` and `std.compat` module
+>
+> - Using the `std` and `std.compat` module in external projects
+>
+> - The following "parts disabled" configuration options are supported
+>
+> - `LIBCXX_ENABLE_LOCALIZATION`
+> - `LIBCXX_ENABLE_WIDE_CHARACTERS`
+> - `LIBCXX_ENABLE_THREADS`
+> - `LIBCXX_ENABLE_FILESYSTEM`
+> - `LIBCXX_ENABLE_RANDOM_DEVICE`
+> - `LIBCXX_ENABLE_UNICODE`
+> - `LIBCXX_ENABLE_EXCEPTIONS` [^note-no-windows]
+>
+> - A C++20 based extension
+
+:::{note}
+[^note-no-windows]: This configuration will probably not work on Windows
+ due to hard-coded compilation flags.
+:::
+
+### Some of the current limitations
+
+> - There is no official build system support, libc++ has experimental CMake support
+> - Requires CMake 3.26 for C++20 support
+> - Requires CMake 3.26 for C++23 support
+> - Requires CMake 3.27 for C++26 support
+> - Requires Ninja 1.11
+> - Requires Clang 17
+> - The path to the compiler may not be a symlink, `clang-scan-deps` does
+> not handle that case properly
+> - Libc++ is not tested with modules instead of headers
+> - Clang:
+> : - Including headers after importing the `std` module may fail. This is
+> hard to solve and there is a work-around by first including all headers
+> [bug report](https://llvm.org/PR61465).
+
+### Blockers
+
+> - libc++
+>
+> - Currently the tests only test with modules enabled, but do not import
+> modules instead of headers. When converting tests to using modules there
+> are still failures. These are under investigation.
+> - It has not been determined how to fully test libc++ with modules instead
+> of headers.
+>
+> - Clang
+>
+> - Some concepts do not work properly [bug report](https://llvm.org/PR61465).
+
+## Using in external projects
Users need to be able to build their own BMI files.
-.. note:: The requirements for users to build their own BMI files will remain
- true for the foreseeable future. For now this needs to be done manually.
- Once libc++'s implementation is more mature we will reach out to build
- system vendors, with the goal that building the BMI files is done by
- the build system.
+:::{note}
+The requirements for users to build their own BMI files will remain
+true for the foreseeable future. For now this needs to be done manually.
+Once libc++'s implementation is more mature we will reach out to build
+system vendors, with the goal that building the BMI files is done by
+the build system.
+:::
Currently there are two ways to build modules
- * Use a local build of modules from the build directory. This requires
- Clang 17 or later and CMake 3.26 or later.
-
- * Use the installed modules. This requires Clang 18.1.2 or later and
- a recent build of CMake. The CMake changes will be part of CMake 3.30. This
- method requires you or your distribution to enable module installation.
-
-Using the local build
-~~~~~~~~~~~~~~~~~~~~~
+> - Use a local build of modules from the build directory. This requires
+> Clang 17 or later and CMake 3.26 or later.
+> - Use the installed modules. This requires Clang 18.1.2 or later and
+> a recent build of CMake. The CMake changes will be part of CMake 3.30. This
+> method requires you or your distribution to enable module installation.
-.. code-block:: bash
+### Using the local build
- $ git clone https://github.com/llvm/llvm-project.git
- $ cd llvm-project
- $ mkdir build
- $ cmake -G Ninja -S runtimes -B build -DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi;libunwind"
- $ ninja -C build
+```bash
+$ git clone https://github.com/llvm/llvm-project.git
+$ cd llvm-project
+$ mkdir build
+$ cmake -G Ninja -S runtimes -B build -DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi;libunwind"
+$ ninja -C build
+```
-The above ``build`` directory will be referred to as ``<build>`` in the
+The above `build` directory will be referred to as `<build>` in the
rest of these instructions.
-This is a small sample program that uses the module ``std``. It consists of a
-``CMakeLists.txt`` and a ``main.cpp`` file.
-
-.. code-block:: cpp
-
- import std; // When importing std.compat it's not needed to import std.
- import std.compat;
-
- int main() {
- std::cout << "Hello modular world\n";
- ::printf("Hello compat modular world\n");
- }
-
-.. code-block:: cmake
-
- cmake_minimum_required(VERSION 3.26.0 FATAL_ERROR)
- project("example"
- LANGUAGES CXX
- )
-
- #
- # Set language version used
- #
-
- set(CMAKE_CXX_STANDARD 23)
- set(CMAKE_CXX_STANDARD_REQUIRED YES)
- set(CMAKE_CXX_EXTENSIONS OFF)
-
- #
- # Enable modules in CMake
- #
-
- # This is required to write your own modules in your project.
- if(CMAKE_VERSION VERSION_LESS "3.28.0")
- if(CMAKE_VERSION VERSION_LESS "3.27.0")
- set(CMAKE_EXPERIMENTAL_CXX_MODULE_CMAKE_API "2182bf5c-ef0d-489a-91da-49dbc3090d2a")
- else()
- set(CMAKE_EXPERIMENTAL_CXX_MODULE_CMAKE_API "aa1f7df0-828a-4fcd-9afc-2dc80491aca7")
- endif()
- set(CMAKE_EXPERIMENTAL_CXX_MODULE_DYNDEP 1)
+This is a small sample program that uses the module `std`. It consists of a
+`CMakeLists.txt` and a `main.cpp` file.
+
+```cpp
+import std; // When importing std.compat it's not needed to import std.
+import std.compat;
+
+int main() {
+ std::cout << "Hello modular world\n";
+ ::printf("Hello compat modular world\n");
+}
+```
+
+```cmake
+cmake_minimum_required(VERSION 3.26.0 FATAL_ERROR)
+project("example"
+ LANGUAGES CXX
+)
+
+#
+# Set language version used
+#
+
+set(CMAKE_CXX_STANDARD 23)
+set(CMAKE_CXX_STANDARD_REQUIRED YES)
+set(CMAKE_CXX_EXTENSIONS OFF)
+
+#
+# Enable modules in CMake
+#
+
+# This is required to write your own modules in your project.
+if(CMAKE_VERSION VERSION_LESS "3.28.0")
+ if(CMAKE_VERSION VERSION_LESS "3.27.0")
+ set(CMAKE_EXPERIMENTAL_CXX_MODULE_CMAKE_API "2182bf5c-ef0d-489a-91da-49dbc3090d2a")
else()
- cmake_policy(VERSION 3.28)
+ set(CMAKE_EXPERIMENTAL_CXX_MODULE_CMAKE_API "aa1f7df0-828a-4fcd-9afc-2dc80491aca7")
endif()
-
- #
- # Import the modules from libc++
- #
-
- include(FetchContent)
- FetchContent_Declare(
- std
- URL "file://${LIBCXX_BUILD}/modules/c++/v1/"
- DOWNLOAD_EXTRACT_TIMESTAMP TRUE
- SYSTEM
- )
- FetchContent_MakeAvailable(std)
-
- #
- # Add the project
- #
-
- add_executable(main)
- add_dependencies(main std.compat)
- target_link_libraries(main std.compat)
- target_sources(main
- PRIVATE
- main.cpp
- )
+ set(CMAKE_EXPERIMENTAL_CXX_MODULE_DYNDEP 1)
+else()
+ cmake_policy(VERSION 3.28)
+endif()
+
+#
+# Import the modules from libc++
+#
+
+include(FetchContent)
+FetchContent_Declare(
+ std
+ URL "file://${LIBCXX_BUILD}/modules/c++/v1/"
+ DOWNLOAD_EXTRACT_TIMESTAMP TRUE
+ SYSTEM
+)
+FetchContent_MakeAvailable(std)
+
+#
+# Add the project
+#
+
+add_executable(main)
+add_dependencies(main std.compat)
+target_link_libraries(main std.compat)
+target_sources(main
+ PRIVATE
+ main.cpp
+)
+```
Building this project is done with the following steps, assuming the files
-``main.cpp`` and ``CMakeLists.txt`` are copied in the current directory.
-
-.. code-block:: bash
-
- $ mkdir build
- $ cmake -G Ninja -S . -B build -DCMAKE_CXX_COMPILER=<path-to-compiler> -DLIBCXX_BUILD=<build>
- $ ninja -C build
- $ build/main
+`main.cpp` and `CMakeLists.txt` are copied in the current directory.
-.. warning:: ``<path-to-compiler>`` should point point to the real binary and
- not to a symlink.
+```bash
+$ mkdir build
+$ cmake -G Ninja -S . -B build -DCMAKE_CXX_COMPILER=<path-to-compiler> -DLIBCXX_BUILD=<build>
+$ ninja -C build
+$ build/main
+```
-.. warning:: When using these examples in your own projects make sure the
- compilation flags are the same for the ``std`` module and your
- project. Some flags will affect the generated code, when these
- are different the module cannot be used. For example using
- ``-pthread`` in your project and not in the module will give
- errors like
+:::{warning}
+`<path-to-compiler>` should point point to the real binary and
+not to a symlink.
+:::
- ``error: POSIX thread support was disabled in PCH file but is currently enabled``
+:::{warning}
+When using these examples in your own projects make sure the
+compilation flags are the same for the `std` module and your
+project. Some flags will affect the generated code, when these
+are different the module cannot be used. For example using
+`-pthread` in your project and not in the module will give
+errors like
- ``error: module file _deps/std-build/CMakeFiles/std.dir/std.pcm cannot be loaded due to a configuration mismatch with the current compilation [-Wmodule-file-config-mismatch]``
+`error: POSIX thread support was disabled in PCH file but is currently enabled`
+`error: module file _deps/std-build/CMakeFiles/std.dir/std.pcm cannot be loaded due to a configuration mismatch with the current compilation [-Wmodule-file-config-mismatch]`
+:::
-Using the installed modules
-~~~~~~~~~~~~~~~~~~~~~~~~~~~
+### Using the installed modules
CMake has added experimental support for importing the Standard modules. This
is available in the current nightly builds and will be part of the 3.30
@@ -228,57 +228,59 @@ release. Currently CMake only supports importing the Standard modules in C++23
and later. Enabling this for C++20 is on the TODO list of the CMake
developers.
-The example uses the same ``main.cpp`` as above. It uses the following
-``CMakeLists.txt``:
-
-.. code-block:: cmake
-
- # This requires a recent nightly build.
- # This will be part of CMake 3.30.0.
- cmake_minimum_required(VERSION 3.29.0 FATAL_ERROR)
-
- # Enables the Standard module support. This needs to be done
- # before selecting the languages.
- set(CMAKE_EXPERIMENTAL_CXX_IMPORT_STD "0e5b6991-d74f-4b3d-a41c-cf096e0b2508")
- set(CMAKE_CXX_MODULE_STD ON)
-
- project("example"
- LANGUAGES CXX
- )
-
- #
- # Set language version used
- #
-
- set(CMAKE_CXX_STANDARD 23)
- set(CMAKE_CXX_STANDARD_REQUIRED YES)
- # Currently CMake requires extensions enabled when using import std.
- # https://gitlab.kitware.com/cmake/cmake/-/issues/25916
- # https://gitlab.kitware.com/cmake/cmake/-/issues/25539
- set(CMAKE_CXX_EXTENSIONS ON)
-
- add_executable(main)
- target_sources(main
- PRIVATE
- main.cpp
- )
+The example uses the same `main.cpp` as above. It uses the following
+`CMakeLists.txt`:
+
+```cmake
+# This requires a recent nightly build.
+# This will be part of CMake 3.30.0.
+cmake_minimum_required(VERSION 3.29.0 FATAL_ERROR)
+
+# Enables the Standard module support. This needs to be done
+# before selecting the languages.
+set(CMAKE_EXPERIMENTAL_CXX_IMPORT_STD "0e5b6991-d74f-4b3d-a41c-cf096e0b2508")
+set(CMAKE_CXX_MODULE_STD ON)
+
+project("example"
+ LANGUAGES CXX
+)
+
+#
+# Set language version used
+#
+
+set(CMAKE_CXX_STANDARD 23)
+set(CMAKE_CXX_STANDARD_REQUIRED YES)
+# Currently CMake requires extensions enabled when using import std.
+# https://gitlab.kitware.com/cmake/cmake/-/issues/25916
+# https://gitlab.kitware.com/cmake/cmake/-/issues/25539
+set(CMAKE_CXX_EXTENSIONS ON)
+
+add_executable(main)
+target_sources(main
+ PRIVATE
+ main.cpp
+)
+```
Building this project is done with the following steps, assuming the files
-``main.cpp`` and ``CMakeLists.txt`` are copied in the current directory.
+`main.cpp` and `CMakeLists.txt` are copied in the current directory.
-.. code-block:: bash
+```bash
+$ mkdir build
+$ cmake -G Ninja -S . -B build -DCMAKE_CXX_COMPILER=<path-to-compiler> -DCMAKE_CXX_FLAGS=-stdlib=libc++
+$ ninja -C build
+$ build/main
+```
- $ mkdir build
- $ cmake -G Ninja -S . -B build -DCMAKE_CXX_COMPILER=<path-to-compiler> -DCMAKE_CXX_FLAGS=-stdlib=libc++
- $ ninja -C build
- $ build/main
+:::{warning}
+`<path-to-compiler>` should point point to the real binary and
+not to a symlink.
+:::
-.. warning:: ``<path-to-compiler>`` should point point to the real binary and
- not to a symlink.
+If you have questions about modules feel free to ask them in the `#libcxx`
+channel on [LLVM's Discord server](https://discord.gg/jzUbyP26tQ).
-If you have questions about modules feel free to ask them in the ``#libcxx``
-channel on `LLVM's Discord server <https://discord.gg/jzUbyP26tQ>`__.
-
-If you think you've found a bug please it using the `LLVM bug tracker
-<https://github.com/llvm/llvm-project/issues>`_. Please make sure the issue
+If you think you've found a bug please it using the [LLVM bug tracker](https://github.com/llvm/llvm-project/issues). Please make sure the issue
you found is not one of the known bugs or limitations on this page.
+
diff --git a/libcxx/docs/ReleaseNotes.md b/libcxx/docs/ReleaseNotes.md
index 008f26f23f8ca..de250f469df69 100644
--- a/libcxx/docs/ReleaseNotes.md
+++ b/libcxx/docs/ReleaseNotes.md
@@ -1,13 +1,19 @@
+```{eval-rst}
.. include:: ReleaseNotes/24.md
+```
-.. Make sure to reference the non-live release notes in a toctree to avoid Sphinx errors.
-.. toctree::
- :hidden:
+% Make sure to reference the non-live release notes in a toctree to avoid Sphinx errors.
- ReleaseNotes/20
- ReleaseNotes/21
- ReleaseNotes/22
- ReleaseNotes/23
+```{toctree}
+:hidden: true
+
+ReleaseNotes/20
+ReleaseNotes/21
+ReleaseNotes/22
+ReleaseNotes/23
+```
+
+% The release notes are in versioned files, but we make sure to keep publishing
+
+% them in an unversioned ReleaseNotes.html page for external sites to reference.
-.. The release notes are in versioned files, but we make sure to keep publishing
-.. them in an unversioned ReleaseNotes.html page for external sites to reference.
diff --git a/libcxx/docs/ReleaseNotes/20.md b/libcxx/docs/ReleaseNotes/20.md
index 572d4321dc46f..88ef5a04da030 100644
--- a/libcxx/docs/ReleaseNotes/20.md
+++ b/libcxx/docs/ReleaseNotes/20.md
@@ -1,206 +1,186 @@
-===========================================
-Libc++ 20.0.0 (In-Progress) Release Notes
-===========================================
+# Libc++ 20.0.0 (In-Progress) Release Notes
-.. contents::
- :local:
- :depth: 2
+```{contents}
+:depth: 2
+:local: true
+```
-Written by the `Libc++ Team <https://libcxx.llvm.org>`_
+Written by the [Libc++ Team](https://libcxx.llvm.org)
-.. warning::
+:::{warning}
+These are in-progress notes for the upcoming libc++ 20.0.0 release.
+Release notes for previous releases can be found on
+[the Download Page](https://releases.llvm.org/download.html).
+:::
- These are in-progress notes for the upcoming libc++ 20.0.0 release.
- Release notes for previous releases can be found on
- `the Download Page <https://releases.llvm.org/download.html>`_.
-
-Introduction
-============
+## Introduction
This document contains the release notes for the libc++ C++ Standard Library,
part of the LLVM Compiler Infrastructure, release 20.0.0. Here we describe the
status of libc++ in some detail, including major improvements from the previous
-release and new feature work. For the general LLVM release notes, see `the LLVM
-documentation <https://llvm.org/docs/ReleaseNotes.html>`_. All LLVM releases may
-be downloaded from the `LLVM releases web site <https://llvm.org/releases/>`_.
+release and new feature work. For the general LLVM release notes, see [the LLVM
+documentation](https://llvm.org/docs/ReleaseNotes.html). All LLVM releases may
+be downloaded from the [LLVM releases web site](https://llvm.org/releases/).
-For more information about libc++, please see the `Libc++ Web Site
-<https://libcxx.llvm.org>`_ or the `LLVM Web Site <https://llvm.org>`_.
+For more information about libc++, please see the [Libc++ Web Site](https://libcxx.llvm.org) or the [LLVM Web Site](https://llvm.org).
Note that if you are reading this file from a Git checkout or the
main Libc++ web page, this document applies to the *next* release, not
the current one. To see the release notes for a specific release, please
-see the `releases page <https://llvm.org/releases/>`_.
+see the [releases page](https://llvm.org/releases/).
-What's New in Libc++ 20.0.0?
-==============================
+## What's New in Libc++ 20.0.0?
The main focus of the libc++ team has been to implement new C++20, C++23, and C++26 features.
-Implemented Papers
-------------------
+### Implemented Papers
-- P0619R4: Reviewing Deprecated Facilities of C++17 for C++20 (`Github <https://github.com/llvm/llvm-project/issues/99985>`__)
-- P2747R2: ``constexpr`` placement new (`Github <https://github.com/llvm/llvm-project/issues/105427>`__)
-- P2609R3: Relaxing Ranges Just A Smidge (`Github <https://github.com/llvm/llvm-project/issues/105253>`__)
-- P2985R0: A type trait for detecting virtual base classes (`Github <https://github.com/llvm/llvm-project/issues/105432>`__)
-- ``std::jthread`` and ``<stop_token>`` are not guarded behind ``-fexperimental-library`` anymore
-- P2674R1: A trait for implicit lifetime types (`Github <https://github.com/llvm/llvm-project/issues/105259>`__)
-- P0429R9: A Standard ``flat_map`` (`Github <https://github.com/llvm/llvm-project/issues/105190>`__)
+- P0619R4: Reviewing Deprecated Facilities of C++17 for C++20 ([Github](https://github.com/llvm/llvm-project/issues/99985))
+- P2747R2: `constexpr` placement new ([Github](https://github.com/llvm/llvm-project/issues/105427))
+- P2609R3: Relaxing Ranges Just A Smidge ([Github](https://github.com/llvm/llvm-project/issues/105253))
+- P2985R0: A type trait for detecting virtual base classes ([Github](https://github.com/llvm/llvm-project/issues/105432))
+- `std::jthread` and `<stop_token>` are not guarded behind `-fexperimental-library` anymore
+- P2674R1: A trait for implicit lifetime types ([Github](https://github.com/llvm/llvm-project/issues/105259))
+- P0429R9: A Standard `flat_map` ([Github](https://github.com/llvm/llvm-project/issues/105190))
-Improvements and New Features
------------------------------
+### Improvements and New Features
-- The ``lexicographical_compare`` and ``ranges::lexicographical_compare`` algorithms have been optimized for trivially
+- The `lexicographical_compare` and `ranges::lexicographical_compare` algorithms have been optimized for trivially
equality comparable types, resulting in a performance improvement of up to 40x.
-- The ``_LIBCPP_ENABLE_CXX20_REMOVED_TEMPORARY_BUFFER`` macro has been added to make ``std::get_temporary_buffer`` and
- ``std::return_temporary_buffer`` available.
+- The `_LIBCPP_ENABLE_CXX20_REMOVED_TEMPORARY_BUFFER` macro has been added to make `std::get_temporary_buffer` and
+ `std::return_temporary_buffer` available.
-- The ``std::uncaught_exception`` function was marked as deprecated since C++17 and removed since C++20. The
- ``_LIBCPP_ENABLE_CXX20_REMOVED_UNCAUGHT_EXCEPTION`` macro has been added to make ``std::uncaught_exception``
+- The `std::uncaught_exception` function was marked as deprecated since C++17 and removed since C++20. The
+ `_LIBCPP_ENABLE_CXX20_REMOVED_UNCAUGHT_EXCEPTION` macro has been added to make `std::uncaught_exception`
available in C++20 and later modes.
-- The internal structure ``__compressed_pair`` has been replaced with ``[[no_unique_address]]``, resulting in reduced
+- The internal structure `__compressed_pair` has been replaced with `[[no_unique_address]]`, resulting in reduced
compile times and smaller debug information as well as better code generation if optimizations are disabled.
The Chromium project measured a 5% reduction in object file and debug information size.
-- The ``_LIBCPP_ABI_BOUNDED_UNIQUE_PTR`` ABI configuration was added, which allows ``std::unique_ptr<T[]>`` to
- detect out-of-bounds accesses in certain circumstances. ``std::unique_ptr<T[]>`` can now also detect out-of-bounds
+- The `_LIBCPP_ABI_BOUNDED_UNIQUE_PTR` ABI configuration was added, which allows `std::unique_ptr<T[]>` to
+ detect out-of-bounds accesses in certain circumstances. `std::unique_ptr<T[]>` can now also detect out-of-bounds
accesses for a limited set of types (non-trivially destructible types) when the ABI configuration is disabled.
-- The ``_LIBCPP_ABI_BOUNDED_ITERATORS_IN_STD_ARRAY`` ABI configuration was added, which allows storing valid bounds
- in ``std::array::iterator`` and detecting OOB accesses when the appropriate hardening mode is enabled.
+- The `_LIBCPP_ABI_BOUNDED_ITERATORS_IN_STD_ARRAY` ABI configuration was added, which allows storing valid bounds
+ in `std::array::iterator` and detecting OOB accesses when the appropriate hardening mode is enabled.
-- The ``input_iterator``-pair overload of ``void assign(InputIt, InputIt)`` has been optimized for ``std::vector``,
- resulting in a performance improvement of up to 2x for trivial element types (e.g., ``std::vector<int>``), and up
- to 3.4x for non-trivial element types (e.g., ``std::vector<std::vector<int>>``).
+- The `input_iterator`-pair overload of `void assign(InputIt, InputIt)` has been optimized for `std::vector`,
+ resulting in a performance improvement of up to 2x for trivial element types (e.g., `std::vector<int>`), and up
+ to 3.4x for non-trivial element types (e.g., `std::vector<std::vector<int>>`).
-- The ``input_iterator``-pair overload of ``iterator insert(const_iterator, InputIt, InputIt)`` has been optimized
- for ``std::vector``, resulting in a performance improvement of up to 10x for ``std::vector<int>``, and up to 2.3x
- for ``std::vector<std::vector<int>>``.
+- The `input_iterator`-pair overload of `iterator insert(const_iterator, InputIt, InputIt)` has been optimized
+ for `std::vector`, resulting in a performance improvement of up to 10x for `std::vector<int>`, and up to 2.3x
+ for `std::vector<std::vector<int>>`.
-- On Windows, ``<system_error>``'s ``std::system_category`` is now distinct from ``std::generic_category``. The behavior
+- On Windows, `<system_error>`'s `std::system_category` is now distinct from `std::generic_category`. The behavior
on other operating systems is unchanged.
On Windows -- unlike on Unix systems -- the libc and system APIs use distinct error codes. The libc functions return
- ``errno.h`` error codes via the ``errno`` global, while Win32 API functions return ``winerror.h`` error codes via
- ``GetLastError()``.
+ `errno.h` error codes via the `errno` global, while Win32 API functions return `winerror.h` error codes via
+ `GetLastError()`.
- The C++ standard's ``std::error_code`` and ``std::error_category`` functionality was designed to support multiple
+ The C++ standard's `std::error_code` and `std::error_category` functionality was designed to support multiple
error domains, precisely in order to handle situations such as this. However, libc++ formerly treated
- ``generic_category()`` and ``system_category()`` as equivalent, even on Windows. It now implements the intended split,
- where ``system_category`` represents native ``winerror.h`` error codes, and ``generic_category`` represents libc error
- codes (and, equivalently, ``std::errc::*`` errors).
+ `generic_category()` and `system_category()` as equivalent, even on Windows. It now implements the intended split,
+ where `system_category` represents native `winerror.h` error codes, and `generic_category` represents libc error
+ codes (and, equivalently, `std::errc::*` errors).
- This change enables code like ``std::error_code(GetLastError(), std::system_category()) ==
- std::errc::invalid_argument`` to function as desired: constructing an ``error_code`` with the Windows error number in
- the "system" category, and then mapping it to a generic code with ``error_condition``, for comparison with the
- ``std::errc`` constant.
+ This change enables code like `std::error_code(GetLastError(), std::system_category()) ==
+ std::errc::invalid_argument` to function as desired: constructing an `error_code` with the Windows error number in
+ the "system" category, and then mapping it to a generic code with `error_condition`, for comparison with the
+ `std::errc` constant.
- This is an incompatible change: ``std::error_code(ENOSYS, std::system_category()) ==
- std::errc::function_not_supported`` would formerly have returned true, but now returns false on Windows. Code
- providing a number from the ``errno.h`` domain should be migrated to construct a ``generic_category`` error_code,
- instead. (E.g., use ``std::error_code(ENOSYS, std::generic_category())``). The new behavior matches MSVC.
+ This is an incompatible change: `std::error_code(ENOSYS, std::system_category()) ==
+ std::errc::function_not_supported` would formerly have returned true, but now returns false on Windows. Code
+ providing a number from the `errno.h` domain should be migrated to construct a `generic_category` error_code,
+ instead. (E.g., use `std::error_code(ENOSYS, std::generic_category())`). The new behavior matches MSVC.
-- On Windows, the ``std::filesystem`` library now returns the Win32 ``system_category`` error codes, where it's feasible
+- On Windows, the `std::filesystem` library now returns the Win32 `system_category` error codes, where it's feasible
to do so. This allows interrogation and reporting of the original error code, which is useful if multiple Windows
- errors map to a single generic error (such as with ``std::errc::no_such_file_or_directory``).
+ errors map to a single generic error (such as with `std::errc::no_such_file_or_directory`).
This is also a slightly-incompatible API change: code inspecting the raw integer value from the returned error_code
- expecting an integer from ``generic_category`` (e.g. ``err.value() == ENOTDIR``) will not work as desired. Instead,
- such code should use the comparison operators which implicitly handle eror mappings, ``err ==
- std::errc::not_a_directory``, or use ``err.default_error_condition()`` to map to an ``error_condition``, and then test
- its ``value()`` and ``category()``.
+ expecting an integer from `generic_category` (e.g. `err.value() == ENOTDIR`) will not work as desired. Instead,
+ such code should use the comparison operators which implicitly handle eror mappings, `err ==
+ std::errc::not_a_directory`, or use `err.default_error_condition()` to map to an `error_condition`, and then test
+ its `value()` and `category()`.
-- ``std::stable_sort`` uses radix sort for integral types now, which can improve the performance up to 10 times, depending
+- `std::stable_sort` uses radix sort for integral types now, which can improve the performance up to 10 times, depending
on type of sorted elements and the initial state of the sorted array.
- Reduced the amount of debug information generated for internal typedefs. This reduces the size of debug builds.
-- Added :ref:`hardening mode <hardening>` support for ``forward_list`` and ``bitset``.
+- Added {ref}`hardening mode <hardening>` support for `forward_list` and `bitset`.
-- The performance of ``std::getline`` has been improved, resulting in a performance uplift of up to 10x.
+- The performance of `std::getline` has been improved, resulting in a performance uplift of up to 10x.
-Deprecations and Removals
--------------------------
+### Deprecations and Removals
-- The ``LIBCXX_ENABLE_ASSERTIONS`` CMake variable and the ``_LIBCPP_ENABLE_ASSERTIONS`` macro that were used to
- enable the safe mode have been removed in LLVM 20. Please use :ref:`support for hardening <using-hardening-modes>`
+- The `LIBCXX_ENABLE_ASSERTIONS` CMake variable and the `_LIBCPP_ENABLE_ASSERTIONS` macro that were used to
+ enable the safe mode have been removed in LLVM 20. Please use {ref}`support for hardening <using-hardening-modes>`
instead.
-
-- Support for the C++20 synchronization library (``<barrier>``, ``<latch>``, ``atomic::wait``, etc.) has been
+- Support for the C++20 synchronization library (`<barrier>`, `<latch>`, `atomic::wait`, etc.) has been
removed in language modes prior to C++20. If you are using these features prior to C++20, you will need to
- update to ``-std=c++20``.
-
-- The relational operators for ``std::chrono::weekday`` has been removed entirely, and the
- ``_LIBCPP_ENABLE_REMOVED_WEEKDAY_RELATIONAL_OPERATORS`` macro is now ignored.
-
-- The ``_LIBCPP_ENABLE_REMOVED_ALLOCATOR_CONST`` macro no longer has any effect. ``std::allocator<const T>`` is not
- supported as an extension anymore, please migrate any code that uses e.g. ``std::vector<const T>`` to be
+ update to `-std=c++20`.
+- The relational operators for `std::chrono::weekday` has been removed entirely, and the
+ `_LIBCPP_ENABLE_REMOVED_WEEKDAY_RELATIONAL_OPERATORS` macro is now ignored.
+- The `_LIBCPP_ENABLE_REMOVED_ALLOCATOR_CONST` macro no longer has any effect. `std::allocator<const T>` is not
+ supported as an extension anymore, please migrate any code that uses e.g. `std::vector<const T>` to be
standards conforming.
-
-- Non-conforming member typedefs ``base``, ``iterator``, ``const_iterator``, ``size_type``, ``difference_type``, and
- ``const_reference`` of ``std::bitset``, and member typedef ``base`` of ``std::forward_list`` and ``std::list`` are
- removed. Previously, these member typedefs (except ``const_reference``) were private but could cause ambiguity in name
+- Non-conforming member typedefs `base`, `iterator`, `const_iterator`, `size_type`, `difference_type`, and
+ `const_reference` of `std::bitset`, and member typedef `base` of `std::forward_list` and `std::list` are
+ removed. Previously, these member typedefs (except `const_reference`) were private but could cause ambiguity in name
lookup. Code that expects such ambiguity will possibly not compile in LLVM 20.
-
-- The function ``__libcpp_verbose_abort()`` is now ``noexcept``, to match ``std::terminate()``. (The combination of
- ``noexcept`` and ``[[noreturn]]`` has special significance for function effects analysis.) For backwards compatibility,
- the ``_LIBCPP_VERBOSE_ABORT_NOT_NOEXCEPT`` macro can be defined to make the function non-``noexcept``. That macro
+- The function `__libcpp_verbose_abort()` is now `noexcept`, to match `std::terminate()`. (The combination of
+ `noexcept` and `[[noreturn]]` has special significance for function effects analysis.) For backwards compatibility,
+ the `_LIBCPP_VERBOSE_ABORT_NOT_NOEXCEPT` macro can be defined to make the function non-`noexcept`. That macro
will be removed in LLVM 21.
-
-- ``<ccomplex>``, ``<cstdalign>`` (previously missing), ``<cstdbool>``, and ``<ctgmath>`` are deprecated since C++17 as
- specified by the standard. They, together with ``<ciso646>``, are removed in C++20, but libc++ still provides these
- headers as an extension and only deprecates them. The ``_LIBCPP_DISABLE_DEPRECATION_WARNINGS`` macro can be defined to
+- `<ccomplex>`, `<cstdalign>` (previously missing), `<cstdbool>`, and `<ctgmath>` are deprecated since C++17 as
+ specified by the standard. They, together with `<ciso646>`, are removed in C++20, but libc++ still provides these
+ headers as an extension and only deprecates them. The `_LIBCPP_DISABLE_DEPRECATION_WARNINGS` macro can be defined to
suppress deprecation for these headers.
-
-- The pointer safety functions ``declare_reachable``, ``declare_no_pointers``, ``undeclare_no_pointers`` and
- ``__undeclare_reachable`` have been removed from the library. These functions were never implemented in a non-trivial
+- The pointer safety functions `declare_reachable`, `declare_no_pointers`, `undeclare_no_pointers` and
+ `__undeclare_reachable` have been removed from the library. These functions were never implemented in a non-trivial
way, making it very unlikely that any binary depends on them.
-
-- Non-conforming extension ``packaged_task::result_type`` is deprecated. It will be removed in LLVM 21.
-
-- The changes for ``ranges::zip_view`` from `P2165R4 <https://wg21.link/P2165R4>`_ have been implemented. This can
- lead to code assuming that ``zip_view`` produces ``std::pair`` to stop compiling now that it produces ``std::tuple``.
- The cases are rare since ``tuple`` and ``pair`` are compatible for the most part, but this can lead to code that
+- Non-conforming extension `packaged_task::result_type` is deprecated. It will be removed in LLVM 21.
+- The changes for `ranges::zip_view` from [P2165R4](https://wg21.link/P2165R4) have been implemented. This can
+ lead to code assuming that `zip_view` produces `std::pair` to stop compiling now that it produces `std::tuple`.
+ The cases are rare since `tuple` and `pair` are compatible for the most part, but this can lead to code that
was previously accepted now being rejected. This is necessary for libc++ to be conforming, so we don't provide any
way to opt-out of that behavior.
-Upcoming Deprecations and Removals
-----------------------------------
+### Upcoming Deprecations and Removals
-LLVM 21
-~~~~~~~
+#### LLVM 21
- The status of the C++03 implementation will be frozen after the LLVM 21 release. This means that starting in LLVM 22,
non-critical bug fixes may not be back-ported to C++03, including LWG issues. C++03 is a legacy platform, where most
projects are no longer actively maintained. To reduce the amount of fixes required to keep such legacy projects
compiling with up-to-date toolchains, libc++ will aim to freeze the status of the headers in C++03 mode to avoid
- unintended breaking changes. See https://discourse.llvm.org/t/rfc-freezing-c-03-headers-in-libc for more details.
+ unintended breaking changes. See <https://discourse.llvm.org/t/rfc-freezing-c-03-headers-in-libc> for more details.
If you are using C++03 in your project, you should consider moving to a newer version of the Standard to get the most
out of libc++.
-- The ``_LIBCPP_VERBOSE_ABORT_NOT_NOEXCEPT`` macro will be removed in LLVM 21, making ``std::__libcpp_verbose_abort``
- unconditionally ``noexcept``.
-
-- Non-conforming extension ``packaged_task::result_type`` will be removed in LLVM 21.
+- The `_LIBCPP_VERBOSE_ABORT_NOT_NOEXCEPT` macro will be removed in LLVM 21, making `std::__libcpp_verbose_abort`
+ unconditionally `noexcept`.
+- Non-conforming extension `packaged_task::result_type` will be removed in LLVM 21.
-ABI Affecting Changes
----------------------
+### ABI Affecting Changes
-- The ABI breaks for removing undefined behaviour in ``std::forward_list``, ``std::list``, ``std::map``, ``std::set``,
- ``std::multimap``, ``std::multiset``, ``std::unordered_map``, ``std::unordered_set``, ``std::unordered_multimap`` and
- ``std::unordered_multiset`` are now applied unconditionally. This only affects fancy pointers which have a different
+- The ABI breaks for removing undefined behaviour in `std::forward_list`, `std::list`, `std::map`, `std::set`,
+ `std::multimap`, `std::multiset`, `std::unordered_map`, `std::unordered_set`, `std::unordered_multimap` and
+ `std::unordered_multiset` are now applied unconditionally. This only affects fancy pointers which have a different
value representation when pointing at the base of an internal node type instead of the type itself. A size or
alignment difference is diagnosed, but more subtle ABI breaks may result in unexpected behaviour.
-- The internal structure ``__compressed_pair`` has been replaced with ``[[no_unique_address]]``. The ABI impact is:
+- The internal structure `__compressed_pair` has been replaced with `[[no_unique_address]]`. The ABI impact is:
- When using the Itanium ABI (most non-MSVC platforms), empty types are now placed at the beginning of the enclosing
- object instead of where the beginning of the ``__compressed_pair`` subobject was. This is only observable by
+ object instead of where the beginning of the `__compressed_pair` subobject was. This is only observable by
checking the address of the empty allocator, equality comparator or hasher.
- Additionally, using an overaligned empty type as an allocator, comparator or hasher in the associative containers
(and only those containers) may result in the container's object object size and data layout changing beyond only
@@ -211,7 +191,8 @@ ABI Affecting Changes
- The localization support base API has been reimplemented, leading to different functions being exported from the
libc++ built library on Windows and Windows-like platforms.
-- The changes for ``ranges::zip_view`` from `P2165R4 <https://wg21.link/P2165R4>`_ have been implemented. This changes
- the element type of ``zip_view`` from a ``std::pair`` to a ``std::tuple`` in some cases. This is technically an ABI
- break, however since ``zip_view`` is generally not an ABI sensitive type, we don't expect users to encounter any
+- The changes for `ranges::zip_view` from [P2165R4](https://wg21.link/P2165R4) have been implemented. This changes
+ the element type of `zip_view` from a `std::pair` to a `std::tuple` in some cases. This is technically an ABI
+ break, however since `zip_view` is generally not an ABI sensitive type, we don't expect users to encounter any
issues and we don't provide a way to change this behavior, which would make libc++ non-conforming.
+
diff --git a/libcxx/docs/ReleaseNotes/21.md b/libcxx/docs/ReleaseNotes/21.md
index 2b1aa28b62090..557b4061c8779 100644
--- a/libcxx/docs/ReleaseNotes/21.md
+++ b/libcxx/docs/ReleaseNotes/21.md
@@ -1,169 +1,140 @@
-===========================================
-Libc++ 21.0.0 (In-Progress) Release Notes
-===========================================
+# Libc++ 21.0.0 (In-Progress) Release Notes
-.. contents::
- :local:
- :depth: 2
+```{contents}
+:depth: 2
+:local: true
+```
-Written by the `Libc++ Team <https://libcxx.llvm.org>`_
+Written by the [Libc++ Team](https://libcxx.llvm.org)
-.. warning::
+:::{warning}
+These are in-progress notes for the upcoming libc++ 21.0.0 release.
+Release notes for previous releases can be found on
+[the Download Page](https://releases.llvm.org/download.html).
+:::
- These are in-progress notes for the upcoming libc++ 21.0.0 release.
- Release notes for previous releases can be found on
- `the Download Page <https://releases.llvm.org/download.html>`_.
-
-Introduction
-============
+## Introduction
This document contains the release notes for the libc++ C++ Standard Library,
part of the LLVM Compiler Infrastructure, release 21.0.0. Here we describe the
status of libc++ in some detail, including major improvements from the previous
-release and new feature work. For the general LLVM release notes, see `the LLVM
-documentation <https://llvm.org/docs/ReleaseNotes.html>`_. All LLVM releases may
-be downloaded from the `LLVM releases web site <https://llvm.org/releases/>`_.
+release and new feature work. For the general LLVM release notes, see [the LLVM
+documentation](https://llvm.org/docs/ReleaseNotes.html). All LLVM releases may
+be downloaded from the [LLVM releases web site](https://llvm.org/releases/).
-For more information about libc++, please see the `Libc++ Web Site
-<https://libcxx.llvm.org>`_ or the `LLVM Web Site <https://llvm.org>`_.
+For more information about libc++, please see the [Libc++ Web Site](https://libcxx.llvm.org) or the [LLVM Web Site](https://llvm.org).
Note that if you are reading this file from a Git checkout or the
main Libc++ web page, this document applies to the *next* release, not
the current one. To see the release notes for a specific release, please
-see the `releases page <https://llvm.org/releases/>`_.
-
-What's New in Libc++ 21.0.0?
-==============================
-
-Implemented Papers
-------------------
-
-- N4258: Cleaning-up noexcept in the Library (`Github <https://github.com/llvm/llvm-project/issues/99937>`__)
-- P0767R1: Deprecate POD (`Github <https://github.com/llvm/llvm-project/issues/104013>`__)
-- P1361R2: Integration of chrono with text formatting (`Github <https://github.com/llvm/llvm-project/issues/100014>`__)
-- P2255R2: A type trait to detect reference binding to temporary (implemented the type traits only) (`Github <https://github.com/llvm/llvm-project/issues/105180>`__)
-- P2372R3: Fixing locale handling in chrono formatters (`Github <https://github.com/llvm/llvm-project/issues/100043>`__)
-- P2562R1: ``constexpr`` Stable Sorting (`Github <https://github.com/llvm/llvm-project/issues/105360>`__)
-- P0472R3: Put std::monostate in <utility> (`Github <https://github.com/llvm/llvm-project/issues/127874>`__)
-- P1222R4: A Standard ``flat_set`` (`Github <https://github.com/llvm/llvm-project/issues/105193>`__)
-- P2897R7: ``aligned_accessor``: An mdspan accessor expressing pointer over-alignment (`Github <https://github.com/llvm/llvm-project/issues/118372>`__)
-- P3247R2: Deprecate the notion of trivial types (`Github <https://github.com/llvm/llvm-project/issues/118387>`__)
-- P3372R3: ``constexpr`` containers and adaptors (`Github <https://github.com/llvm/llvm-project/issues/127876>`__) (``forward_list``, ``list``, ``priority_queue``, ``flat_map``, and ``flat_set`` are implemented)
-- P2441R2: ``views::join_with`` (`Github <https://github.com/llvm/llvm-project/issues/105185>`__)
-- P2711R1: Making multi-param constructors of ``views`` ``explicit`` (`Github <https://github.com/llvm/llvm-project/issues/105252>`__)
-- P2770R0: Stashing stashing ``iterators`` for proper flattening (`Github <https://github.com/llvm/llvm-project/issues/105250>`__)
-- P2655R3: ``common_reference_t`` of ``reference_wrapper`` Should Be a Reference Type (`Github <https://github.com/llvm/llvm-project/issues/105260>`__)
-- P3379R0: Constrain ``std::expected`` equality operators (`Github <https://github.com/llvm/llvm-project/issues/118135>`__)
-
-Improvements and New Features
------------------------------
-
-- The ``std::ranges::{copy, copy_n, copy_backward, move, move_backward, rotate}`` algorithms have been optimized for
- ``std::vector<bool>::iterator``, resulting in a performance improvement of up to 2000x.
-
-- The ``std::ranges::equal`` algorithm has been optimized for ``std::vector<bool>::iterator``, resulting in a performance
+see the [releases page](https://llvm.org/releases/).
+
+## What's New in Libc++ 21.0.0?
+
+### Implemented Papers
+
+- N4258: Cleaning-up noexcept in the Library ([Github](https://github.com/llvm/llvm-project/issues/99937))
+- P0767R1: Deprecate POD ([Github](https://github.com/llvm/llvm-project/issues/104013))
+- P1361R2: Integration of chrono with text formatting ([Github](https://github.com/llvm/llvm-project/issues/100014))
+- P2255R2: A type trait to detect reference binding to temporary (implemented the type traits only) ([Github](https://github.com/llvm/llvm-project/issues/105180))
+- P2372R3: Fixing locale handling in chrono formatters ([Github](https://github.com/llvm/llvm-project/issues/100043))
+- P2562R1: `constexpr` Stable Sorting ([Github](https://github.com/llvm/llvm-project/issues/105360))
+- P0472R3: Put std::monostate in \<utility> ([Github](https://github.com/llvm/llvm-project/issues/127874))
+- P1222R4: A Standard `flat_set` ([Github](https://github.com/llvm/llvm-project/issues/105193))
+- P2897R7: `aligned_accessor`: An mdspan accessor expressing pointer over-alignment ([Github](https://github.com/llvm/llvm-project/issues/118372))
+- P3247R2: Deprecate the notion of trivial types ([Github](https://github.com/llvm/llvm-project/issues/118387))
+- P3372R3: `constexpr` containers and adaptors ([Github](https://github.com/llvm/llvm-project/issues/127876)) (`forward_list`, `list`, `priority_queue`, `flat_map`, and `flat_set` are implemented)
+- P2441R2: `views::join_with` ([Github](https://github.com/llvm/llvm-project/issues/105185))
+- P2711R1: Making multi-param constructors of `views` `explicit` ([Github](https://github.com/llvm/llvm-project/issues/105252))
+- P2770R0: Stashing stashing `iterators` for proper flattening ([Github](https://github.com/llvm/llvm-project/issues/105250))
+- P2655R3: `common_reference_t` of `reference_wrapper` Should Be a Reference Type ([Github](https://github.com/llvm/llvm-project/issues/105260))
+- P3379R0: Constrain `std::expected` equality operators ([Github](https://github.com/llvm/llvm-project/issues/118135))
+
+### Improvements and New Features
+
+- The `std::ranges::{copy, copy_n, copy_backward, move, move_backward, rotate}` algorithms have been optimized for
+ `std::vector<bool>::iterator`, resulting in a performance improvement of up to 2000x.
+- The `std::ranges::equal` algorithm has been optimized for `std::vector<bool>::iterator`, resulting in a performance
improvement of up to 188x.
-
-- The ``std::ranges::swap_ranges`` algorithm has been optimized for ``std::vector<bool>::iterator``, resulting in a
+- The `std::ranges::swap_ranges` algorithm has been optimized for `std::vector<bool>::iterator`, resulting in a
performance improvement of up to 611x.
-
- Updated formatting library to Unicode 16.0.0.
-
-- The ``num_put::do_put`` integral overloads have been optimized, resulting in a performance improvement of up to 2.4x.
-
-- The ``std::stable_sort`` algorithm uses radix sort for floating-point types now, which can improve the performance
+- The `num_put::do_put` integral overloads have been optimized, resulting in a performance improvement of up to 2.4x.
+- The `std::stable_sort` algorithm uses radix sort for floating-point types now, which can improve the performance
up to 10x, depending on type of sorted elements and the initial state of the sorted array.
-
-- The segmented iterator optimization for ``std::for_each`` has been backported to C++11. Previously it was only available
+- The segmented iterator optimization for `std::for_each` has been backported to C++11. Previously it was only available
in C++23 and later.
-
-- The ``std::for_each_n``, ``std::ranges::for_each`` and ``std::ranges::for_each_n`` algorithms have been optimized for
- segmented iterators, resulting in a performance improvement of up to 17.7x for ``std::deque<short>`` iterators, and up
- to 13.9x for ``std::join_view<vector<vector<short>>>`` iterators.
-
-- The ``bitset::to_string`` function has been optimized, resulting in a performance improvement of up to 8.3x for bitsets
+- The `std::for_each_n`, `std::ranges::for_each` and `std::ranges::for_each_n` algorithms have been optimized for
+ segmented iterators, resulting in a performance improvement of up to 17.7x for `std::deque<short>` iterators, and up
+ to 13.9x for `std::join_view<vector<vector<short>>>` iterators.
+- The `bitset::to_string` function has been optimized, resulting in a performance improvement of up to 8.3x for bitsets
with uniformly distributed zeros and ones, and up to 13.5x and 16.1x for sparse and dense bitsets, respectively.
-
-- The ``flat_map::insert`` and ``flat_set::insert_range`` have been optimized, resulting in a performance improvement of up
- to 10x for inserting elements into a ``flat_map`` when the input range is a ``flat_map`` or a ``zip_view``.
-
-- ``ctype::tolower`` and ``ctype::toupper`` have been optimized, resulting in a 2x performance improvement.
-
+- The `flat_map::insert` and `flat_set::insert_range` have been optimized, resulting in a performance improvement of up
+ to 10x for inserting elements into a `flat_map` when the input range is a `flat_map` or a `zip_view`.
+- `ctype::tolower` and `ctype::toupper` have been optimized, resulting in a 2x performance improvement.
- As an experimental feature, Hardening now supports assertion semantics that allow customizing how a hardening
- assertion failure is handled. The four available semantics, modeled on C++26 Contracts, are ``ignore``, ``observe``,
- ``quick-enforce`` and ``enforce``. The ``observe`` semantic is intended to make it easier to adopt Hardening in
- production but should not be used outside of this scenario. Please refer to the :ref:`Hardening documentation
+ assertion failure is handled. The four available semantics, modeled on C++26 Contracts, are `ignore`, `observe`,
+ `quick-enforce` and `enforce`. The `observe` semantic is intended to make it easier to adopt Hardening in
+ production but should not be used outside of this scenario. Please refer to the {ref}`Hardening documentation
<hardening>` for details.
-Deprecations and Removals
--------------------------
-
-- ``std::is_pod`` and ``std::is_pod_v`` are deprecated in C++20 and later.
-
-- ``std::is_trivial`` and ``std::is_trivial_v`` are deprecated in C++26 and later.
+### Deprecations and Removals
-- The ``_LIBCPP_VERBOSE_ABORT_NOT_NOEXCEPT`` has been removed, making ``std::__libcpp_verbose_abort``
- unconditionally ``noexcept``.
-
-- libc++ no longer adds ``constexpr`` to ``std::hash<std::vector<bool, A>>::operator()``, as the ``constexpr`` addition
+- `std::is_pod` and `std::is_pod_v` are deprecated in C++20 and later.
+- `std::is_trivial` and `std::is_trivial_v` are deprecated in C++26 and later.
+- The `_LIBCPP_VERBOSE_ABORT_NOT_NOEXCEPT` has been removed, making `std::__libcpp_verbose_abort`
+ unconditionally `noexcept`.
+- libc++ no longer adds `constexpr` to `std::hash<std::vector<bool, A>>::operator()`, as the `constexpr` addition
since C++20 was an unintended extension.
+- The non-conforming extension `packaged_task::result_type` has been removed in LLVM 21.
-- The non-conforming extension ``packaged_task::result_type`` has been removed in LLVM 21.
-
-Potentially breaking changes
-----------------------------
+### Potentially breaking changes
-- The implementation of ``num_put::do_put`` has been replaced to improve the performance, which can lead to different
+- The implementation of `num_put::do_put` has been replaced to improve the performance, which can lead to different
output when printing pointers.
-
-- User-defined specializations of ``std::common_reference`` are diagnosed now. To customize the common reference type, ``std::basic_common_reference`` should be specialized instead.
-
-- ``std::function`` used to have allocator support, which was removed from the Standard by `http://wg21.link/p0302r1`
+- User-defined specializations of `std::common_reference` are diagnosed now. To customize the common reference type, `std::basic_common_reference` should be specialized instead.
+- `std::function` used to have allocator support, which was removed from the Standard by `http://wg21.link/p0302r1`
due to issues with its design and inconsistent support from implementations. Previously, libc++ would provide
- allocator-aware APIs in ``std::function`` in C++11 and C++14, but ignores the allocator argument in all places but
+ allocator-aware APIs in `std::function` in C++11 and C++14, but ignores the allocator argument in all places but
one. Starting in this release, the allocator argument is always ignored.
-Announcements About Future Releases
------------------------------------
+### Announcements About Future Releases
-LLVM 22
-~~~~~~~
+#### LLVM 22
- The status of the C++03 implementation will be frozen after the LLVM 21 release. This means that starting in LLVM 22,
non-critical bug fixes may not be back-ported to C++03, including LWG issues. C++03 is a legacy platform, where most
projects are no longer actively maintained. To reduce the amount of fixes required to keep such legacy projects
compiling with up-to-date toolchains, libc++ will aim to freeze the status of the headers in C++03 mode to avoid
- unintended breaking changes. See https://discourse.llvm.org/t/rfc-freezing-c-03-headers-in-libc for more details.
+ unintended breaking changes. See <https://discourse.llvm.org/t/rfc-freezing-c-03-headers-in-libc> for more details.
If you are using C++03 in your project, you should consider moving to a newer version of the Standard to get the most
out of libc++.
+### ABI Affecting Changes
-ABI Affecting Changes
----------------------
-
-- When using GCC, the ``std`` namespace is now annotated with ``[[gnu::visibility("default")]]``. This may cause more
- symbols to be exported from shared libraries when building with ``-fvisibility=hidden``. This also fixes RTTI
+- When using GCC, the `std` namespace is now annotated with `[[gnu::visibility("default")]]`. This may cause more
+ symbols to be exported from shared libraries when building with `-fvisibility=hidden`. This also fixes RTTI
comparison between shared libraries, since all RTTI has the correct visibility now. There is no behaviour change on
Clang.
-- LLVM 20 contained an ABI break that can result in the size of ``std::unordered_{map,set,multimap,multiset}`` and ``std::deque`` changing when used with an allocator type that is empty and contains a base class that is the same across rebound allocator instantiations (e.g. ``Allocator<int>`` and ``Allocator<char>`` are both empty and contain the same base class).
+- LLVM 20 contained an ABI break that can result in the size of `std::unordered_{map,set,multimap,multiset}` and `std::deque` changing when used with an allocator type that is empty and contains a base class that is the same across rebound allocator instantiations (e.g. `Allocator<int>` and `Allocator<char>` are both empty and contain the same base class).
In addition, the layout of a user-defined type that:
- - contains one of the following containers: ``std::unordered_{map,set,multimap,multiset}``, ``std::deque``, ``std::map``, ``std::set``, ``std::multimap``, ``std::multiset``, ``std::list`` or ``std::vector``, and
- - passes an empty allocator, comparator or hasher type to that container, and
- - has a member of that same empty allocator, comparator or hasher type inside the enclosing struct, and
- - that member is either marked with ``[[no_unique_address]]`` or optimized out via the EBO (empty base optimization) technique
+ > - contains one of the following containers: `std::unordered_{map,set,multimap,multiset}`, `std::deque`, `std::map`, `std::set`, `std::multimap`, `std::multiset`, `std::list` or `std::vector`, and
+ > - passes an empty allocator, comparator or hasher type to that container, and
+ > - has a member of that same empty allocator, comparator or hasher type inside the enclosing struct, and
+ > - that member is either marked with `[[no_unique_address]]` or optimized out via the EBO (empty base optimization) technique
- saw its size increase from LLVM 19 to LLVM 20. This was caused by the usage of ``[[no_unique_address]]`` within some of libc++'s containers in a way that allowed subtle interactions with enclosing objects. This is fixed in LLVM 21 when using the Clang compiler (returning to the LLVM 19 ABI), however that implies an ABI break from LLVM 20 to LLVM 21.
+ saw its size increase from LLVM 19 to LLVM 20. This was caused by the usage of `[[no_unique_address]]` within some of libc++'s containers in a way that allowed subtle interactions with enclosing objects. This is fixed in LLVM 21 when using the Clang compiler (returning to the LLVM 19 ABI), however that implies an ABI break from LLVM 20 to LLVM 21.
- Furthermore, fixing this causes a slight regression to constant evaluation support in ``std::unique_ptr``. Specifically, constant evaluation will now fail when the deleter relies on being value-initialized for constant-evaluation admissibility. If a default-initialized deleter can be used during constant evaluation, or if the default constructor is non-trivial, the ``unique_ptr`` is not affected by this regression. In particular, this regression does not impact any ``unique_ptr`` using the default deleter.
+ Furthermore, fixing this causes a slight regression to constant evaluation support in `std::unique_ptr`. Specifically, constant evaluation will now fail when the deleter relies on being value-initialized for constant-evaluation admissibility. If a default-initialized deleter can be used during constant evaluation, or if the default constructor is non-trivial, the `unique_ptr` is not affected by this regression. In particular, this regression does not impact any `unique_ptr` using the default deleter.
Note that there is currently no way to realistically fix this ABI break on GCC, therefore GCC will remain on the ABI introduced in LLVM 19. That also means that Clang and GCC will have a slightly different ABI for the small subset of types listed above until we are able to apply the same fix we did with Clang on GCC.
- For more details see https://llvm.org/PR154146.
+ For more details see <https://llvm.org/PR154146>.
-Build System Changes
---------------------
+### Build System Changes
- TODO
+
diff --git a/libcxx/docs/ReleaseNotes/22.md b/libcxx/docs/ReleaseNotes/22.md
index 9f9927095a61f..599c7e76a9ddd 100644
--- a/libcxx/docs/ReleaseNotes/22.md
+++ b/libcxx/docs/ReleaseNotes/22.md
@@ -1,158 +1,145 @@
-===========================================
-Libc++ 22.0.0 (In-Progress) Release Notes
-===========================================
+# Libc++ 22.0.0 (In-Progress) Release Notes
-.. contents::
- :local:
- :depth: 2
+```{contents}
+:depth: 2
+:local: true
+```
-Written by the `Libc++ Team <https://libcxx.llvm.org>`_
+Written by the [Libc++ Team](https://libcxx.llvm.org)
-.. warning::
+:::{warning}
+These are in-progress notes for the upcoming libc++ 22.0.0 release.
+Release notes for previous releases can be found on
+[the Download Page](https://releases.llvm.org/download.html).
+:::
- These are in-progress notes for the upcoming libc++ 22.0.0 release.
- Release notes for previous releases can be found on
- `the Download Page <https://releases.llvm.org/download.html>`_.
-
-Introduction
-============
+## Introduction
This document contains the release notes for the libc++ C++ Standard Library,
part of the LLVM Compiler Infrastructure, release 22.0.0. Here we describe the
status of libc++ in some detail, including major improvements from the previous
-release and new feature work. For the general LLVM release notes, see `the LLVM
-documentation <https://llvm.org/docs/ReleaseNotes.html>`_. All LLVM releases may
-be downloaded from the `LLVM releases web site <https://llvm.org/releases/>`_.
+release and new feature work. For the general LLVM release notes, see [the LLVM
+documentation](https://llvm.org/docs/ReleaseNotes.html). All LLVM releases may
+be downloaded from the [LLVM releases web site](https://llvm.org/releases/).
-For more information about libc++, please see the `Libc++ Web Site
-<https://libcxx.llvm.org>`_ or the `LLVM Web Site <https://llvm.org>`_.
+For more information about libc++, please see the [Libc++ Web Site](https://libcxx.llvm.org) or the [LLVM Web Site](https://llvm.org).
Note that if you are reading this file from a Git checkout or the
main Libc++ web page, this document applies to the *next* release, not
the current one. To see the release notes for a specific release, please
-see the `releases page <https://llvm.org/releases/>`_.
-
-What's New in Libc++ 22.0.0?
-==============================
-
-Implemented Papers
-------------------
-
-- P2592R3: Hashing support for ``std::chrono`` value classes (`Github <https://llvm.org/PR105358>`__)
-- P2321R2: ``zip`` (`Github <https://llvm.org/PR105169>`__)
-- P2988R12: ``std::optional<T&>`` (`Github <https://llvm.org/PR148131>`__)
-- P3044R2: sub-``string_view`` from ``string`` (`Github <https://llvm.org/PR148140>`__)
-- P3223R2: Making ``std::istream::ignore`` less surprising (`Github <https://llvm.org/PR148178>`__)
-- P3060R3: Add ``std::views::indices(n)`` (`Github <https://llvm.org/PR148175>`__)
-- P2404R3: Move-only types for ``equality_comparable_with``, ``totally_ordered_with``, and ``three_way_comparable_with``
- (`Github <https://llvm.org/PR105210>`__)
-- P2641R4: Checking if a ``union`` alternative is active (``std::is_within_lifetime``)
- (`Github <https://llvm.org/PR105381>`__)
-- P2835R7: Expose ``std::atomic_ref``'s object address (`Github <https://llvm.org/PR118377>`__)
-- P2944R3: Comparisons for ``reference_wrapper`` (`Github <https://llvm.org/PR105424>`__)
-- P3168R2: Give ``std::optional`` Range Support
- (guarded by ``-fexperimental-library``, `Github <https://llvm.org/PR105430>`__)
-- P3567R2: ``flat_meow`` Fixes (`Github <https://llvm.org/PR162022>`__)
-- P3836R2: Make ``optional<T&>`` trivially copyable (`Github <https://llvm.org/PR171275>`__)
-- P1789R3: Library Support for Expansion Statements (`Github <https://llvm.org/PR167184>`__)
-
-Improvements and New Features
------------------------------
+see the [releases page](https://llvm.org/releases/).
+
+## What's New in Libc++ 22.0.0?
+
+### Implemented Papers
+
+- P2592R3: Hashing support for `std::chrono` value classes ([Github](https://llvm.org/PR105358))
+- P2321R2: `zip` ([Github](https://llvm.org/PR105169))
+- P2988R12: `std::optional<T&>` ([Github](https://llvm.org/PR148131))
+- P3044R2: sub-`string_view` from `string` ([Github](https://llvm.org/PR148140))
+- P3223R2: Making `std::istream::ignore` less surprising ([Github](https://llvm.org/PR148178))
+- P3060R3: Add `std::views::indices(n)` ([Github](https://llvm.org/PR148175))
+- P2404R3: Move-only types for `equality_comparable_with`, `totally_ordered_with`, and `three_way_comparable_with`
+ ([Github](https://llvm.org/PR105210))
+- P2641R4: Checking if a `union` alternative is active (`std::is_within_lifetime`)
+ ([Github](https://llvm.org/PR105381))
+- P2835R7: Expose `std::atomic_ref`'s object address ([Github](https://llvm.org/PR118377))
+- P2944R3: Comparisons for `reference_wrapper` ([Github](https://llvm.org/PR105424))
+- P3168R2: Give `std::optional` Range Support
+ (guarded by `-fexperimental-library`, [Github](https://llvm.org/PR105430))
+- P3567R2: `flat_meow` Fixes ([Github](https://llvm.org/PR162022))
+- P3836R2: Make `optional<T&>` trivially copyable ([Github](https://llvm.org/PR171275))
+- P1789R3: Library Support for Expansion Statements ([Github](https://llvm.org/PR167184))
+
+### Improvements and New Features
- The performance of associative and unordered containers has been significantly improved. This is an overview of the
different functions and by up to how much they have been improved:
- - ``map::map(const map&)``: 2.3x
- - ``map::operator=(const map&)``: 11x
- - ``unordered_set::unordered_set(const unordered_set&)``: 3.3x
- - ``unordered_set::operator=(const unordered_set&)``: 5x
- - ``erase`` of ``map`` and ``set``: 2x
- - ``find(key)`` of ``map``, ``set``, ``multimap`` and ``multiset``: 2.3x
- - ``(iterator, iterator)`` constructors of ``map``, ``set``, ``multimap`` and ``multiset``: 3x
- - ``insert(iterator, iterator)`` of ``map``, ``set``, ``multimap`` and ``multiset``: 2.5x
- - ``erase(iterator, iterator)`` of the unordered containers: 1.9x
- - ``map::insert_or_assign``: 2x
+ - `map::map(const map&)`: 2.3x
+ - `map::operator=(const map&)`: 11x
+ - `unordered_set::unordered_set(const unordered_set&)`: 3.3x
+ - `unordered_set::operator=(const unordered_set&)`: 5x
+ - `erase` of `map` and `set`: 2x
+ - `find(key)` of `map`, `set`, `multimap` and `multiset`: 2.3x
+ - `(iterator, iterator)` constructors of `map`, `set`, `multimap` and `multiset`: 3x
+ - `insert(iterator, iterator)` of `map`, `set`, `multimap` and `multiset`: 2.5x
+ - `erase(iterator, iterator)` of the unordered containers: 1.9x
+ - `map::insert_or_assign`: 2x
- The performance of many algorithms has been improved. This is an overview of the different functions and by up to how
much they have been improved:
- - ``std::find`` for integral types: 2x
- - ``std::for_each`` and ``ranges::for_each`` over the associative containers: 2x
- - ``std::rotate``: 3x
+ - `std::find` for integral types: 2x
+
+ - `std::for_each` and `ranges::for_each` over the associative containers: 2x
+
+ - `std::rotate`: 3x
+
- Some have been specifically optimized for segmented iterators:
- - ``std::distance`` and ``std::ranges::distance`` on non-random-access iterators: 1600x
- - ``{std,ranges}::{fill, fill_n}``: 10x
- - ``std::{generate, generate_n}`` and ``std::ranges::generate_n``: 1.8x
+ - `std::distance` and `std::ranges::distance` on non-random-access iterators: 1600x
+ - `{std,ranges}::{fill, fill_n}`: 10x
+ - `std::{generate, generate_n}` and `std::ranges::generate_n`: 1.8x
- - ``std::search_n`` for random access iterators now tries to skip elements.
+ - `std::search_n` for random access iterators now tries to skip elements.
In contrived cases improvements of 70,000x have been observed.
- There have also been performance improvements in other library facilities:
- - ``vector<bool>::reserve()``: 2x
- - ``deque::append_range``: 3.4x
- - ``num_get::do_get`` integral overloads: 2.8x
- - Some reallocations are now avoided in ``std::filesystem::path::lexically_relative``: 1.7x
- - ``ofstream::write`` passes large strings to system calls directly instead of copying them in chunks into a buffer
- - ``std::align`` is now an inline function, which allows the compiler to better optimize calls to it
+ - `vector<bool>::reserve()`: 2x
+ - `deque::append_range`: 3.4x
+ - `num_get::do_get` integral overloads: 2.8x
+ - Some reallocations are now avoided in `std::filesystem::path::lexically_relative`: 1.7x
+ - `ofstream::write` passes large strings to system calls directly instead of copying them in chunks into a buffer
+ - `std::align` is now an inline function, which allows the compiler to better optimize calls to it
-- ``std::atomic::wait`` has been refactored to accept more types to use platform native wait functions directly.
- This is guarded behind the ABI Macro ``_LIBCPP_ABI_ATOMIC_WAIT_NATIVE_BY_SIZE``.
+- `std::atomic::wait` has been refactored to accept more types to use platform native wait functions directly.
+ This is guarded behind the ABI Macro `_LIBCPP_ABI_ATOMIC_WAIT_NATIVE_BY_SIZE`.
-- Multiple internal types have been refactored to use ``[[no_unique_address]]``, resulting in faster compile times and
+- Multiple internal types have been refactored to use `[[no_unique_address]]`, resulting in faster compile times and
reduced debug information.
-Deprecations and Removals
--------------------------
+### Deprecations and Removals
- The minimally supported deployment target on macOS has been increased to 11.0.
-Potentially breaking changes
-----------------------------
+### Potentially breaking changes
-- The algorithm for ``multi{map,set}::find`` has been modified such that it doesn't necessarily return an iterator to
+- The algorithm for `multi{map,set}::find` has been modified such that it doesn't necessarily return an iterator to
the first equal element in the container. This was never guaranteed by the Standard, but libc++ previously happened to
always return the first equal element, like other implementations do. Starting with this release, code relying on the
- first element being returned from ``find`` will be broken, and ``lower_bound`` or ``equal_range`` should be used
+ first element being returned from `find` will be broken, and `lower_bound` or `equal_range` should be used
instead.
-
-- The algorithms for ``std::{map,set}`` ``lower_bound`` and ``upper_bound`` operations were modified such that their
+- The algorithms for `std::{map,set}` `lower_bound` and `upper_bound` operations were modified such that their
result changed for comparators that are not a strict weak order. Being a strict weak order was always a requirement
- of the Standard and still is, however in this release libc++ changed the behavior of ``std::{map,set}`` for such
+ of the Standard and still is, however in this release libc++ changed the behavior of `std::{map,set}` for such
comparators. Since this may be tricky to work around in some cases, an escape hatch is provided in this release:
- defining ``_LIBCPP_ENABLE_LEGACY_TREE_LOWER_UPPER_BOUND`` will revert to the historical implementation of
+ defining `_LIBCPP_ENABLE_LEGACY_TREE_LOWER_UPPER_BOUND` will revert to the historical implementation of
these operations. That escape hatch will be removed in LLVM 23.
+- The ABI flag `_LIBCPP_ABI_NO_REVERSE_ITERATOR_SECOND_MEMBER` has been split off from
+ `_LIBCPP_ABI_NO_ITERATOR_BASES`. If you are using this flag and care about ABI stability, you should set
+ `_LIBCPP_ABI_NO_REVERSE_ITERATOR_SECOND_MEMBER` as well.
-- The ABI flag ``_LIBCPP_ABI_NO_REVERSE_ITERATOR_SECOND_MEMBER`` has been split off from
- ``_LIBCPP_ABI_NO_ITERATOR_BASES``. If you are using this flag and care about ABI stability, you should set
- ``_LIBCPP_ABI_NO_REVERSE_ITERATOR_SECOND_MEMBER`` as well.
-
-Announcements About Future Releases
------------------------------------
+### Announcements About Future Releases
-ABI Affecting Changes
----------------------
+### ABI Affecting Changes
-- The ABI flag ``_LIBCPP_ABI_NO_REVERSE_ITERATOR_SECOND_MEMBER`` has been split off from
- ``_LIBCPP_ABI_NO_ITERATOR_BASES``. If you are using this flag and care about ABI stability, you should set
- ``_LIBCPP_ABI_NO_REVERSE_ITERATOR_SECOND_MEMBER`` as well.
-
-- The internal types ``__map_value_compare``, ``__unordered_map_hasher``, ``__unordered_map_equal``,
- ``__hash_map_hasher`` and ``__hash_map_equal`` have been refactored to use ``_LIBCPP_COMPRESSED_ELEMENT`` instead of
+- The ABI flag `_LIBCPP_ABI_NO_REVERSE_ITERATOR_SECOND_MEMBER` has been split off from
+ `_LIBCPP_ABI_NO_ITERATOR_BASES`. If you are using this flag and care about ABI stability, you should set
+ `_LIBCPP_ABI_NO_REVERSE_ITERATOR_SECOND_MEMBER` as well.
+- The internal types `__map_value_compare`, `__unordered_map_hasher`, `__unordered_map_equal`,
+ `__hash_map_hasher` and `__hash_map_equal` have been refactored to use `_LIBCPP_COMPRESSED_ELEMENT` instead of
potentially inheriting from the types they wrap. At this point in time we are not aware of any ABI changes caused by
this.
-
-- ``ranges::iota_view`` is now aware of ``__int128``. This causes ``iota_view::difference_type`` to change from
- ``long long`` to ``__int128`` in some cases.
-
-- ``std::allocator`` is now trivially default constructible. The behaviour can be reverted by defining
- ``_LIBCPP_DEPRECATED_ABI_NON_TRIVIAL_ALLOCATOR``. Please inform the libc++ team if you need this flag, since it will
+- `ranges::iota_view` is now aware of `__int128`. This causes `iota_view::difference_type` to change from
+ `long long` to `__int128` in some cases.
+- `std::allocator` is now trivially default constructible. The behaviour can be reverted by defining
+ `_LIBCPP_DEPRECATED_ABI_NON_TRIVIAL_ALLOCATOR`. Please inform the libc++ team if you need this flag, since it will
be removed in LLVM 24 if there is no evidence that it's required.
-
-- ``bitset::operator[]`` now returns ``bool``, making libc++ conforming. The behaviour can be reverted by defining
- ``_LIBCPP_DEPRECATED_ABI_BITSET_CONST_SUBSCRIPT_RETURN_REF``. Please inform the libc++ team if you need this flag,
+- `bitset::operator[]` now returns `bool`, making libc++ conforming. The behaviour can be reverted by defining
+ `_LIBCPP_DEPRECATED_ABI_BITSET_CONST_SUBSCRIPT_RETURN_REF`. Please inform the libc++ team if you need this flag,
since it will be removed in LLVM 24 if there is no evidence that it's required.
-Build System Changes
---------------------
+### Build System Changes
+
diff --git a/libcxx/docs/ReleaseNotes/23.md b/libcxx/docs/ReleaseNotes/23.md
index f7a8e5b04f1ea..330826181412b 100644
--- a/libcxx/docs/ReleaseNotes/23.md
+++ b/libcxx/docs/ReleaseNotes/23.md
@@ -1,135 +1,117 @@
-===========================================
-Libc++ 23.0.0 (In-Progress) Release Notes
-===========================================
+# Libc++ 23.0.0 (In-Progress) Release Notes
-.. contents::
- :local:
- :depth: 2
+```{contents}
+:depth: 2
+:local: true
+```
-Written by the `Libc++ Team <https://libcxx.llvm.org>`_
+Written by the [Libc++ Team](https://libcxx.llvm.org)
-.. warning::
+:::{warning}
+These are in-progress notes for the upcoming libc++ 23.0.0 release.
+Release notes for previous releases can be found on
+[the Download Page](https://releases.llvm.org/download.html).
+:::
- These are in-progress notes for the upcoming libc++ 23.0.0 release.
- Release notes for previous releases can be found on
- `the Download Page <https://releases.llvm.org/download.html>`_.
-
-Introduction
-============
+## Introduction
This document contains the release notes for the libc++ C++ Standard Library,
part of the LLVM Compiler Infrastructure, release 23.0.0. Here we describe the
status of libc++ in some detail, including major improvements from the previous
-release and new feature work. For the general LLVM release notes, see `the LLVM
-documentation <https://llvm.org/docs/ReleaseNotes.html>`_. All LLVM releases may
-be downloaded from the `LLVM releases web site <https://llvm.org/releases/>`_.
+release and new feature work. For the general LLVM release notes, see [the LLVM
+documentation](https://llvm.org/docs/ReleaseNotes.html). All LLVM releases may
+be downloaded from the [LLVM releases web site](https://llvm.org/releases/).
-For more information about libc++, please see the `Libc++ Web Site
-<https://libcxx.llvm.org>`_ or the `LLVM Web Site <https://llvm.org>`_.
+For more information about libc++, please see the [Libc++ Web Site](https://libcxx.llvm.org) or the [LLVM Web Site](https://llvm.org).
Note that if you are reading this file from a Git checkout or the
main Libc++ web page, this document applies to the *next* release, not
the current one. To see the release notes for a specific release, please
-see the `releases page <https://llvm.org/releases/>`_.
-
-What's New in Libc++ 23.0.0?
-==============================
-
-Implemented Papers
-------------------
-
-- P2440R1: ``ranges::iota``, ``ranges::shift_left`` and ``ranges::shift_right`` (`Github <https://llvm.org/PR105184>`__)
-- P1885R12: Naming Text Encodings to Demystify Them (`Github <https://llvm.org/PR105373>`__)
-- P1899R3: ``stride_view`` (`Github <https://llvm.org/PR105198>`__)
-- P2862R1: ``text_encoding::name()`` should never return null values (`Github <https://llvm.org/PR118371>`__)
-- P3936R1: Safer ``atomic_ref::address`` (`Github <https://llvm.org/PR189594>`__)
-- P3953R3: Rename ``std::runtime_format`` (`Github <https://llvm.org/PR189624>`__)
-- P4052R0: Renaming saturation arithmetic functions (`Github <https://llvm.org/PR189589>`__)
-- P2781R9: ``std::constant_wrapper`` (`Github <https://llvm.org/PR148179>`__)
-- P3978R3: ``constant_wrapper`` should unwrap on call and subscript (`Github <https://llvm.org/PR189605>`__)
-- P2164R9: ``views::enumerate`` (`Github <https://llvm.org/PR105251>`__)
-- P2322R6: ``ranges::fold`` (`Github <https://llvm.org/PR105208>`__)
-- P4144R1: Remove ``span``'s ``initializer_list`` constructor for C++26 (`Github <https://llvm.org/PR189612>`__)
-- P2542R8: ``views::concat`` (`Github <https://llvm.org/PR105419>`__)
-- P3383R3: ``mdspan.at()`` (`Github <https://llvm.org/PR175213>`__)
-- P3369R0: constexpr for ``uninitialized_default_construct`` (`Github <https://llvm.org/PR118380>`__)
-- P3508R0: Wording for "constexpr for specialized memory algorithms" (`Github <https://llvm.org/PR118379>`__)
-- P4206R0: Revert string support in ``std::constant_wrapper`` (`Github <https://llvm.org/PR203338>`__)
-
-Improvements and New Features
------------------------------
-
-- The ``std::ranges::fold_left_with_iter`` algorithm has been optimized for
+see the [releases page](https://llvm.org/releases/).
+
+## What's New in Libc++ 23.0.0?
+
+### Implemented Papers
+
+- P2440R1: `ranges::iota`, `ranges::shift_left` and `ranges::shift_right` ([Github](https://llvm.org/PR105184))
+- P1885R12: Naming Text Encodings to Demystify Them ([Github](https://llvm.org/PR105373))
+- P1899R3: `stride_view` ([Github](https://llvm.org/PR105198))
+- P2862R1: `text_encoding::name()` should never return null values ([Github](https://llvm.org/PR118371))
+- P3936R1: Safer `atomic_ref::address` ([Github](https://llvm.org/PR189594))
+- P3953R3: Rename `std::runtime_format` ([Github](https://llvm.org/PR189624))
+- P4052R0: Renaming saturation arithmetic functions ([Github](https://llvm.org/PR189589))
+- P2781R9: `std::constant_wrapper` ([Github](https://llvm.org/PR148179))
+- P3978R3: `constant_wrapper` should unwrap on call and subscript ([Github](https://llvm.org/PR189605))
+- P2164R9: `views::enumerate` ([Github](https://llvm.org/PR105251))
+- P2322R6: `ranges::fold` ([Github](https://llvm.org/PR105208))
+- P4144R1: Remove `span`'s `initializer_list` constructor for C++26 ([Github](https://llvm.org/PR189612))
+- P2542R8: `views::concat` ([Github](https://llvm.org/PR105419))
+- P3383R3: `mdspan.at()` ([Github](https://llvm.org/PR175213))
+- P3369R0: constexpr for `uninitialized_default_construct` ([Github](https://llvm.org/PR118380))
+- P3508R0: Wording for "constexpr for specialized memory algorithms" ([Github](https://llvm.org/PR118379))
+- P4206R0: Revert string support in `std::constant_wrapper` ([Github](https://llvm.org/PR203338))
+
+### Improvements and New Features
+
+- The `std::ranges::fold_left_with_iter` algorithm has been optimized for
segmented iterators, resulting in a performance improvement of up to 1.38x
- for ``std::deque<int>`` iterators.
-- ``std::copy(CharT*, CharT*, ostreambuf_iterator<CharT>)`` has been optimized, resulting in performance improvements
+ for `std::deque<int>` iterators.
+- `std::copy(CharT*, CharT*, ostreambuf_iterator<CharT>)` has been optimized, resulting in performance improvements
of up to 25x.
- A lot of transitive includes have been removed, resulting in significant compile time improvements.
-- ``std::bad_variant_access::what()`` now returns a message identifying the cause of the failure:
- ``"std::visit: variant is valueless"``, ``"std::get: variant is valueless"``, or
- ``"std::get: wrong alternative for variant"``. The standard only requires ``what()`` to return an
+- `std::bad_variant_access::what()` now returns a message identifying the cause of the failure:
+ `"std::visit: variant is valueless"`, `"std::get: variant is valueless"`, or
+ `"std::get: wrong alternative for variant"`. The standard only requires `what()` to return an
unspecified non-null string, so user code that does not match on the exact message remains correct.
-- ``ifstream::read`` has been optimized to pass through large reads to system calls directly instead of copying them in
+- `ifstream::read` has been optimized to pass through large reads to system calls directly instead of copying them in
chunks.
-- ``std::scoped_lock`` now carries Clang thread safety annotations when locking multiple mutexes, so
- ``-Wthread-safety`` no longer incorrectly reports the guarded data accessed inside the block as
+- `std::scoped_lock` now carries Clang thread safety annotations when locking multiple mutexes, so
+ `-Wthread-safety` no longer incorrectly reports the guarded data accessed inside the block as
unprotected. This requires Clang 21 or later.
-Deprecations and Removals
--------------------------
+### Deprecations and Removals
-- The ``std::launch::any`` enumerator that was accidentally provided as an extension is now deprecated.
+- The `std::launch::any` enumerator that was accidentally provided as an extension is now deprecated.
It will be removed in LLVM 25.
-
-- In ``__wrap_iter`` (iterator wrapper type for ``array``, ``span``, ``string``, ``string_view`` and ``vector``),
- the ``base()`` method and ``iterator_type`` member type have been removed as they are non-standard.
-
-- In ``__bit_reference`` (the proxy ``reference`` type of ``bitset`` and ``vector<bool>``), the overloaded ``operator&``
+- In `__wrap_iter` (iterator wrapper type for `array`, `span`, `string`, `string_view` and `vector`),
+ the `base()` method and `iterator_type` member type have been removed as they are non-standard.
+- In `__bit_reference` (the proxy `reference` type of `bitset` and `vector<bool>`), the overloaded `operator&`
is removed as it is non-standard and causes non-conforming behavior.
-Potentially breaking changes
-----------------------------
+### Potentially breaking changes
- libc++ has dropped a lot of transitive includes in all language modes. This improves compile time significantly, but
causes programs which rely on these includes to not compile anymore. Any errors caused by this should be fixable by
- including the correct header. To ease the transition ``_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23`` can be defined, which
+ including the correct header. To ease the transition `_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23` can be defined, which
includes the removed headers again. This macro will be removed in LLVM 24.
-
-- The output of ``ostream << std::thread::id`` and ``std::format("...", std::thread:id)`` changes on some platforms from
+- The output of `ostream << std::thread::id` and `std::format("...", std::thread:id)` changes on some platforms from
hexadecimal to decimal. This is done to have consistent formatting across all platforms libc++ supports.
-
-- ``std::exception_ptr`` on Windows no longer relies on STL and is now implemented entirely within libc++.
+- `std::exception_ptr` on Windows no longer relies on STL and is now implemented entirely within libc++.
The implementation was donated by Microsoft and has been refactored to follow libc++ standards and conventions.
-Announcements About Future Releases
------------------------------------
+### Announcements About Future Releases
-ABI Affecting Changes
----------------------
+### ABI Affecting Changes
-- ``std::allocator`` is trivially default constructible since LLVM 22. The behaviour can be reverted by defining
- ``_LIBCPP_DEPRECATED_ABI_NON_TRIVIAL_ALLOCATOR``. Please inform the libc++ team if you need this flag, since it will
+- `std::allocator` is trivially default constructible since LLVM 22. The behaviour can be reverted by defining
+ `_LIBCPP_DEPRECATED_ABI_NON_TRIVIAL_ALLOCATOR`. Please inform the libc++ team if you need this flag, since it will
be removed in LLVM 24 if there is no evidence that it's required.
-
-- ``bitset::operator[]`` returns ``bool`` since LLVM 22, making libc++ conforming. The behaviour can be reverted by
- defining ``_LIBCPP_DEPRECATED_ABI_BITSET_CONST_SUBSCRIPT_RETURN_REF``. Please inform the libc++ team if you need this
+- `bitset::operator[]` returns `bool` since LLVM 22, making libc++ conforming. The behaviour can be reverted by
+ defining `_LIBCPP_DEPRECATED_ABI_BITSET_CONST_SUBSCRIPT_RETURN_REF`. Please inform the libc++ team if you need this
flag, since it will be removed in LLVM 24 if there is no evidence that it's required.
-
-- ``vector::iterator`` and ``string::iterator`` no longer use ``__bounded_iter<__wrap_iter<Iter>>``, but instead
- ``__bounded_iter<Iter>`` directly if ``_LIBCPP_ABI_BOUNDED_ITERATORS_IN_VECTOR`` and
- ``_LIBCPP_ABI_BOUNDED_ITERATORS_IN_STRING`` are defined.
-
-- The ``const_iterator`` member type of ``std::deque`` is now corrected to hold a (possibly fancy) pointer to the
+- `vector::iterator` and `string::iterator` no longer use `__bounded_iter<__wrap_iter<Iter>>`, but instead
+ `__bounded_iter<Iter>` directly if `_LIBCPP_ABI_BOUNDED_ITERATORS_IN_VECTOR` and
+ `_LIBCPP_ABI_BOUNDED_ITERATORS_IN_STRING` are defined.
+- The `const_iterator` member type of `std::deque` is now corrected to hold a (possibly fancy) pointer to the
(possibly fancy) pointer allocated in the internal map. E.g. when the allocators use fancy pointers, the internal map
- stores ``FancyPtr<T>`` objects, and the previous strategy accessed these objects via ``const FancyPtr<const T>``
- lvalues, causing undefined behavior. Now ``const_iterator`` stores ``FancyPtr<const FancyPtr<T>>`` instead of
- ``FancyPtr<const FancyPtr<const T>>``, which is technically an ABI break when these two types have incompatible
- layouts. The ``iterator`` member type is also changed to store ``FancyPtr<const FancyPtr<T>>`` because the internal
- map is never modified via an ``iterator``. This is necessary for reducing undefined behavior and for adding
- ``constexpr`` support for ``deque`` in C++26, so we do not provide any way to opt-out of that behavior.
-
-- ``std::exception_ptr`` now uses the same layout in MSVC mode as on other platforms, changing the size from two to one
+ stores `FancyPtr<T>` objects, and the previous strategy accessed these objects via `const FancyPtr<const T>`
+ lvalues, causing undefined behavior. Now `const_iterator` stores `FancyPtr<const FancyPtr<T>>` instead of
+ `FancyPtr<const FancyPtr<const T>>`, which is technically an ABI break when these two types have incompatible
+ layouts. The `iterator` member type is also changed to store `FancyPtr<const FancyPtr<T>>` because the internal
+ map is never modified via an `iterator`. This is necessary for reducing undefined behavior and for adding
+ `constexpr` support for `deque` in C++26, so we do not provide any way to opt-out of that behavior.
+- `std::exception_ptr` now uses the same layout in MSVC mode as on other platforms, changing the size from two to one
pointer.
-Build System Changes
---------------------
+### Build System Changes
+
diff --git a/libcxx/docs/ReleaseNotes/24.md b/libcxx/docs/ReleaseNotes/24.md
index a7b9e8731d555..a167363ce738e 100644
--- a/libcxx/docs/ReleaseNotes/24.md
+++ b/libcxx/docs/ReleaseNotes/24.md
@@ -1,98 +1,85 @@
-===========================
-Libc++ 24.0.0 Release Notes
-===========================
+# Libc++ 24.0.0 Release Notes
-.. contents::
- :local:
- :depth: 2
+```{contents}
+:depth: 2
+:local: true
+```
-Written by the `Libc++ Team <https://libcxx.llvm.org>`_
+Written by the [Libc++ Team](https://libcxx.llvm.org)
-.. warning::
+:::{warning}
+These are in-progress notes for the upcoming libc++ 24.0.0 release.
+Release notes for previous releases can be found on
+[the Download Page](https://releases.llvm.org/download.html).
+:::
- These are in-progress notes for the upcoming libc++ 24.0.0 release.
- Release notes for previous releases can be found on
- `the Download Page <https://releases.llvm.org/download.html>`_.
-
-Introduction
-============
+## Introduction
This document contains the release notes for the libc++ C++ Standard Library,
part of the LLVM Compiler Infrastructure, release 24.0.0. Here we describe the
status of libc++ in some detail, including major improvements from the previous
-release and new feature work. For the general LLVM release notes, see `the LLVM
-documentation <https://llvm.org/docs/ReleaseNotes.html>`_. All LLVM releases may
-be downloaded from the `LLVM releases web site <https://llvm.org/releases/>`_.
+release and new feature work. For the general LLVM release notes, see [the LLVM
+documentation](https://llvm.org/docs/ReleaseNotes.html). All LLVM releases may
+be downloaded from the [LLVM releases web site](https://llvm.org/releases/).
-For more information about libc++, please see the `Libc++ Web Site
-<https://libcxx.llvm.org>`_ or the `LLVM Web Site <https://llvm.org>`_.
+For more information about libc++, please see the [Libc++ Web Site](https://libcxx.llvm.org) or the [LLVM Web Site](https://llvm.org).
Note that if you are reading this file from a Git checkout or the
main Libc++ web page, this document applies to the *next* release, not
the current one. To see the release notes for a specific release, please
-see the `releases page <https://llvm.org/releases/>`_.
-
-What's New in Libc++ 24.0.0?
-==============================
-
-Implemented Papers
-------------------
-
-- P3052R2: ``view_interface::at()`` (`Github <https://llvm.org/PR204395>`__)
-- P0493R5: Atomic minimum/maximum (`Github <https://llvm.org/PR105418>`__)
-- P3059R2: Making user-defined constructors of view iterators/sentinels private (`Github <https://github.com/llvm/llvm-project/issues/189599>`__)
-- P0792R14: ``function_ref`` : a type-erased callable reference (`Github <https://llvm.org/PR105376>`__)
-- P3016R6: Resolve inconsistencies in begin/end for ``valarray`` and braced initializer lists
- (`Github <https://llvm.org/PR171271>`__)
-- P3948R1: ``constant_wrapper`` is the only tool needed for passing constant expressions via function arguments (`Github <https://llvm.org/PR189604>`__)
-- P3961R1: Less double indirection in ``function_ref`` (RU-220) (`Github <https://llvm.org/PR189606>`__)
-- P1901R2: Enabling the Use of ``weak_ptr`` as Keys in Unordered Associative Containers (`Github <https://llvm.org/PR105372>`__)
-- P0528R3: The Curious Case of Padding Bits, Featuring Atomic Compare-and-Exchange (`Github <https://llvm.org/PR76180>`__)
-- P3798R1: The unexpected in ``std::expected`` (`Github <https://llvm.org/PR204394>`__)
-- P2830R10: Standardized Constexpr Type Ordering (`Github <https://llvm.org/PR216616>`__)
-- P3778R0: Fix for ``type_order`` template definition (`Github <https://llvm.org/PR216616>`__)
-- P4140R0: Proposed resolution for US70-126: allow incomplete types in type_order (`Github <https://llvm.org/PR216616>`__)
-
-Improvements and New Features
------------------------------
-
-- ``basic_filebuf`` now supports files larger than 2GB on 32-bit AIX and 32-bit glibc targets.
-
-Deprecations and Removals
--------------------------
-
-- The ``std::launch::any`` enumerator that was accidentally provided as an extension is now deprecated.
+see the [releases page](https://llvm.org/releases/).
+
+## What's New in Libc++ 24.0.0?
+
+### Implemented Papers
+
+- P3052R2: `view_interface::at()` ([Github](https://llvm.org/PR204395))
+- P0493R5: Atomic minimum/maximum ([Github](https://llvm.org/PR105418))
+- P3059R2: Making user-defined constructors of view iterators/sentinels private ([Github](https://github.com/llvm/llvm-project/issues/189599))
+- P0792R14: `function_ref` : a type-erased callable reference ([Github](https://llvm.org/PR105376))
+- P3016R6: Resolve inconsistencies in begin/end for `valarray` and braced initializer lists
+ ([Github](https://llvm.org/PR171271))
+- P3948R1: `constant_wrapper` is the only tool needed for passing constant expressions via function arguments ([Github](https://llvm.org/PR189604))
+- P3961R1: Less double indirection in `function_ref` (RU-220) ([Github](https://llvm.org/PR189606))
+- P1901R2: Enabling the Use of `weak_ptr` as Keys in Unordered Associative Containers ([Github](https://llvm.org/PR105372))
+- P0528R3: The Curious Case of Padding Bits, Featuring Atomic Compare-and-Exchange ([Github](https://llvm.org/PR76180))
+- P3798R1: The unexpected in `std::expected` ([Github](https://llvm.org/PR204394))
+- P2830R10: Standardized Constexpr Type Ordering ([Github](https://llvm.org/PR216616))
+- P3778R0: Fix for `type_order` template definition ([Github](https://llvm.org/PR216616))
+- P4140R0: Proposed resolution for US70-126: allow incomplete types in type_order ([Github](https://llvm.org/PR216616))
+
+### Improvements and New Features
+
+- `basic_filebuf` now supports files larger than 2GB on 32-bit AIX and 32-bit glibc targets.
+
+### Deprecations and Removals
+
+- The `std::launch::any` enumerator that was accidentally provided as an extension is now deprecated.
It will be removed in LLVM 25.
-Potentially breaking changes
-----------------------------
+### Potentially breaking changes
- In LLVM 23, libc++ dropped a lot of transitive includes in all language modes. This improves compile time significantly,
- but causes programs which rely on these includes to not compile anymore. The ``_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23``
+ but causes programs which rely on these includes to not compile anymore. The `_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23`
macro that was provided in LLVM 23 to ease the transition has been removed in this release.
-
-- Unused objects of containers are now diagnosed. To ease the transition ``_LIBCPP_DISABLE_UNUSED_STRUCT_WARNINGS`` can
+- Unused objects of containers are now diagnosed. To ease the transition `_LIBCPP_DISABLE_UNUSED_STRUCT_WARNINGS` can
be defined as an escape hatch. This escape hatch will be removed in LLVM 24.
-
- libc++ no longer depends on msvcprt/libcpmt in the MSVC mode.
-Announcements About Future Releases
------------------------------------
+### Announcements About Future Releases
-- ``std::allocator`` is trivially default constructible since LLVM 22. In LLVM 23 and LLVM 24, the
- ``_LIBCPP_DEPRECATED_ABI_NON_TRIVIAL_ALLOCATOR`` macro was provided as an escape hatch to revert that change.
+- `std::allocator` is trivially default constructible since LLVM 22. In LLVM 23 and LLVM 24, the
+ `_LIBCPP_DEPRECATED_ABI_NON_TRIVIAL_ALLOCATOR` macro was provided as an escape hatch to revert that change.
This escape hatch will be removed in LLVM 25 if there is no evidence of it being useful.
-
-- ``bitset::operator[]`` returns ``bool`` since LLVM 22, fixing a conformance bug. In LLVM 23 and LLVM 24, the
- ``_LIBCPP_DEPRECATED_ABI_BITSET_CONST_SUBSCRIPT_RETURN_REF`` macro was provided as an escape hatch to revert
+- `bitset::operator[]` returns `bool` since LLVM 22, fixing a conformance bug. In LLVM 23 and LLVM 24, the
+ `_LIBCPP_DEPRECATED_ABI_BITSET_CONST_SUBSCRIPT_RETURN_REF` macro was provided as an escape hatch to revert
that change. This escape hatch will be removed in LLVM 25 if there is no evidence of it being useful.
-ABI Affecting Changes
----------------------
+### ABI Affecting Changes
+
+- `std::set_new_handler` and `std::get_new_handler` are now implemented by libc++ on Windows using `VCRuntime`
+ directly instead of implicitly relying on `msvcprt` to implement them, therefore the global state of the handler
+ is no longer shared with `msvcprt` since libc++ now maintains its own internal state of the handler.
-- ``std::set_new_handler`` and ``std::get_new_handler`` are now implemented by libc++ on Windows using ``VCRuntime``
- directly instead of implicitly relying on ``msvcprt`` to implement them, therefore the global state of the handler
- is no longer shared with ``msvcprt`` since libc++ now maintains its own internal state of the handler.
+### Build System Changes
-Build System Changes
---------------------
diff --git a/libcxx/docs/Status/Cxx17.md b/libcxx/docs/Status/Cxx17.md
index 337c422212f6b..a4e91d807ca86 100644
--- a/libcxx/docs/Status/Cxx17.md
+++ b/libcxx/docs/Status/Cxx17.md
@@ -1,43 +1,47 @@
-.. _cxx17-status:
+(cxx17-status)=
-================================
-libc++ C++17 Status
-================================
+# libc++ C++17 Status
+```{eval-rst}
.. include:: ../Helpers/Styles.md
+```
-.. contents::
- :local:
+```{contents}
+:local: true
+```
-
-Overview
-================================
+## Overview
In November 2014, the C++ standard committee created a draft for the next version of the C++ standard, initially known as "C++1z".
In February 2017, the C++ standard committee approved this draft, and sent it to ISO for approval as C++17.
-This page shows the status of libc++; the status of clang's support of the language features is `here <https://clang.llvm.org/cxx_status.html#cxx17>`__.
+This page shows the status of libc++; the status of clang's support of the language features is [here](https://clang.llvm.org/cxx_status.html#cxx17).
The groups that have contributed papers:
-- CWG - Core Language Working group
-- LWG - Library working group
-- SG1 - Study group #1 (Concurrency working group)
+- CWG - Core Language Working group
+- LWG - Library working group
+- SG1 - Study group #1 (Concurrency working group)
-.. note:: "Nothing to do" means that no library changes were needed to implement this change.
+:::{note}
+"Nothing to do" means that no library changes were needed to implement this change.
+:::
-Paper Status
-====================================
+## Paper Status
+```{eval-rst}
.. csv-table::
:file: Cxx17Papers.csv
:header-rows: 1
:widths: auto
+```
-Library Working Group Issues Status
-====================================
+## Library Working Group Issues Status
+```{eval-rst}
.. csv-table::
:file: Cxx17Issues.csv
:header-rows: 1
:widths: auto
+```
+
diff --git a/libcxx/docs/Status/Cxx20.md b/libcxx/docs/Status/Cxx20.md
index 3fa951a233647..ddf2e81352a68 100644
--- a/libcxx/docs/Status/Cxx20.md
+++ b/libcxx/docs/Status/Cxx20.md
@@ -1,43 +1,47 @@
-.. _cxx20-status:
+(cxx20-status)=
-================================
-libc++ C++20 Status
-================================
+# libc++ C++20 Status
+```{eval-rst}
.. include:: ../Helpers/Styles.md
+```
-.. contents::
- :local:
+```{contents}
+:local: true
+```
-
-Overview
-================================
+## Overview
In July 2017, the C++ standard committee created a draft for the next version of the C++ standard, initially known as "C++2a".
In September 2020, the C++ standard committee approved this draft, and sent it to ISO for approval as C++20.
-This page shows the status of libc++; the status of clang's support of the language features is `here <https://clang.llvm.org/cxx_status.html#cxx20>`__.
+This page shows the status of libc++; the status of clang's support of the language features is [here](https://clang.llvm.org/cxx_status.html#cxx20).
The groups that have contributed papers:
-- CWG - Core Language Working group
-- LWG - Library working group
-- SG1 - Study group #1 (Concurrency working group)
+- CWG - Core Language Working group
+- LWG - Library working group
+- SG1 - Study group #1 (Concurrency working group)
-.. note:: "Nothing to do" means that no library changes were needed to implement this change.
+:::{note}
+"Nothing to do" means that no library changes were needed to implement this change.
+:::
-Paper Status
-====================================
+## Paper Status
+```{eval-rst}
.. csv-table::
:file: Cxx20Papers.csv
:header-rows: 1
:widths: auto
+```
-Library Working Group Issues Status
-====================================
+## Library Working Group Issues Status
+```{eval-rst}
.. csv-table::
:file: Cxx20Issues.csv
:header-rows: 1
:widths: auto
+```
+
diff --git a/libcxx/docs/Status/Cxx23.md b/libcxx/docs/Status/Cxx23.md
index faf6a56902ff2..9a9088fe02921 100644
--- a/libcxx/docs/Status/Cxx23.md
+++ b/libcxx/docs/Status/Cxx23.md
@@ -1,43 +1,47 @@
-.. _cxx23-status:
+(cxx23-status)=
-================================
-libc++ C++23 Status
-================================
+# libc++ C++23 Status
+```{eval-rst}
.. include:: ../Helpers/Styles.md
+```
-.. contents::
- :local:
+```{contents}
+:local: true
+```
-
-Overview
-================================
+## Overview
In November 2020, the C++ standard committee adopted the first changes to the next version of the C++ standard, known here as "C++2b" (probably to be C++23).
In February 2023, the C++ standard committee approved this draft, and sent it to ISO for approval as C++23.
-This page shows the status of libc++; the status of clang's support of the language features is `here <https://clang.llvm.org/cxx_status.html#cxx23>`__.
+This page shows the status of libc++; the status of clang's support of the language features is [here](https://clang.llvm.org/cxx_status.html#cxx23).
The groups that have contributed papers:
-- CWG - Core Language Working group
-- LWG - Library working group
-- SG1 - Study group #1 (Concurrency working group)
+- CWG - Core Language Working group
+- LWG - Library working group
+- SG1 - Study group #1 (Concurrency working group)
-.. note:: "Nothing to do" means that no library changes were needed to implement this change.
+:::{note}
+"Nothing to do" means that no library changes were needed to implement this change.
+:::
-Paper Status
-====================================
+## Paper Status
+```{eval-rst}
.. csv-table::
:file: Cxx23Papers.csv
:header-rows: 1
:widths: auto
+```
-Library Working Group Issues Status
-====================================
+## Library Working Group Issues Status
+```{eval-rst}
.. csv-table::
:file: Cxx23Issues.csv
:header-rows: 1
:widths: auto
+```
+
diff --git a/libcxx/docs/Status/Cxx26.md b/libcxx/docs/Status/Cxx26.md
index 6e37608ee7338..cc49d14884746 100644
--- a/libcxx/docs/Status/Cxx26.md
+++ b/libcxx/docs/Status/Cxx26.md
@@ -1,44 +1,50 @@
-.. _cxx26-status:
+(cxx26-status)=
-================================
-libc++ C++26 Status
-================================
+# libc++ C++26 Status
+```{eval-rst}
.. include:: ../Helpers/Styles.md
+```
-.. contents::
- :local:
+```{contents}
+:local: true
+```
-
-Overview
-================================
+## Overview
In June 2023, the C++ standard committee adopted the first changes to the next version of the C++ standard, known here as "C++26".
-This page shows the status of libc++; the status of clang's support of the language features is `here <https://clang.llvm.org/cxx_status.html#cxx26>`__.
+This page shows the status of libc++; the status of clang's support of the language features is [here](https://clang.llvm.org/cxx_status.html#cxx26).
-.. attention:: Features in unreleased drafts of the standard are subject to change.
+:::{attention}
+Features in unreleased drafts of the standard are subject to change.
+:::
The groups that have contributed papers:
-- CWG - Core Language Working group
-- LWG - Library working group
-- SG1 - Study group #1 (Concurrency working group)
+- CWG - Core Language Working group
+- LWG - Library working group
+- SG1 - Study group #1 (Concurrency working group)
-.. note:: "Nothing to do" means that no library changes were needed to implement this change.
+:::{note}
+"Nothing to do" means that no library changes were needed to implement this change.
+:::
-Paper Status
-====================================
+## Paper Status
+```{eval-rst}
.. csv-table::
:file: Cxx26Papers.csv
:header-rows: 1
:widths: auto
+```
-Library Working Group Issues Status
-====================================
+## Library Working Group Issues Status
+```{eval-rst}
.. csv-table::
:file: Cxx26Issues.csv
:header-rows: 1
:widths: auto
+```
+
diff --git a/libcxx/docs/Status/Cxx29.md b/libcxx/docs/Status/Cxx29.md
index d94a70b36b988..6aeb2157f3eb2 100644
--- a/libcxx/docs/Status/Cxx29.md
+++ b/libcxx/docs/Status/Cxx29.md
@@ -1,44 +1,50 @@
-.. _cxx29-status:
+(cxx29-status)=
-================================
-libc++ C++29 Status
-================================
+# libc++ C++29 Status
+```{eval-rst}
.. include:: ../Helpers/Styles.md
+```
-.. contents::
- :local:
+```{contents}
+:local: true
+```
-
-Overview
-================================
+## Overview
In June 2026, the C++ standard committee adopted the first changes to the next version of the C++ standard, known here as "C++29".
-This page shows the status of libc++; the status of clang's support of the language features is `here <https://clang.llvm.org/cxx_status.html#cxx29>`__.
+This page shows the status of libc++; the status of clang's support of the language features is [here](https://clang.llvm.org/cxx_status.html#cxx29).
-.. attention:: Features in unreleased drafts of the standard are subject to change.
+:::{attention}
+Features in unreleased drafts of the standard are subject to change.
+:::
The groups that have contributed papers:
-- CWG - Core Language Working group
-- LWG - Library working group
-- SG1 - Study group #1 (Concurrency working group)
+- CWG - Core Language Working group
+- LWG - Library working group
+- SG1 - Study group #1 (Concurrency working group)
-.. note:: "Nothing to do" means that no library changes were needed to implement this change.
+:::{note}
+"Nothing to do" means that no library changes were needed to implement this change.
+:::
-Paper Status
-====================================
+## Paper Status
+```{eval-rst}
.. csv-table::
:file: Cxx29Papers.csv
:header-rows: 1
:widths: auto
+```
-Library Working Group Issues Status
-====================================
+## Library Working Group Issues Status
+```{eval-rst}
.. csv-table::
:file: Cxx29Issues.csv
:header-rows: 1
:widths: auto
+```
+
diff --git a/libcxx/docs/TestingLibcxx.md b/libcxx/docs/TestingLibcxx.md
index 8b902518a204b..8267726c1059b 100644
--- a/libcxx/docs/TestingLibcxx.md
+++ b/libcxx/docs/TestingLibcxx.md
@@ -1,88 +1,83 @@
-.. _testing:
+(testing)=
-==============
-Testing libc++
-==============
+# Testing libc++
-.. contents::
- :local:
+```{contents}
+:local: true
+```
-Getting Started
-===============
+## Getting Started
libc++ uses LIT to configure and run its tests.
-The primary way to run the libc++ tests is by using ``make check-cxx``.
+The primary way to run the libc++ tests is by using `make check-cxx`.
However since libc++ can be used in any number of possible
configurations it is important to customize the way LIT builds and runs
the tests. This guide provides information on how to use LIT directly to
test libc++.
-Please see the `Lit Command Guide`_ for more information about LIT.
+Please see the [Lit Command Guide][lit command guide] for more information about LIT.
-.. _LIT Command Guide: https://llvm.org/docs/CommandGuide/lit.html
-
-Dependencies
-------------
+### Dependencies
The libc++ test suite has a few optional dependencies. These can be installed
-with ``pip install -r libcxx/test/requirements.txt``. Installing these dependencies
+with `pip install -r libcxx/test/requirements.txt`. Installing these dependencies
will ensure that the maximum number of tests can be run.
-Usage
------
+### Usage
-After :ref:`building libc++ <VendorDocumentation>`, you can run parts of the libc++ test suite by simply
-running ``llvm-lit`` on a specified test or directory. If you're unsure
+After {ref}`building libc++ <VendorDocumentation>`, you can run parts of the libc++ test suite by simply
+running `llvm-lit` on a specified test or directory. If you're unsure
whether the required libraries have been built, you can use the
-``cxx-test-depends`` target. For example:
-
-.. code-block:: bash
+`cxx-test-depends` target. For example:
- $ cd <monorepo-root>
- $ make -C <build> cxx-test-depends # If you want to make sure the targets get rebuilt
- $ <build>/bin/llvm-lit -sv libcxx/test/std/re # Run all of the std::regex tests
- $ <build>/bin/llvm-lit -sv libcxx/test/std/depr/depr.c.headers/stdlib_h.pass.cpp # Run a single test
- $ <build>/bin/llvm-lit -sv libcxx/test/std/atomics libcxx/test/std/threads # Test std::thread and std::atomic
+```bash
+$ cd <monorepo-root>
+$ make -C <build> cxx-test-depends # If you want to make sure the targets get rebuilt
+$ <build>/bin/llvm-lit -sv libcxx/test/std/re # Run all of the std::regex tests
+$ <build>/bin/llvm-lit -sv libcxx/test/std/depr/depr.c.headers/stdlib_h.pass.cpp # Run a single test
+$ <build>/bin/llvm-lit -sv libcxx/test/std/atomics libcxx/test/std/threads # Test std::thread and std::atomic
+```
-If you used **ninja** as your build system, running ``ninja -C <build> check-cxx`` will run
+If you used **ninja** as your build system, running `ninja -C <build> check-cxx` will run
all the tests in the libc++ testsuite.
-.. note::
- If you used the Bootstrapping build instead of the default runtimes build, the
- ``cxx-test-depends`` target is instead named ``runtimes-test-depends``, and
- you will need to prefix ``<build>/runtimes/runtimes-<target>-bins/`` to the
- paths of all tests. For example, to run all the libcxx tests you can do
- ``<build>/bin/llvm-lit -sv <build>/runtimes/runtimes-bins/libcxx/test``.
+:::{note}
+If you used the Bootstrapping build instead of the default runtimes build, the
+`cxx-test-depends` target is instead named `runtimes-test-depends`, and
+you will need to prefix `<build>/runtimes/runtimes-<target>-bins/` to the
+paths of all tests. For example, to run all the libcxx tests you can do
+`<build>/bin/llvm-lit -sv <build>/runtimes/runtimes-bins/libcxx/test`.
+:::
In the default configuration, the tests are built against headers that form a
fake installation root of libc++. This installation root has to be updated when
-changes are made to the headers, so you should re-run the ``cxx-test-depends``
-target before running the tests manually with ``lit`` when you make any sort of
-change, including to the headers. We recommend using the provided ``libcxx/utils/libcxx-lit``
+changes are made to the headers, so you should re-run the `cxx-test-depends`
+target before running the tests manually with `lit` when you make any sort of
+change, including to the headers. We recommend using the provided `libcxx/utils/libcxx-lit`
script to automate this so you don't have to think about building test dependencies
every time:
-.. code-block:: bash
-
- $ cd <monorepo-root>
- $ libcxx/utils/libcxx-lit <build> -sv libcxx/test/std/re # Build testing dependencies and run all of the std::regex tests
+```bash
+$ cd <monorepo-root>
+$ libcxx/utils/libcxx-lit <build> -sv libcxx/test/std/re # Build testing dependencies and run all of the std::regex tests
+```
Sometimes you'll want to change the way LIT is running the tests. Custom options
-can be specified using the ``--param <name>=<val>`` flag. The most common option
-you'll want to change is the standard dialect (ie ``-std=c++XX``). By default the
+can be specified using the `--param <name>=<val>` flag. The most common option
+you'll want to change is the standard dialect (ie `-std=c++XX`). By default the
test suite will select the newest C++ dialect supported by the compiler and use
that. However, you can manually specify the option like so if you want:
-.. code-block:: bash
+```bash
+$ libcxx/utils/libcxx-lit <build> -sv libcxx/test/std/containers # Run the tests with the newest -std
+$ libcxx/utils/libcxx-lit <build> -sv libcxx/test/std/containers --param std=c++03 # Run the tests in C++03
+```
- $ libcxx/utils/libcxx-lit <build> -sv libcxx/test/std/containers # Run the tests with the newest -std
- $ libcxx/utils/libcxx-lit <build> -sv libcxx/test/std/containers --param std=c++03 # Run the tests in C++03
-
-Other parameters are supported by the test suite. Those are defined in ``libcxx/utils/libcxx/test/params.py``.
+Other parameters are supported by the test suite. Those are defined in `libcxx/utils/libcxx/test/params.py`.
If you want to customize how to run the libc++ test suite beyond what is available
-in ``params.py``, you most likely want to use a custom site configuration instead.
+in `params.py`, you most likely want to use a custom site configuration instead.
The libc++ test suite works by loading a site configuration that defines various
"base" parameters (via Lit substitutions). These base parameters represent things
@@ -91,34 +86,33 @@ flags to use, and how to run an executable. This system is meant to be easily
extended for custom needs, in particular when porting the libc++ test suite to
new platforms.
-.. note::
- If you run the test suite on Apple platforms, we recommend adding the terminal application
- used to run the test suite to the list of "Developer Tools". This prevents the system from
- trying to scan each individual test binary for malware and dramatically speeds up the test
- suite.
+:::{note}
+If you run the test suite on Apple platforms, we recommend adding the terminal application
+used to run the test suite to the list of "Developer Tools". This prevents the system from
+trying to scan each individual test binary for malware and dramatically speeds up the test
+suite.
+:::
-Using a Custom Site Configuration
----------------------------------
+### Using a Custom Site Configuration
By default, the libc++ test suite will use a site configuration that matches
-the current CMake configuration. It does so by generating a ``lit.site.cfg``
+the current CMake configuration. It does so by generating a `lit.site.cfg`
file in the build directory from one of the configuration file templates in
-``libcxx/test/configs/``, and pointing ``llvm-lit`` (which is a wrapper around
-``llvm/utils/lit/lit.py``) to that file. So when you're running
-``<build>/bin/llvm-lit`` either directly or indirectly, the generated ``lit.site.cfg``
-file is always loaded instead of ``libcxx/test/lit.cfg.py``. If you want to use a
+`libcxx/test/configs/`, and pointing `llvm-lit` (which is a wrapper around
+`llvm/utils/lit/lit.py`) to that file. So when you're running
+`<build>/bin/llvm-lit` either directly or indirectly, the generated `lit.site.cfg`
+file is always loaded instead of `libcxx/test/lit.cfg.py`. If you want to use a
custom site configuration, simply point the CMake build to it using
-``-DLIBCXX_TEST_CONFIG=<path-to-site-config>``, and that site configuration
+`-DLIBCXX_TEST_CONFIG=<path-to-site-config>`, and that site configuration
will be used instead. That file can use CMake variables inside it to make
configuration easier.
- .. code-block:: bash
-
- $ cmake <options> -DLIBCXX_TEST_CONFIG=<path-to-site-config>
- $ libcxx/utils/libcxx-lit <build> -sv libcxx/test # will use your custom config file
+> ```bash
+> $ cmake <options> -DLIBCXX_TEST_CONFIG=<path-to-site-config>
+> $ libcxx/utils/libcxx-lit <build> -sv libcxx/test # will use your custom config file
+> ```
-Additional tools
-----------------
+### Additional tools
The libc++ test suite uses a few optional tools to improve the code quality.
@@ -126,18 +120,17 @@ These tools are:
- clang-tidy (you might need additional dev packages to compile libc++-specific clang-tidy checks)
-Reproducing CI issues locally
------------------------------
+### Reproducing CI issues locally
Libc++ has extensive CI that tests various configurations of the library. The testing for
-all these configurations is located in ``libcxx/utils/ci/run-buildbot``. Most of our
+all these configurations is located in `libcxx/utils/ci/run-buildbot`. Most of our
CI jobs are being run on a Docker image for reproducibility. The definition of this Docker
-image is located in ``libcxx/utils/ci/Dockerfile``. If you are looking to reproduce the
+image is located in `libcxx/utils/ci/Dockerfile`. If you are looking to reproduce the
failure of a specific CI job locally, you should first drop into a Docker container that
-matches our CI images by running ``libcxx/utils/ci/run-buildbot-container``, and then run
-the specific CI job that you're interested in (from within the container) using the ``run-buildbot``
-script above. If you want to control which compiler is used, you can set the ``CC`` and the
-``CXX`` environment variables before calling ``run-buildbot`` to select the right compiler.
+matches our CI images by running `libcxx/utils/ci/run-buildbot-container`, and then run
+the specific CI job that you're interested in (from within the container) using the `run-buildbot`
+script above. If you want to control which compiler is used, you can set the `CC` and the
+`CXX` environment variables before calling `run-buildbot` to select the right compiler.
Take note that some CI jobs are testing the library on specific platforms and are *not* run
in our Docker image. In the general case, it is not possible to reproduce these failures
locally, unless they aren't specific to the platform.
@@ -146,8 +139,7 @@ Also note that the Docker container shares the same filesystem as your local mac
modifying files on your local machine will also modify what the Docker container sees.
This is useful for editing source files as you're testing your code in the Docker container.
-Writing Tests
-=============
+## Writing Tests
When writing tests for the libc++ test suite, you should follow a few guidelines.
This will ensure that your tests can run on a wide variety of hardware and under
@@ -159,7 +151,7 @@ few requirements to the test suite. Here's some stuff you should know:
cleaned up after the test is done.
- When a test needs data files as inputs, these data files can be saved in the
repository (when reasonable) and referenced by the test as
- ``// FILE_DEPENDENCIES: <path-to-dependencies>``. Copies of these files or
+ `// FILE_DEPENDENCIES: <path-to-dependencies>`. Copies of these files or
directories will be made available to the test in the temporary directory
where it is run.
- You should never hardcode a path from the build-host in a test, because that
@@ -169,190 +161,173 @@ few requirements to the test suite. Here's some stuff you should know:
necessarily available on all devices we may want to run the tests on (even
though supporting Python is probably trivial for the build-host).
-Structure of the testing related directories
---------------------------------------------
+### Structure of the testing related directories
The tests of libc++ are stored in libc++'s testing related subdirectories:
-- ``libcxx/test/support`` This directory contains several helper headers with
- generic parts for the tests. The most important header is ``test_macros.h``.
+- `libcxx/test/support` This directory contains several helper headers with
+ generic parts for the tests. The most important header is `test_macros.h`.
This file contains configuration information regarding the platform used.
- This is similar to the ``__config`` file in libc++'s ``include`` directory.
+ This is similar to the `__config` file in libc++'s `include` directory.
Since libc++'s tests are used by other Standard libraries, tests should use
- the ``TEST_FOO`` macros instead of the ``_LIBCPP_FOO`` macros, which are
+ the `TEST_FOO` macros instead of the `_LIBCPP_FOO` macros, which are
specific to libc++.
-- ``libcxx/test/std`` This directory contains the tests that validate the library under
+- `libcxx/test/std` This directory contains the tests that validate the library under
test conforms to the C++ Standard. The paths and the names of the test match
the section names in the C++ Standard. Note that the C++ Standard sometimes
reorganises its structure, therefore some tests are at a location based on
where they appeared historically in the standard. We try to strike a balance
between keeping things at up-to-date locations and unnecessary churn.
-- ``libcxx/test/libcxx`` This directory contains the tests that validate libc++
+- `libcxx/test/libcxx` This directory contains the tests that validate libc++
specific behavior and implementation details. For example, libc++ has
"wrapped iterators" that perform bounds checks. Since those are specific to
libc++ and not mandated by the Standard, tests for those are located under
- ``libcxx/test/libcxx``. The structure of this directories follows the
- structure of ``libcxx/test/std``.
+ `libcxx/test/libcxx`. The structure of this directories follows the
+ structure of `libcxx/test/std`.
-Structure of a test
--------------------
+### Structure of a test
Some platforms where libc++ is tested have requirement on the signature of
-``main`` and require ``main`` to explicitly return a value. Therefore the
-typical ``main`` function should look like:
-
-.. code-block:: cpp
-
- int main(int, char**) {
- ...
- return 0;
- }
-
-
-The C++ Standard has ``constexpr`` requirements. The typical way to test that,
-is to create a helper ``test`` function that returns a ``bool`` and use the
-following ``main`` function:
-
-.. code-block:: cpp
-
- constexpr bool test() {
- ...
- return true;
- }
-
- int main(int, char**) {
- test()
- static_assert(test());
-
- return 0;
- }
-
-Tests in libc++ mainly use ``assert`` and ``static_assert`` for testing. There
+`main` and require `main` to explicitly return a value. Therefore the
+typical `main` function should look like:
+
+```cpp
+int main(int, char**) {
+ ...
+ return 0;
+}
+```
+
+The C++ Standard has `constexpr` requirements. The typical way to test that,
+is to create a helper `test` function that returns a `bool` and use the
+following `main` function:
+
+```cpp
+constexpr bool test() {
+ ...
+ return true;
+}
+
+int main(int, char**) {
+ test()
+ static_assert(test());
+
+ return 0;
+}
+```
+
+Tests in libc++ mainly use `assert` and `static_assert` for testing. There
are a few helper macros and function that can be used to make it easier to
write common tests.
-libcxx/test/support/assert_macros.h
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+#### libcxx/test/support/assert_macros.h
The header contains several macros with user specified log messages. This is
useful when a normal assertion failure lacks the information to easily
understand why the test has failed. This usually happens when the test is in a
-helper function. For example the ``std::format`` tests use a helper function
+helper function. For example the `std::format` tests use a helper function
for its validation. When the test fails it will give the line in the helper
-function with the condition ``out == expected`` failed. Without knowing what
-the value of ``format string``, ``out`` and ``expected`` are it is not easy to
+function with the condition `out == expected` failed. Without knowing what
+the value of `format string`, `out` and `expected` are it is not easy to
understand why the test has failed. By logging these three values the point of
failure can be found without resorting to a debugger.
-Several of these macros are documented to take an ``ARG``. This ``ARG``:
+Several of these macros are documented to take an `ARG`. This `ARG`:
- - if it is a ``const char*`` or ``std::string`` its contents are written to
- the ``stderr``,
- - otherwise it must be a callable that is invoked without any additional
- arguments and is expected to produce useful output to e.g. ``stderr``.
+> - if it is a `const char*` or `std::string` its contents are written to
+> the `stderr`,
+> - otherwise it must be a callable that is invoked without any additional
+> arguments and is expected to produce useful output to e.g. `stderr`.
This makes it possible to write additional information when a test fails,
either by supplying a hard-coded string or generate it at runtime.
-TEST_FAIL(ARG)
-^^^^^^^^^^^^^^
+##### TEST_FAIL(ARG)
-This macro is an unconditional failure with a log message ``ARG``. The main
+This macro is an unconditional failure with a log message `ARG`. The main
use-case is to fail when code is reached that should be unreachable.
+##### TEST_REQUIRE(CONDITION, ARG)
-TEST_REQUIRE(CONDITION, ARG)
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-This macro requires its ``CONDITION`` to evaluate to ``true``. If that fails it
-will fail the test with a log message ``ARG``.
+This macro requires its `CONDITION` to evaluate to `true`. If that fails it
+will fail the test with a log message `ARG`.
+##### TEST_LIBCPP_REQUIRE((CONDITION, ARG)
-TEST_LIBCPP_REQUIRE((CONDITION, ARG)
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-If the library under test is libc++ it behaves like ``TEST_REQUIRE``, else it
+If the library under test is libc++ it behaves like `TEST_REQUIRE`, else it
is a no-op. This makes it possible to test libc++ specific behaviour. For
-example testing whether the ``what()`` of an exception thrown matches libc++'s
+example testing whether the `what()` of an exception thrown matches libc++'s
expectations. (Usually the Standard requires certain exceptions to be thrown,
-but not the contents of its ``what()`` message.)
-
-
-TEST_DOES_NOT_THROW(EXPR)
-^^^^^^^^^^^^^^^^^^^^^^^^^
+but not the contents of its `what()` message.)
-Validates execution of ``EXPR`` does not throw an exception.
+##### TEST_DOES_NOT_THROW(EXPR)
-TEST_THROWS_TYPE(TYPE, EXPR)
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+Validates execution of `EXPR` does not throw an exception.
-Validates the execution of ``EXPR`` throws an exception of the type ``TYPE``.
+##### TEST_THROWS_TYPE(TYPE, EXPR)
+Validates the execution of `EXPR` throws an exception of the type `TYPE`.
-TEST_VALIDATE_EXCEPTION(TYPE, PRED, EXPR)
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+##### TEST_VALIDATE_EXCEPTION(TYPE, PRED, EXPR)
-Validates the execution of ``EXPR`` throws an exception of the type ``TYPE``
-which passes validation of ``PRED``. Using this macro makes it easier to write
+Validates the execution of `EXPR` throws an exception of the type `TYPE`
+which passes validation of `PRED`. Using this macro makes it easier to write
tests using exceptions. The code to write a test manually would be:
-
-.. code-block:: cpp
-
- void test_exception([[maybe_unused]] int arg) {
- #ifndef TEST_HAS_NO_EXCEPTIONS // do nothing when tests are disabled
- try {
- foo(arg);
- assert(false); // validates foo really throws
- } catch ([[maybe_unused]] const bar& e) {
- LIBCPP_ASSERT(e.what() == what);
- return;
- }
- assert(false); // validates bar was thrown
- #endif
- }
+```cpp
+void test_exception([[maybe_unused]] int arg) {
+#ifndef TEST_HAS_NO_EXCEPTIONS // do nothing when tests are disabled
+ try {
+ foo(arg);
+ assert(false); // validates foo really throws
+ } catch ([[maybe_unused]] const bar& e) {
+ LIBCPP_ASSERT(e.what() == what);
+ return;
+ }
+ assert(false); // validates bar was thrown
+#endif
+ }
+```
The same test using a macro:
-.. code-block:: cpp
-
- void test_exception([[maybe_unused]] int arg) {
- TEST_VALIDATE_EXCEPTION(bar,
- [](const bar& e) {
- LIBCPP_ASSERT(e.what() == what);
- },
- foo(arg));
- }
-
+```cpp
+void test_exception([[maybe_unused]] int arg) {
+ TEST_VALIDATE_EXCEPTION(bar,
+ [](const bar& e) {
+ LIBCPP_ASSERT(e.what() == what);
+ },
+ foo(arg));
+ }
+```
-libcxx/test/support/concat_macros.h
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+#### libcxx/test/support/concat_macros.h
-This file contains a helper macro ``TEST_WRITE_CONCATENATED`` to lazily
-concatenate its arguments to a ``std::string`` and write it to ``stderr``. When
+This file contains a helper macro `TEST_WRITE_CONCATENATED` to lazily
+concatenate its arguments to a `std::string` and write it to `stderr`. When
the output can't be concatenated a default message will be written to
-``stderr``. This is useful for tests where the arguments use different
-character types like ``char`` and ``wchar_t``, the latter can't simply be
-written to ``stderr``.
+`stderr`. This is useful for tests where the arguments use different
+character types like `char` and `wchar_t`, the latter can't simply be
+written to `stderr`.
-This macro is in a different header as ``assert_macros.h`` since it pulls in
+This macro is in a different header as `assert_macros.h` since it pulls in
additional headers.
- .. note: This macro can only be used in test using C++20 or newer. The macro
- was added at a time where most of libc++'s C++17 support was complete.
- Since it is not expected to add this to existing tests no effort was
- taken to make it work in earlier language versions.
-
+> % note: This macro can only be used in test using C++20 or newer. The macro
+> % was added at a time where most of libc++'s C++17 support was complete.
+> % Since it is not expected to add this to existing tests no effort was
+> % taken to make it work in earlier language versions.
-Test names
-----------
+### Test names
The names of test files have meaning for the libc++-specific configuration of
Lit. Based on the pattern that matches the name of a test file, Lit will test
-the code contained therein in different ways. Refer to the `Lit Meaning of libc++
-Test Filenames`_ when determining the names for new test files.
+the code contained therein in different ways. Refer to the [Lit Meaning of libc++
+Test Filenames][lit meaning of libc++ test filenames] when determining the names for new test files.
+
+(lit-meaning-of-libc-test-filenames)=
-.. _Lit Meaning of libc++ Test Filenames:
+```{eval-rst}
.. list-table:: Lit Meaning of libc++ Test Filenames
:widths: 25 75
:header-rows: 1
@@ -404,17 +379,18 @@ Test Filenames`_ when determining the names for new test files.
- A benchmark test. These tests are linked against the GoogleBenchmark library and generally consist of micro-benchmarks of individual
components of the library.
+```
-libc++-Specific Lit Features
-----------------------------
+### libc++-Specific Lit Features
-Custom Directives
-~~~~~~~~~~~~~~~~~
+#### Custom Directives
-Lit has many directives built in (e.g., ``DEFINE``, ``UNSUPPORTED``). In addition to those directives, libc++ adds two additional libc++-specific directives that makes
-writing tests easier. See `libc++-specific Lit Directives`_ for more information about the ``FILE_DEPENDENCIES``, ``ADDITIONAL_COMPILE_FLAGS``, and ``MODULE_DEPENDENCIES`` libc++-specific directives.
+Lit has many directives built in (e.g., `DEFINE`, `UNSUPPORTED`). In addition to those directives, libc++ adds two additional libc++-specific directives that makes
+writing tests easier. See [libc++-specific Lit Directives] for more information about the `FILE_DEPENDENCIES`, `ADDITIONAL_COMPILE_FLAGS`, and `MODULE_DEPENDENCIES` libc++-specific directives.
-.. _libc++-specific Lit Directives:
+(libc-specific-lit-directives)=
+
+```{eval-rst}
.. list-table:: libc++-specific Lit Directives
:widths: 20 35 45
:header-rows: 1
@@ -442,150 +418,149 @@ writing tests easier. See `libc++-specific Lit Directives`_ for more information
%{compile_flags}. (Libc++ offers these modules in C++20 as an
extension.)
+```
-C++ Standard version tests
-~~~~~~~~~~~~~~~~~~~~~~~~~~
+#### C++ Standard version tests
Historically libc++ tests used to filter the tests for C++ Standard versions
with lit directives like:
-.. code-block:: cpp
-
- // UNSUPPORTED: c++03, c++11, c++14, c++17, c++20, c++23
+```cpp
+// UNSUPPORTED: c++03, c++11, c++14, c++17, c++20, c++23
+```
With C++ Standards released every 3 years, this solution is not scalable.
Instead use:
-.. code-block:: cpp
-
- // REQUIRES: std-at-least-c++26
+```cpp
+// REQUIRES: std-at-least-c++26
+```
-There is no corresponding ``std-at-most-c++23``. This could be useful when
+There is no corresponding `std-at-most-c++23`. This could be useful when
tests are only valid for a small set of standard versions. For example, a
deprecation test is only valid when the feature is deprecated until it is
removed from the Standard. These tests should be written like:
-.. code-block:: cpp
-
- // REQUIRES: c++17 || c++20 || c++23
-
-.. note::
-
- There are a lot of tests with the first style, these can remain as they are.
- The new style is only intended to be used for new tests.
+```cpp
+// REQUIRES: c++17 || c++20 || c++23
+```
+:::{note}
+There are a lot of tests with the first style, these can remain as they are.
+The new style is only intended to be used for new tests.
+:::
-Benchmarks
-==========
+## Benchmarks
-Libc++'s test suite also contains benchmarks. Many benchmarks are written using the `Google Benchmark`_
+Libc++'s test suite also contains benchmarks. Many benchmarks are written using the [Google Benchmark][google benchmark]
library, a copy of which is stored in the LLVM monorepo. For more information about using the Google
-Benchmark library, see the `official documentation <https://github.com/google/benchmark>`_.
+Benchmark library, see the [official documentation](https://github.com/google/benchmark).
-The benchmarks are located under ``libcxx/test/benchmarks``. Running a benchmark
+The benchmarks are located under `libcxx/test/benchmarks`. Running a benchmark
works in the same way as running a test. Both the benchmarks and the tests share
the same configuration, so make sure to enable the relevant optimization level
when running the benchmarks. For example,
-.. code-block:: bash
+```bash
+$ libcxx/utils/libcxx-lit <build> libcxx/test/benchmarks/containers/string.bench.cpp --show-all --param optimization=speed
+```
- $ libcxx/utils/libcxx-lit <build> libcxx/test/benchmarks/containers/string.bench.cpp --show-all --param optimization=speed
-
-Note that benchmarks are only dry-run when run via the ``check-cxx`` target since
+Note that benchmarks are only dry-run when run via the `check-cxx` target since
we only want to make sure they don't rot. Do not rely on the results of benchmarks
-run through ``check-cxx`` for anything, instead run the benchmarks manually using
+run through `check-cxx` for anything, instead run the benchmarks manually using
the instructions for running individual tests.
If you want to compare the results of different benchmark runs, we recommend using the
-``compare-benchmarks`` helper tool. Note that the script has some dependencies, which can
+`compare-benchmarks` helper tool. Note that the script has some dependencies, which can
be installed with:
-.. code-block:: bash
-
- $ python -m venv .venv && source .venv/bin/activate # Optional but recommended
- $ pip install -r libcxx/utils/requirements.txt
+```bash
+$ python -m venv .venv && source .venv/bin/activate # Optional but recommended
+$ pip install -r libcxx/utils/requirements.txt
+```
Once that's done, start by configuring CMake in a build directory and running one or
more benchmarks, as usual:
-.. code-block:: bash
-
- $ cmake -S runtimes -B <build> [...]
- $ libcxx/utils/libcxx-lit <build> libcxx/test/benchmarks/containers/string.bench.cpp --param optimization=speed
+```bash
+$ cmake -S runtimes -B <build> [...]
+$ libcxx/utils/libcxx-lit <build> libcxx/test/benchmarks/containers/string.bench.cpp --param optimization=speed
+```
-Then, get the consolidated benchmark output for that run using ``consolidate-benchmarks``:
+Then, get the consolidated benchmark output for that run using `consolidate-benchmarks`:
-.. code-block:: bash
+```bash
+$ libcxx/utils/consolidate-benchmarks <build> > baseline.lnt
+```
- $ libcxx/utils/consolidate-benchmarks <build> > baseline.lnt
-
-The ``baseline.lnt`` file will contain a consolidation of all the benchmark results present in the build
+The `baseline.lnt` file will contain a consolidation of all the benchmark results present in the build
directory. You can then make the desired modifications to the code, run the benchmark(s) again, and then run:
-.. code-block:: bash
-
- $ libcxx/utils/consolidate-benchmarks <build> > candidate.lnt
-
-Finally, use ``compare-benchmarks`` to compare both:
+```bash
+$ libcxx/utils/consolidate-benchmarks <build> > candidate.lnt
+```
-.. code-block:: bash
+Finally, use `compare-benchmarks` to compare both:
- $ libcxx/utils/compare-benchmarks baseline.lnt candidate.lnt
+```bash
+$ libcxx/utils/compare-benchmarks baseline.lnt candidate.lnt
- # Useful one-liner when iterating locally:
- $ libcxx/utils/compare-benchmarks baseline.lnt <(libcxx/utils/consolidate-benchmarks <build>)
+# Useful one-liner when iterating locally:
+$ libcxx/utils/compare-benchmarks baseline.lnt <(libcxx/utils/consolidate-benchmarks <build>)
+```
-The ``compare-benchmarks`` script provides some useful options like creating a chart to easily visualize
-differences in a browser window. Use ``compare-benchmarks --help`` for details.
+The `compare-benchmarks` script provides some useful options like creating a chart to easily visualize
+differences in a browser window. Use `compare-benchmarks --help` for details.
Additionally, adding a comment of the following form to a libc++ PR will cause the specified benchmarks to be run
on our pre-commit CI infrastructure and the results to be reported in the PR by our CI system:
-.. code-block::
-
- /libcxx-bot benchmark <path/to/benchmark1.bench.cpp> <path/to/benchmark2.bench.cpp> ...
+```
+/libcxx-bot benchmark <path/to/benchmark1.bench.cpp> <path/to/benchmark2.bench.cpp> ...
+```
Note that this is currently experimental and the results should not be relied upon too strongly, since
we do not have dedicated hardware to run the benchmarks on.
-.. _`Google Benchmark`: https://github.com/google/benchmark
-
-.. _testing-hardening-assertions:
+(testing-hardening-assertions)=
-Testing hardening assertions
-============================
+## Testing hardening assertions
Each hardening assertion should be tested using death tests (via the
-``TEST_LIBCPP_ASSERT_FAILURE`` macro). The convention is to use ``assert.`` in
+`TEST_LIBCPP_ASSERT_FAILURE` macro). The convention is to use `assert.` in
the name of the test file to make it easier to identify as a hardening test, e.g.
-``assert.my_func.pass.cpp``.
+`assert.my_func.pass.cpp`.
These tests only make sense in configurations where the death test machinery in
-``check_assertion.h`` is usable, where a failing assertion is observable, and
+`check_assertion.h` is usable, where a failing assertion is observable, and
where the assertion being tested is enabled in the first place. Use the various
-``can-test-hardening-assertions-<mode>`` Lit features to guard the tests accordingly.
-The bare ``can-test-hardening-assertions`` Lit feature only encodes whether the death
+`can-test-hardening-assertions-<mode>` Lit features to guard the tests accordingly.
+The bare `can-test-hardening-assertions` Lit feature only encodes whether the death
test machinery is usable; it is meant for tests that select a hardening mode or an
-assertion semantic themselves (see the tests under ``libcxx/test/libcxx/assertions/``).
+assertion semantic themselves (see the tests under `libcxx/test/libcxx/assertions/`).
A toy example:
-.. code-block:: cpp
-
- // Example: `std::foo(...)` uses `_LIBCPP_ASSERT_NON_NULL`, which is
- // enabled in the `extensive` and `debug` modes.
- // REQUIRES: can-test-hardening-assertions-extensive
+```cpp
+// Example: `std::foo(...)` uses `_LIBCPP_ASSERT_NON_NULL`, which is
+// enabled in the `extensive` and `debug` modes.
+// REQUIRES: can-test-hardening-assertions-extensive
- #include <stdfoo>
+#include <stdfoo>
- #include "check_assertion.h" // Contains the `TEST_LIBCPP_ASSERT_FAILURE` macro
+#include "check_assertion.h" // Contains the `TEST_LIBCPP_ASSERT_FAILURE` macro
- int main(int, char**) {
- int bad_input = -1;
- TEST_LIBCPP_ASSERT_FAILURE(std::foo(bad_input), "The expected assertion message");
+int main(int, char**) {
+ int bad_input = -1;
+ TEST_LIBCPP_ASSERT_FAILURE(std::foo(bad_input), "The expected assertion message");
- return 0;
- }
+ return 0;
+}
+```
Note that error messages are only tested (matched) when the assertion semantic in
-effect logs one, i.e. ``enforce`` or ``observe``.
+effect logs one, i.e. `enforce` or `observe`.
+
+[google benchmark]: https://github.com/google/benchmark
+[lit command guide]: https://llvm.org/docs/CommandGuide/lit.html
+
diff --git a/libcxx/docs/UserDocumentation.md b/libcxx/docs/UserDocumentation.md
index 415a599168374..2f8a5a7fcb2e8 100644
--- a/libcxx/docs/UserDocumentation.md
+++ b/libcxx/docs/UserDocumentation.md
@@ -1,11 +1,10 @@
-.. _user-documentation:
+(user-documentation)=
-==================
-User documentation
-==================
+# User documentation
-.. contents::
- :local:
+```{contents}
+:local: true
+```
This page contains information for users of libc++: how to use libc++ if it is not
the default library used by the toolchain, and what configuration knobs are available
@@ -13,117 +12,116 @@ if libc++ is used by the toolchain. This page is aimed at users of libc++, where
separate page contains documentation aimed at vendors who build and ship libc++
as part of their toolchain.
-
-Using a different version of the C++ Standard
-=============================================
+## Using a different version of the C++ Standard
Libc++ implements the various versions of the C++ standard. Changing the version of
-the standard can be done by passing ``-std=c++XY`` to the compiler. Libc++ will
+the standard can be done by passing `-std=c++XY` to the compiler. Libc++ will
automatically detect what standard is being used and will provide functionality that
matches that standard in the library.
-.. code-block:: bash
-
- $ clang++ -std=c++17 test.cpp
+```bash
+$ clang++ -std=c++17 test.cpp
+```
-Note that using ``-std=c++XY`` with a version of the standard that has not been ratified
+Note that using `-std=c++XY` with a version of the standard that has not been ratified
yet is considered unstable. While we strive to maintain stability, libc++ may be forced to
make breaking changes to features shipped in a C++ standard that has not been ratified yet.
Use these versions of the standard at your own risk.
-
-Using libc++ when it is not the system default
-==============================================
+## Using libc++ when it is not the system default
Usually, libc++ is packaged and shipped by a vendor through some delivery vehicle
(operating system distribution, SDK, toolchain, etc) and users don't need to do
anything special in order to use the library.
However, on systems where libc++ is provided but is not the default, Clang can be invoked
-with the ``-stdlib=`` flag to select which standard library is used.
-Using ``-stdlib=libc++`` will select libc++:
+with the `-stdlib=` flag to select which standard library is used.
+Using `-stdlib=libc++` will select libc++:
-.. code-block:: bash
-
- $ clang++ -stdlib=libc++ test.cpp
+```bash
+$ clang++ -stdlib=libc++ test.cpp
+```
This flag is not required on systems where libc++ is the default standard library,
such as macOS and FreeBSD.
-
-Enabling experimental C++ Library features
-==========================================
+## Enabling experimental C++ Library features
Libc++ provides implementations of some experimental features. Experimental features
are either Technical Specifications (TSes) or official features that were voted to
the C++ standard but whose implementation is not complete or stable yet in libc++.
Those are disabled by default because they are neither API nor ABI stable. However,
-users can enable the ``-fexperimental-library`` compiler flag to turn those features on.
+users can enable the `-fexperimental-library` compiler flag to turn those features on.
-On compilers that do not support the ``-fexperimental-library`` flag (such as GCC),
-users can define the ``_LIBCPP_ENABLE_EXPERIMENTAL`` macro and manually link against
-the appropriate static library (usually shipped as ``libc++experimental.a``) to get
+On compilers that do not support the `-fexperimental-library` flag (such as GCC),
+users can define the `_LIBCPP_ENABLE_EXPERIMENTAL` macro and manually link against
+the appropriate static library (usually shipped as `libc++experimental.a`) to get
access to experimental library features.
The following features are currently considered experimental and are only provided
-when ``-fexperimental-library`` is passed:
+when `-fexperimental-library` is passed:
-* The parallel algorithms library (``<execution>`` and the associated algorithms)
-* ``std::chrono::tzdb`` and related time zone functionality
-* ``<syncstream>``
+- The parallel algorithms library (`<execution>` and the associated algorithms)
+- `std::chrono::tzdb` and related time zone functionality
+- `<syncstream>`
Additionally, assertion semantics are an experimental feature that can be used
-to customize the behavior of Hardening (see :ref:`here <assertion-semantics>`).
+to customize the behavior of Hardening (see {ref}`here <assertion-semantics>`).
Assertion semantics mirror the evaluation semantics of C++26 Contracts but are
not a standard feature.
-.. note::
- Experimental libraries are experimental.
- * The contents of the ``<experimental/...>`` headers and the associated static
- library may not remain compatible between versions.
- * No guarantees of API or ABI stability are provided.
- * When the standardized version of an experimental feature is implemented,
- the experimental feature is removed two releases after the non-experimental
- version has shipped. The full policy is explained :ref:`here <experimental features>`.
+:::{note}
+Experimental libraries are experimental.
+: - The contents of the `<experimental/...>` headers and the associated static
+ library may not remain compatible between versions.
+ - No guarantees of API or ABI stability are provided.
+ - When the standardized version of an experimental feature is implemented,
+ the experimental feature is removed two releases after the non-experimental
+ version has shipped. The full policy is explained {ref}`here <experimental features>`.
+:::
+(libcxx-configuration-macros)=
-.. _libcxx-configuration-macros:
-
-Libc++ Configuration Macros
-===========================
+## Libc++ Configuration Macros
Libc++ provides a number of configuration macros that can be used by developers to
enable or disable extended libc++ behavior.
-.. warning::
- Configuration macros that are not documented here are not intended to be customized
- by developers and should not be used. In particular, some configuration macros are
- only intended to be used by vendors and changing their value from the one provided
- in your toolchain can lead to unexpected behavior.
+:::{warning}
+Configuration macros that are not documented here are not intended to be customized
+by developers and should not be used. In particular, some configuration macros are
+only intended to be used by vendors and changing their value from the one provided
+in your toolchain can lead to unexpected behavior.
+:::
+
+**\_LIBCPP_DISABLE_DEPRECATION_WARNINGS**:
-**_LIBCPP_DISABLE_DEPRECATION_WARNINGS**:
- This macro disables warnings when using deprecated components. For example,
+: This macro disables warnings when using deprecated components. For example,
using `std::auto_ptr` when compiling in C++11 mode will normally trigger a
warning saying that `std::auto_ptr` is deprecated. If the macro is defined,
no warning will be emitted. By default, this macro is not defined.
-**_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS**:
- This macro is used to disable all visibility annotations inside libc++.
+**\_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS**:
+
+: This macro is used to disable all visibility annotations inside libc++.
Defining this macro and then building libc++ with hidden visibility gives a
build of libc++ which does not export any symbols, which can be useful when
building statically for inclusion into another library.
-**_LIBCPP_ENABLE_EXPERIMENTAL**:
- This macro enables experimental features. This can be used on compilers that do
- not support the ``-fexperimental-library`` flag. When used, users also need to
- ensure that the appropriate experimental library (usually ``libc++experimental.a``)
+**\_LIBCPP_ENABLE_EXPERIMENTAL**:
+
+: This macro enables experimental features. This can be used on compilers that do
+ not support the `-fexperimental-library` flag. When used, users also need to
+ ensure that the appropriate experimental library (usually `libc++experimental.a`)
is linked into their program.
-**_LIBCPP_HARDENING_MODE**:
- This macro is used to choose the :ref:`hardening mode <using-hardening-modes>`.
+**\_LIBCPP_HARDENING_MODE**:
+
+: This macro is used to choose the {ref}`hardening mode <using-hardening-modes>`.
-**_LIBCPP_NO_VCRUNTIME**:
- Microsoft's C and C++ headers are fairly entangled, and some of their C++
+**\_LIBCPP_NO_VCRUNTIME**:
+
+: Microsoft's C and C++ headers are fairly entangled, and some of their C++
headers are fairly hard to avoid. In particular, `vcruntime_new.h` gets pulled
in from a lot of other headers and provides definitions which clash with
libc++ headers, such as `nothrow_t` (note that `nothrow_t` is a struct, so
@@ -142,8 +140,9 @@ enable or disable extended libc++ behavior.
replacement scenarios from working, e.g. replacing `operator new` and
expecting a non-replaced `operator new[]` to call the replaced `operator new`.
-**_LIBCPP_REMOVE_TRANSITIVE_INCLUDES**:
- When this macro is defined, the standard library headers will adhere to a
+**\_LIBCPP_REMOVE_TRANSITIVE_INCLUDES**:
+
+: When this macro is defined, the standard library headers will adhere to a
stricter policy regarding the (transitive) inclusion of other standard library
headers, only guaranteeing to provide those definitions explicitly mandated by
the standard. Please notice that defining this macro might break existing codebases
@@ -164,189 +163,196 @@ enable or disable extended libc++ behavior.
when updating to a newer version of the library, since transitive includes
that your code was previously relying on may have been removed.
-C++17 Specific Configuration Macros
------------------------------------
-**_LIBCPP_ENABLE_CXX17_REMOVED_AUTO_PTR**:
- This macro is used to re-enable `auto_ptr`.
+### C++17 Specific Configuration Macros
+
+**\_LIBCPP_ENABLE_CXX17_REMOVED_AUTO_PTR**:
+
+: This macro is used to re-enable `auto_ptr`.
+
+**\_LIBCPP_ENABLE_CXX17_REMOVED_BINDERS**:
-**_LIBCPP_ENABLE_CXX17_REMOVED_BINDERS**:
- This macro is used to re-enable the `binder1st`, `binder2nd`,
+: This macro is used to re-enable the `binder1st`, `binder2nd`,
`pointer_to_unary_function`, `pointer_to_binary_function`, `mem_fun_t`,
`mem_fun1_t`, `mem_fun_ref_t`, `mem_fun1_ref_t`, `const_mem_fun_t`,
`const_mem_fun1_t`, `const_mem_fun_ref_t`, and `const_mem_fun1_ref_t`
class templates, and the `bind1st`, `bind2nd`, `mem_fun`, `mem_fun_ref`,
and `ptr_fun` functions.
-**_LIBCPP_ENABLE_CXX17_REMOVED_RANDOM_SHUFFLE**:
- This macro is used to re-enable the `random_shuffle` algorithm.
+**\_LIBCPP_ENABLE_CXX17_REMOVED_RANDOM_SHUFFLE**:
-**_LIBCPP_ENABLE_CXX17_REMOVED_UNARY_BINARY_FUNCTION**:
- This macro is used to re-enable `unary_function` and `binary_function`.
+: This macro is used to re-enable the `random_shuffle` algorithm.
-**_LIBCPP_ENABLE_CXX17_REMOVED_UNEXPECTED_FUNCTIONS**:
- This macro is used to re-enable `set_unexpected`, `get_unexpected`, and
+**\_LIBCPP_ENABLE_CXX17_REMOVED_UNARY_BINARY_FUNCTION**:
+
+: This macro is used to re-enable `unary_function` and `binary_function`.
+
+**\_LIBCPP_ENABLE_CXX17_REMOVED_UNEXPECTED_FUNCTIONS**:
+
+: This macro is used to re-enable `set_unexpected`, `get_unexpected`, and
`unexpected`.
-C++20 Specific Configuration Macros
------------------------------------
-**_LIBCPP_ENABLE_CXX20_REMOVED_BINDER_TYPEDEFS**:
- This macro is used to re-enable the `argument_type`, `result_type`,
+### C++20 Specific Configuration Macros
+
+**\_LIBCPP_ENABLE_CXX20_REMOVED_BINDER_TYPEDEFS**:
+
+: This macro is used to re-enable the `argument_type`, `result_type`,
`first_argument_type`, and `second_argument_type` members of class
templates such as `plus`, `logical_not`, `hash`, and `owner_less`.
-**_LIBCPP_ENABLE_CXX20_REMOVED_NEGATORS**:
- This macro is used to re-enable `not1`, `not2`, `unary_negate`,
+**\_LIBCPP_ENABLE_CXX20_REMOVED_NEGATORS**:
+
+: This macro is used to re-enable `not1`, `not2`, `unary_negate`,
and `binary_negate`.
-**_LIBCPP_ENABLE_CXX20_REMOVED_RAW_STORAGE_ITERATOR**:
- This macro is used to re-enable `raw_storage_iterator`.
+**\_LIBCPP_ENABLE_CXX20_REMOVED_RAW_STORAGE_ITERATOR**:
+
+: This macro is used to re-enable `raw_storage_iterator`.
+
+**\_LIBCPP_ENABLE_CXX20_REMOVED_SHARED_PTR_UNIQUE**:
+
+: This macro is used to re-enable the function
+ `std::shared_ptr<...>::unique()`.
-**_LIBCPP_ENABLE_CXX20_REMOVED_SHARED_PTR_UNIQUE**:
- This macro is used to re-enable the function
- ``std::shared_ptr<...>::unique()``.
+**\_LIBCPP_ENABLE_CXX20_REMOVED_TEMPORARY_BUFFER**:
-**_LIBCPP_ENABLE_CXX20_REMOVED_TEMPORARY_BUFFER**:
- This macro is used to re-enable `get_temporary_buffer` and `return_temporary_buffer`.
+: This macro is used to re-enable `get_temporary_buffer` and `return_temporary_buffer`.
-**_LIBCPP_ENABLE_CXX20_REMOVED_TYPE_TRAITS**:
- This macro is used to re-enable `is_literal_type`, `is_literal_type_v`,
+**\_LIBCPP_ENABLE_CXX20_REMOVED_TYPE_TRAITS**:
+
+: This macro is used to re-enable `is_literal_type`, `is_literal_type_v`,
`result_of` and `result_of_t`.
-**_LIBCPP_ENABLE_CXX20_REMOVED_UNCAUGHT_EXCEPTION**:
- This macro is used to re-enable `uncaught_exception`.
+**\_LIBCPP_ENABLE_CXX20_REMOVED_UNCAUGHT_EXCEPTION**:
+
+: This macro is used to re-enable `uncaught_exception`.
+
+### C++26 Specific Configuration Macros
+
+**\_LIBCPP_ENABLE_CXX26_REMOVED_ALLOCATOR_MEMBERS**:
-C++26 Specific Configuration Macros
------------------------------------
+: This macro is used to re-enable redundant member of `allocator<T>::is_always_equal`.
-**_LIBCPP_ENABLE_CXX26_REMOVED_ALLOCATOR_MEMBERS**:
- This macro is used to re-enable redundant member of ``allocator<T>::is_always_equal``.
+**\_LIBCPP_ENABLE_CXX26_REMOVED_CODECVT**:
-**_LIBCPP_ENABLE_CXX26_REMOVED_CODECVT**:
- This macro is used to re-enable all named declarations in ``<codecvt>``.
+: This macro is used to re-enable all named declarations in `<codecvt>`.
-**_LIBCPP_ENABLE_CXX26_REMOVED_STRING_RESERVE**:
- This macro is used to re-enable the function
- ``std::basic_string<...>::reserve()``.
+**\_LIBCPP_ENABLE_CXX26_REMOVED_STRING_RESERVE**:
-**_LIBCPP_ENABLE_CXX26_REMOVED_STRSTREAM**:
- This macro is used to re-enable all named declarations in ``<strstream>``.
+: This macro is used to re-enable the function
+ `std::basic_string<...>::reserve()`.
-**_LIBCPP_ENABLE_CXX26_REMOVED_WSTRING_CONVERT**:
- This macro is used to re-enable the ``wstring_convert`` and ``wbuffer_convert``
- in ``<locale>``.
+**\_LIBCPP_ENABLE_CXX26_REMOVED_STRSTREAM**:
-Libc++ Extensions
-=================
+: This macro is used to re-enable all named declarations in `<strstream>`.
+
+**\_LIBCPP_ENABLE_CXX26_REMOVED_WSTRING_CONVERT**:
+
+: This macro is used to re-enable the `wstring_convert` and `wbuffer_convert`
+ in `<locale>`.
+
+## Libc++ Extensions
This section documents various extensions provided by libc++
and any information regarding how to use them.
-Extended integral type support
-------------------------------
+### Extended integral type support
Several platforms support types that are not specified in the C++ standard,
-such as the 128-bit integral types ``__int128_t`` and ``__uint128_t``.
+such as the 128-bit integral types `__int128_t` and `__uint128_t`.
As an extension, libc++ does a best-effort attempt to support these types like
other integral types, by supporting them notably in:
-* ``<bits>``
-* ``<charconv>``
-* ``<functional>``
-* ``<format>``
-* ``<random>``
-* ``<type_traits>``
+- `<bits>`
+- `<charconv>`
+- `<functional>`
+- `<format>`
+- `<random>`
+- `<type_traits>`
-Additional types supported in random distributions
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+#### Additional types supported in random distributions
-The `C++ Standard <http://eel.is/c++draft/rand#req.genl-1.5>`_ mentions that instantiating several random number
-distributions with types other than ``short``, ``int``, ``long``, ``long long``, and their unsigned versions is
-undefined. As an extension, libc++ supports instantiating ``binomial_distribution``, ``discrete_distribution``,
-``geometric_distribution``, ``negative_binomial_distribution``, ``poisson_distribution``, and ``uniform_int_distribution``
-with ``int8_t``, ``__int128_t`` and their unsigned versions.
+The [C++ Standard](http://eel.is/c++draft/rand#req.genl-1.5) mentions that instantiating several random number
+distributions with types other than `short`, `int`, `long`, `long long`, and their unsigned versions is
+undefined. As an extension, libc++ supports instantiating `binomial_distribution`, `discrete_distribution`,
+`geometric_distribution`, `negative_binomial_distribution`, `poisson_distribution`, and `uniform_int_distribution`
+with `int8_t`, `__int128_t` and their unsigned versions.
-Extensions to ``<format>``
---------------------------
+### Extensions to `<format>`
-The exposition only type ``basic-format-string`` and its typedefs
-``format-string`` and ``wformat-string`` became ``basic_format_string``,
-``format_string``, and ``wformat_string`` in C++23. Libc++ makes these types
+The exposition only type `basic-format-string` and its typedefs
+`format-string` and `wformat-string` became `basic_format_string`,
+`format_string`, and `wformat_string` in C++23. Libc++ makes these types
available in C++20 as an extension.
-For padding Unicode strings the ``format`` library relies on the Unicode standard.
+For padding Unicode strings the `format` library relies on the Unicode standard.
Libc++ retroactively updates the Unicode standard in older C++ versions.
This allows the library to have better estimates for newly introduced Unicode code points,
without requiring the user to use the latest C++ version in their code base.
-In C++26 formatting pointers gained a type ``P`` and allows to use
+In C++26 formatting pointers gained a type `P` and allows to use
zero-padding. These options have been retroactively applied to C++20.
-Extensions to the C++23 modules ``std`` and ``std.compat``
-----------------------------------------------------------
+### Extensions to the C++23 modules `std` and `std.compat`
-Like other major implementations, libc++ provides C++23 modules ``std`` and
-``std.compat`` in C++20 as an extension.
+Like other major implementations, libc++ provides C++23 modules `std` and
+`std.compat` in C++20 as an extension.
-Constant-initialized std::string
---------------------------------
+### Constant-initialized std::string
-As an implementation-specific optimization, ``std::basic_string`` (``std::string``,
-``std::wstring``, etc.) may either store the string data directly in the object, or else store a
+As an implementation-specific optimization, `std::basic_string` (`std::string`,
+`std::wstring`, etc.) may either store the string data directly in the object, or else store a
pointer to heap-allocated memory, depending on the length of the string.
-As of C++20, the constructors are now declared ``constexpr``, which permits strings to be used
+As of C++20, the constructors are now declared `constexpr`, which permits strings to be used
during constant-evaluation time. In libc++, as in other common implementations, it is also possible
-to constant-initialize a string object (e.g. via declaring a variable with ``constinit`` or
-``constexpr``), but only if the string is short enough to not require a heap allocation.
+to constant-initialize a string object (e.g. via declaring a variable with `constinit` or
+`constexpr`), but only if the string is short enough to not require a heap allocation.
Reliance upon this is discouraged in portable code, as the allowed length differs based on the
standard-library implementation and also based on whether the platform uses 32-bit or 64-bit
pointers.
-.. code-block:: cpp
+```cpp
+// Non-portable: 11-char string works on 64-bit libc++, but not on 32-bit.
+constinit std::string x = "hello world";
- // Non-portable: 11-char string works on 64-bit libc++, but not on 32-bit.
- constinit std::string x = "hello world";
+// Prefer to use string_view, or remove constinit/constexpr from the variable definition:
+constinit std::string_view x = "hello world";
+std::string_view y = "hello world";
+```
- // Prefer to use string_view, or remove constinit/constexpr from the variable definition:
- constinit std::string_view x = "hello world";
- std::string_view y = "hello world";
+(turning-off-asan)=
-.. _turning-off-asan:
+### Turning off ASan annotation in containers
-Turning off ASan annotation in containers
------------------------------------------
-
-``__asan_annotate_container_with_allocator`` is a customization point to allow users to disable
-`Address Sanitizer annotations for containers <https://github.com/google/sanitizers/wiki/AddressSanitizerContainerOverflow>`_ for specific allocators.
+`__asan_annotate_container_with_allocator` is a customization point to allow users to disable
+[Address Sanitizer annotations for containers](https://github.com/google/sanitizers/wiki/AddressSanitizerContainerOverflow) for specific allocators.
This may be necessary for allocators that access allocated memory.
-This customization point exists only when ``_LIBCPP_HAS_ASAN_CONTAINER_ANNOTATIONS_FOR_ALL_ALLOCATORS`` Feature Test Macro is defined.
+This customization point exists only when `_LIBCPP_HAS_ASAN_CONTAINER_ANNOTATIONS_FOR_ALL_ALLOCATORS` Feature Test Macro is defined.
-For allocators not running destructors, it is also possible to `bulk-unpoison memory <https://github.com/google/sanitizers/wiki/AddressSanitizerManualPoisoning>`_
+For allocators not running destructors, it is also possible to [bulk-unpoison memory](https://github.com/google/sanitizers/wiki/AddressSanitizerManualPoisoning)
instead of disabling annotations altogether.
-The struct may be specialized for user-defined allocators. It is a `Cpp17UnaryTypeTrait <http://eel.is/c++draft/type.traits#meta.rqmts>`_
-with a base characteristic of ``true_type`` if the container is allowed to use annotations and ``false_type`` otherwise.
-
-The annotations for a ``user_allocator`` can be disabled like this:
+The struct may be specialized for user-defined allocators. It is a [Cpp17UnaryTypeTrait](http://eel.is/c++draft/type.traits#meta.rqmts)
+with a base characteristic of `true_type` if the container is allowed to use annotations and `false_type` otherwise.
-.. code-block:: cpp
+The annotations for a `user_allocator` can be disabled like this:
- #ifdef _LIBCPP_HAS_ASAN_CONTAINER_ANNOTATIONS_FOR_ALL_ALLOCATORS
- template <class T>
- struct std::__asan_annotate_container_with_allocator<user_allocator<T>> : std::false_type {};
- #endif
+```cpp
+#ifdef _LIBCPP_HAS_ASAN_CONTAINER_ANNOTATIONS_FOR_ALL_ALLOCATORS
+template <class T>
+struct std::__asan_annotate_container_with_allocator<user_allocator<T>> : std::false_type {};
+#endif
+```
-Why may I want to turn it off?
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+#### Why may I want to turn it off?
There are a few reasons why you may want to turn off annotations for an allocator.
Unpoisoning may not be an option, if (for example) you are not maintaining the allocator.
-* You are using allocator, which does not call destructor during deallocation.
-* You are aware that memory allocated with an allocator may be accessed, even when unused by container.
+- You are using allocator, which does not call destructor during deallocation.
+- You are aware that memory allocated with an allocator may be accessed, even when unused by container.
-Support for compiler extensions
--------------------------------
+### Support for compiler extensions
Clang, GCC and other compilers all provide their own set of language extensions. These extensions
have often been developed without particular consideration for their interaction with the library,
@@ -354,89 +360,82 @@ and as such, libc++ does not go out of its way to support them. The library may
compiler extensions which would then be documented explicitly, but the basic expectation should be
that no special support is provided for arbitrary compiler extensions.
-Platform specific behavior
-==========================
+## Platform specific behavior
-Windows
--------
+### Windows
-The ``stdout``, ``stderr``, and ``stdin`` file streams can be placed in
-Unicode mode by a suitable call to ``_setmode()``. When in this mode,
+The `stdout`, `stderr`, and `stdin` file streams can be placed in
+Unicode mode by a suitable call to `_setmode()`. When in this mode,
the sequence of bytes read from, or written to, these streams is interpreted
-as a sequence of little-endian ``wchar_t`` elements. Thus, use of
-``std::cout``, ``std::cerr``, or ``std::cin`` with streams in Unicode mode
+as a sequence of little-endian `wchar_t` elements. Thus, use of
+`std::cout`, `std::cerr`, or `std::cin` with streams in Unicode mode
will not behave as they usually do since bytes read or written won't be
-interpreted as individual ``char`` elements. However, ``std::wcout``,
-``std::wcerr``, and ``std::wcin`` will behave as expected.
+interpreted as individual `char` elements. However, `std::wcout`,
+`std::wcerr`, and `std::wcin` will behave as expected.
-Wide character stream such as ``std::wcin`` or ``std::wcout`` imbued with a
+Wide character stream such as `std::wcin` or `std::wcout` imbued with a
locale behave differently than they otherwise do. By default, wide character
streams don't convert wide characters but input/output them as is. If a
specific locale is imbued, the IO with the underlying stream happens with
-regular ``char`` elements, which are converted to/from wide characters
+regular `char` elements, which are converted to/from wide characters
according to the locale. Note that this will not behave as expected if the
stream has been set in Unicode mode.
-
-Third-party Integrations
-========================
+## Third-party Integrations
Libc++ provides integration with a few third-party tools.
-Debugging libc++ internals in LLDB
-----------------------------------
+### Debugging libc++ internals in LLDB
LLDB hides the implementation details of libc++ by default.
-E.g., when setting a breakpoint in a comparator passed to ``std::sort``, the
+E.g., when setting a breakpoint in a comparator passed to `std::sort`, the
backtrace will read as
-.. code-block::
-
- (lldb) thread backtrace
- * thread #1, name = 'a.out', stop reason = breakpoint 3.1
- * frame #0: 0x000055555555520e a.out`my_comparator(a=1, b=8) at test-std-sort.cpp:6:3
- frame #7: 0x0000555555555615 a.out`void std::__1::sort[abi:ne200000]<std::__1::__wrap_iter<int*>, bool (*)(int, int)>(__first=(item = 8), __last=(item = 0), __comp=(a.out`my_less(int, int) at test-std-sort.cpp:5)) at sort.h:1003:3
- frame #8: 0x000055555555531a a.out`main at test-std-sort.cpp:24:3
+```
+(lldb) thread backtrace
+* thread #1, name = 'a.out', stop reason = breakpoint 3.1
+ * frame #0: 0x000055555555520e a.out`my_comparator(a=1, b=8) at test-std-sort.cpp:6:3
+ frame #7: 0x0000555555555615 a.out`void std::__1::sort[abi:ne200000]<std::__1::__wrap_iter<int*>, bool (*)(int, int)>(__first=(item = 8), __last=(item = 0), __comp=(a.out`my_less(int, int) at test-std-sort.cpp:5)) at sort.h:1003:3
+ frame #8: 0x000055555555531a a.out`main at test-std-sort.cpp:24:3
+```
-Note how the caller of ``my_comparator`` is shown as ``std::sort``. Looking at
+Note how the caller of `my_comparator` is shown as `std::sort`. Looking at
the frame numbers, we can see that frames #1 until #6 were hidden. Those frames
-represent internal implementation details such as ``__sort4`` and similar
+represent internal implementation details such as `__sort4` and similar
utility functions.
-To also show those implementation details, use ``thread backtrace -u``.
-Alternatively, to disable those compact backtraces, use ``frame recognizer list``
-and ``frame recognizer disable`` on the "libc++ frame recognizer".
+To also show those implementation details, use `thread backtrace -u`.
+Alternatively, to disable those compact backtraces, use `frame recognizer list`
+and `frame recognizer disable` on the "libc++ frame recognizer".
Futhermore, stepping into libc++ functions is disabled by default. This is controlled via the
-setting ``target.process.thread.step-avoid-regexp`` which defaults to ``^std::`` and can be
-disabled using ``settings set target.process.thread.step-avoid-regexp ""``.
+setting `target.process.thread.step-avoid-regexp` which defaults to `^std::` and can be
+disabled using `settings set target.process.thread.step-avoid-regexp ""`.
-GDB Pretty printers for libc++
-------------------------------
+### GDB Pretty printers for libc++
GDB does not support pretty-printing of libc++ symbols by default. However, libc++ does
provide pretty-printers itself. Those can be used as:
-.. code-block:: bash
-
- $ gdb -ex "source <libcxx>/utils/gdb/libcxx/printers.py" \
- -ex "python register_libcxx_printer_loader()" \
- <args>
-
+```bash
+$ gdb -ex "source <libcxx>/utils/gdb/libcxx/printers.py" \
+ -ex "python register_libcxx_printer_loader()" \
+ <args>
+```
-.. _include-what-you-use:
+(include-what-you-use)=
-include-what-you-use (IWYU)
----------------------------
+### include-what-you-use (IWYU)
-libc++ provides an IWYU `mapping file <https://github.com/include-what-you-use/include-what-you-use/blob/master/docs/IWYUMappings.md>`_,
+libc++ provides an IWYU [mapping file](https://github.com/include-what-you-use/include-what-you-use/blob/master/docs/IWYUMappings.md),
which drastically improves the accuracy of the tool when using libc++. To use the mapping file with
IWYU, you should run the tool like so:
-.. code-block:: bash
+```bash
+$ include-what-you-use -Xiwyu --mapping_file=/path/to/libcxx/include/libcxx.imp file.cpp
+```
- $ include-what-you-use -Xiwyu --mapping_file=/path/to/libcxx/include/libcxx.imp file.cpp
+If you would prefer to not use that flag, then you can replace `/path/to/include-what-you-use/share/libcxx.imp`
+file with the libc++-provided `libcxx.imp` file.
-If you would prefer to not use that flag, then you can replace ``/path/to/include-what-you-use/share/libcxx.imp``
-file with the libc++-provided ``libcxx.imp`` file.
diff --git a/libcxx/docs/VendorDocumentation.md b/libcxx/docs/VendorDocumentation.md
index 38fd5ac73e222..4ff5472ca5ea3 100644
--- a/libcxx/docs/VendorDocumentation.md
+++ b/libcxx/docs/VendorDocumentation.md
@@ -1,50 +1,49 @@
-.. _VendorDocumentation:
+(vendordocumentation)=
-====================
-Vendor Documentation
-====================
+# Vendor Documentation
-.. contents::
- :local:
+```{contents}
+:local: true
+```
The instructions on this page are aimed at vendors who ship libc++ as part of an
operating system distribution, a toolchain or similar shipping vehicles. If you
are a user merely trying to use libc++ in your program, you most likely want to
refer to your vendor's documentation, or to the general user documentation
-:ref:`here <user-documentation>`.
+{ref}`here <user-documentation>`.
-.. warning::
- If your operating system already provides libc++, it is important to be careful
- not to replace it. Replacing your system's libc++ installation could render it
- non-functional. Use the CMake option ``CMAKE_INSTALL_PREFIX`` to select a safe
- place to install libc++.
+:::{warning}
+If your operating system already provides libc++, it is important to be careful
+not to replace it. Replacing your system's libc++ installation could render it
+non-functional. Use the CMake option `CMAKE_INSTALL_PREFIX` to select a safe
+place to install libc++.
+:::
-
-The default build
-=================
+## The default build
The default way of building libc++, libc++abi and libunwind is to root the CMake
-invocation at ``<monorepo>/runtimes``. While those projects are under the LLVM
+invocation at `<monorepo>/runtimes`. While those projects are under the LLVM
umbrella, they are different in nature from other build tools, so it makes sense
to treat them as a separate set of entities. The default build can be achieved
with the following CMake invocation:
-.. code-block:: bash
-
- $ git clone https://github.com/llvm/llvm-project.git
- $ cd llvm-project
- $ mkdir build
- $ cmake -G Ninja -S runtimes -B build -DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi;libunwind" # Configure
- $ ninja -C build cxx cxxabi unwind # Build
- $ ninja -C build check-cxx check-cxxabi check-unwind # Test
- $ ninja -C build install-cxx install-cxxabi install-unwind # Install
-
-.. note::
- See :ref:`Vendor Configuration Options` below for more configuration options.
-
-After building the various ``install-XXX`` targets, shared libraries for libc++, libc++abi and
-libunwind should now be present in ``<CMAKE_INSTALL_PREFIX>/lib``, and headers in
-``<CMAKE_INSTALL_PREFIX>/include/c++/v1``. See the instructions below for information on how
+```bash
+$ git clone https://github.com/llvm/llvm-project.git
+$ cd llvm-project
+$ mkdir build
+$ cmake -G Ninja -S runtimes -B build -DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi;libunwind" # Configure
+$ ninja -C build cxx cxxabi unwind # Build
+$ ninja -C build check-cxx check-cxxabi check-unwind # Test
+$ ninja -C build install-cxx install-cxxabi install-unwind # Install
+```
+
+:::{note}
+See {ref}`Vendor Configuration Options` below for more configuration options.
+:::
+
+After building the various `install-XXX` targets, shared libraries for libc++, libc++abi and
+libunwind should now be present in `<CMAKE_INSTALL_PREFIX>/lib`, and headers in
+`<CMAKE_INSTALL_PREFIX>/include/c++/v1`. See the instructions below for information on how
to use this libc++ over the default one.
In the default configuration, the runtimes will be built using the compiler available by default
@@ -52,377 +51,369 @@ on your system. Of course, you can change what compiler is being used with the u
variables. If you wish to build the runtimes from a just-built Clang, the bootstrapping build
explained below makes this task easy.
-Using the just-built libc++
----------------------------
+### Using the just-built libc++
Most compilers provide a way to disable the default behavior for finding the standard library and
to override it with custom paths. With Clang, this can be done with:
-.. code-block:: bash
-
- $ clang++ -nostdinc++ -isystem <install>/include/c++/v1 \
- -nostdlib++ -L <install>/lib -lc++ \
- -Wl,-rpath,<install>/lib \
- test.cpp
+```bash
+$ clang++ -nostdinc++ -isystem <install>/include/c++/v1 \
+ -nostdlib++ -L <install>/lib -lc++ \
+ -Wl,-rpath,<install>/lib \
+ test.cpp
+```
-The option ``-Wl,-rpath,<install>/lib`` adds a runtime library search path, which causes the system's
-dynamic linker to look for libc++ in ``<install>/lib`` whenever the program is loaded.
+The option `-Wl,-rpath,<install>/lib` adds a runtime library search path, which causes the system's
+dynamic linker to look for libc++ in `<install>/lib` whenever the program is loaded.
-.. note::
- If the runtimes were built using the "per-target runtime directory" layout,
- they will be in ``<install>/lib/<target-triple>`` instead of ``<install>/lib``.
- In this case, use the former path for all library paths in the command above
- (the path to include files does not change).
+:::{note}
+If the runtimes were built using the "per-target runtime directory" layout,
+they will be in `<install>/lib/<target-triple>` instead of `<install>/lib`.
+In this case, use the former path for all library paths in the command above
+(the path to include files does not change).
+:::
-The Bootstrapping build
-=======================
+## The Bootstrapping build
It is possible to build Clang and then build the runtimes using that just-built compiler in a
single CMake invocation. This is usually the correct way to build the runtimes when putting together
a toolchain, or when the system compiler is not adequate to build them (too old, unsupported, etc.).
To do this, use the following CMake invocation, and in particular notice how we're now rooting the
-CMake invocation at ``<monorepo>/llvm``:
-
-.. code-block:: bash
-
- $ mkdir build
- $ # Configure
- $ cmake -G Ninja -S llvm -B build \
- -DCMAKE_BUILD_TYPE=RelWithDebInfo \
- -DLLVM_ENABLE_PROJECTS="clang" \
- -DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi;libunwind;compiler-rt" \
- -DLLVM_RUNTIME_TARGETS="<target-triple>"
- $ ninja -C build runtimes # Build
- $ ninja -C build check-runtimes # Test
- $ ninja -C build install-runtimes # Install
-
-.. note::
- - This type of build is also commonly called a "Runtimes build", but we would like to move
- away from that terminology, which is too confusing.
-
- - Adding the `--fresh` flag to the top-level cmake invocation in a bootstrapping build *will not*
- freshen the cmake cache of any of the enabled runtimes.
-
-
-.. _Vendor Configuration Options:
-
-Vendor Configuration Options
-============================
+CMake invocation at `<monorepo>/llvm`:
+
+```bash
+$ mkdir build
+$ # Configure
+$ cmake -G Ninja -S llvm -B build \
+ -DCMAKE_BUILD_TYPE=RelWithDebInfo \
+ -DLLVM_ENABLE_PROJECTS="clang" \
+ -DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi;libunwind;compiler-rt" \
+ -DLLVM_RUNTIME_TARGETS="<target-triple>"
+$ ninja -C build runtimes # Build
+$ ninja -C build check-runtimes # Test
+$ ninja -C build install-runtimes # Install
+```
+
+:::{note}
+- This type of build is also commonly called a "Runtimes build", but we would like to move
+ away from that terminology, which is too confusing.
+- Adding the `--fresh` flag to the top-level cmake invocation in a bootstrapping build *will not*
+ freshen the cmake cache of any of the enabled runtimes.
+:::
+
+(vendor-configuration-options)=
+
+## Vendor Configuration Options
This section documents configuration options that can be used by vendors when building the library.
These options provide a great deal of flexibility to customize libc++, such as selecting the ABI in
use, whether some features are provided, etc.
-.. warning::
- Many of these CMake options are tied to configuration macros with a corresponding name in the source
- code. However, these configuration macros are not intended to be customized by users directly, since
- many of them require the library to be built with a matching configuration. If you don't build libc++
- yourself, you should not use the options documented here.
-
-General purpose options
------------------------
-
-.. option:: LIBCXX_INSTALL_LIBRARY:BOOL
-
- **Default**: ``ON``
-
- Toggle the installation of the library portion of libc++.
-
-.. option:: LIBCXX_INSTALL_HEADERS:BOOL
-
- **Default**: ``ON``
-
- Toggle the installation of the libc++ headers.
-
-.. option:: LIBCXX_INSTALL_MODULES:BOOL
-
- **Default**: ``ON``
-
- Toggle the installation of the experimental libc++ module sources.
-
-.. option:: LIBCXX_ENABLE_SHARED:BOOL
-
- **Default**: ``ON``
-
- Build libc++ as a shared library. Either `LIBCXX_ENABLE_SHARED` or
- `LIBCXX_ENABLE_STATIC` has to be enabled.
-
-.. option:: LIBCXX_ENABLE_STATIC:BOOL
-
- **Default**: ``ON``
-
- Build libc++ as a static library. Either `LIBCXX_ENABLE_SHARED` or
- `LIBCXX_ENABLE_STATIC` has to be enabled.
-
-.. option:: LIBCXX_LIBDIR_SUFFIX:STRING
-
- Extra suffix to append to the directory where libraries are to be installed.
- This option overrides `LLVM_LIBDIR_SUFFIX`.
-
-.. option:: LIBCXX_HERMETIC_STATIC_LIBRARY:BOOL
-
- **Default**: ``OFF``
-
- Do not export any symbols from the static libc++ library.
- This is useful when the static libc++ library is being linked into shared
- libraries that may be used in with other shared libraries that use different
- C++ library. We want to avoid exporting any libc++ symbols in that case.
+:::{warning}
+Many of these CMake options are tied to configuration macros with a corresponding name in the source
+code. However, these configuration macros are not intended to be customized by users directly, since
+many of them require the library to be built with a matching configuration. If you don't build libc++
+yourself, you should not use the options documented here.
+:::
-.. option:: LIBCXX_ENABLE_FILESYSTEM:BOOL
+### General purpose options
- **Default**: ``ON``
+:::{option} LIBCXX_INSTALL_LIBRARY:BOOL
+**Default**: `ON`
- This option can be used to enable or disable the filesystem components on
- platforms that may not support them.
+Toggle the installation of the library portion of libc++.
+:::
-.. option:: LIBCXX_ENABLE_WIDE_CHARACTERS:BOOL
+:::{option} LIBCXX_INSTALL_HEADERS:BOOL
+**Default**: `ON`
- **Default**: ``ON``
+Toggle the installation of the libc++ headers.
+:::
- This option can be used to disable support for ``wchar_t`` in the library. It also
- allows the library to work on top of a C Standard Library that does not provide
- support for ``wchar_t``. This is especially useful in embedded settings where
- C Standard Libraries don't always provide all the usual bells and whistles.
+:::{option} LIBCXX_INSTALL_MODULES:BOOL
+**Default**: `ON`
-.. option:: LIBCXX_ENABLE_TIME_ZONE_DATABASE:BOOL
+Toggle the installation of the experimental libc++ module sources.
+:::
- **Default**: ``ON``
+:::{option} LIBCXX_ENABLE_SHARED:BOOL
+**Default**: `ON`
- Whether to include support for time zones in the library. Disabling
- time zone support can be useful when porting to platforms that don't
- ship the IANA time zone database. When time zones are not supported,
- time zone support in <chrono> will be disabled.
+Build libc++ as a shared library. Either `LIBCXX_ENABLE_SHARED` or
+`LIBCXX_ENABLE_STATIC` has to be enabled.
+:::
-.. option:: LIBCXX_INSTALL_LIBRARY_DIR:PATH
+:::{option} LIBCXX_ENABLE_STATIC:BOOL
+**Default**: `ON`
- **Default**: ``lib${LIBCXX_LIBDIR_SUFFIX}``
+Build libc++ as a static library. Either `LIBCXX_ENABLE_SHARED` or
+`LIBCXX_ENABLE_STATIC` has to be enabled.
+:::
- Path where built libc++ libraries should be installed. If a relative path,
- relative to ``CMAKE_INSTALL_PREFIX``.
+:::{option} LIBCXX_LIBDIR_SUFFIX:STRING
+Extra suffix to append to the directory where libraries are to be installed.
+This option overrides `LLVM_LIBDIR_SUFFIX`.
+:::
-.. option:: LIBCXX_INSTALL_INCLUDE_DIR:PATH
+:::{option} LIBCXX_HERMETIC_STATIC_LIBRARY:BOOL
+**Default**: `OFF`
- **Default**: ``include/c++/v1``
+Do not export any symbols from the static libc++ library.
+This is useful when the static libc++ library is being linked into shared
+libraries that may be used in with other shared libraries that use different
+C++ library. We want to avoid exporting any libc++ symbols in that case.
+:::
- Path where target-agnostic libc++ headers should be installed. If a relative
- path, relative to ``CMAKE_INSTALL_PREFIX``.
+:::{option} LIBCXX_ENABLE_FILESYSTEM:BOOL
+**Default**: `ON`
-.. option:: LIBCXX_INSTALL_INCLUDE_TARGET_DIR:PATH
+This option can be used to enable or disable the filesystem components on
+platforms that may not support them.
+:::
- **Default**: ``include/c++/v1`` or
- ``include/${LLVM_DEFAULT_TARGET_TRIPLE}/c++/v1``
+:::{option} LIBCXX_ENABLE_WIDE_CHARACTERS:BOOL
+**Default**: `ON`
- Path where target-specific libc++ headers should be installed. If a relative
- path, relative to ``CMAKE_INSTALL_PREFIX``.
+This option can be used to disable support for `wchar_t` in the library. It also
+allows the library to work on top of a C Standard Library that does not provide
+support for `wchar_t`. This is especially useful in embedded settings where
+C Standard Libraries don't always provide all the usual bells and whistles.
+:::
-.. option:: LIBCXX_SHARED_OUTPUT_NAME:STRING
+:::{option} LIBCXX_ENABLE_TIME_ZONE_DATABASE:BOOL
+**Default**: `ON`
- **Default**: ``c++``
+Whether to include support for time zones in the library. Disabling
+time zone support can be useful when porting to platforms that don't
+ship the IANA time zone database. When time zones are not supported,
+time zone support in \<chrono> will be disabled.
+:::
- Output name for the shared libc++ runtime library.
+:::{option} LIBCXX_INSTALL_LIBRARY_DIR:PATH
+**Default**: `lib${LIBCXX_LIBDIR_SUFFIX}`
-.. option:: {LIBCXX,LIBCXXABI,LIBUNWIND}_ADDITIONAL_COMPILE_FLAGS:STRING
+Path where built libc++ libraries should be installed. If a relative path,
+relative to `CMAKE_INSTALL_PREFIX`.
+:::
- **Default**: ``""``
+:::{option} LIBCXX_INSTALL_INCLUDE_DIR:PATH
+**Default**: `include/c++/v1`
- Additional compile flags to use when building the runtimes. This should be a CMake ``;``-delimited list of individual
- compiler options to use. For options that must be passed as-is to the compiler without deduplication (e.g.
- ``-Xclang -foo`` option groups), consider using ``SHELL:`` as `documented here <https://cmake.org/cmake/help/latest/command/add_compile_options.html#option-de-duplication>`_.
+Path where target-agnostic libc++ headers should be installed. If a relative
+path, relative to `CMAKE_INSTALL_PREFIX`.
+:::
-.. option:: LIBCXX_ADDITIONAL_LIBRARIES:STRING
+:::{option} LIBCXX_INSTALL_INCLUDE_TARGET_DIR:PATH
+**Default**: `include/c++/v1` or
+`include/${LLVM_DEFAULT_TARGET_TRIPLE}/c++/v1`
- **Default**: ``""``
+Path where target-specific libc++ headers should be installed. If a relative
+path, relative to `CMAKE_INSTALL_PREFIX`.
+:::
- Additional libraries libc++ is linked to which can be provided in cache.
+:::{option} LIBCXX_SHARED_OUTPUT_NAME:STRING
+**Default**: `c++`
-.. option:: LIBCXX_ENABLE_EXCEPTIONS:BOOL
+Output name for the shared libc++ runtime library.
+:::
- **Default**: ``ON``
+:::{option} {LIBCXX,LIBCXXABI,LIBUNWIND}_ADDITIONAL_COMPILE_FLAGS:STRING
+**Default**: `""`
- Build libc++ with exception support.
+Additional compile flags to use when building the runtimes. This should be a CMake `;`-delimited list of individual
+compiler options to use. For options that must be passed as-is to the compiler without deduplication (e.g.
+`-Xclang -foo` option groups), consider using `SHELL:` as [documented here](https://cmake.org/cmake/help/latest/command/add_compile_options.html#option-de-duplication).
+:::
-.. option:: LIBCXX_ENABLE_RTTI:BOOL
+:::{option} LIBCXX_ADDITIONAL_LIBRARIES:STRING
+**Default**: `""`
- **Default**: ``ON``
+Additional libraries libc++ is linked to which can be provided in cache.
+:::
- Build libc++ with run time type information.
- This option may only be set to OFF when LIBCXX_ENABLE_EXCEPTIONS=OFF.
+:::{option} LIBCXX_ENABLE_EXCEPTIONS:BOOL
+**Default**: `ON`
-.. option:: LIBCXX_INCLUDE_TESTS:BOOL
+Build libc++ with exception support.
+:::
- **Default**: ``ON`` (or value of ``LLVM_INCLUDE_TESTS``)
+:::{option} LIBCXX_ENABLE_RTTI:BOOL
+**Default**: `ON`
- Build the libc++ test suite, which includes various types of tests like conformance
- tests, vendor-specific tests and benchmarks.
+Build libc++ with run time type information.
+This option may only be set to OFF when LIBCXX_ENABLE_EXCEPTIONS=OFF.
+:::
-.. option:: LIBCXX_INCLUDE_BENCHMARKS:BOOL
+:::{option} LIBCXX_INCLUDE_TESTS:BOOL
+**Default**: `ON` (or value of `LLVM_INCLUDE_TESTS`)
- **Default**: ``ON``
+Build the libc++ test suite, which includes various types of tests like conformance
+tests, vendor-specific tests and benchmarks.
+:::
- Build the libc++ benchmark tests and the Google Benchmark library needed
- to support them.
+:::{option} LIBCXX_INCLUDE_BENCHMARKS:BOOL
+**Default**: `ON`
-.. option:: LIBCXX_ASSERTION_HANDLER_FILE:PATH
+Build the libc++ benchmark tests and the Google Benchmark library needed
+to support them.
+:::
- **Default**:: ``"${CMAKE_CURRENT_SOURCE_DIR}/vendor/llvm/default_assertion_handler.in"``
+:::{option} LIBCXX_ASSERTION_HANDLER_FILE:PATH
+**Default**:: `"${CMAKE_CURRENT_SOURCE_DIR}/vendor/llvm/default_assertion_handler.in"`
- Specify the path to a header that contains a custom implementation of the
- assertion handler that gets invoked when a hardening assertion fails. If
- provided, this header will be included by the library, replacing the
- default assertion handler. If this is specified as a relative path, it
- is assumed to be relative to ``<monorepo>/libcxx``.
+Specify the path to a header that contains a custom implementation of the
+assertion handler that gets invoked when a hardening assertion fails. If
+provided, this header will be included by the library, replacing the
+default assertion handler. If this is specified as a relative path, it
+is assumed to be relative to `<monorepo>/libcxx`.
+:::
-ABI Specific Options
---------------------
+### ABI Specific Options
The following options allow building libc++ for a different ABI version.
-.. option:: LIBCXX_ABI_VERSION:STRING
+:::{option} LIBCXX_ABI_VERSION:STRING
+**Default**: `1`
- **Default**: ``1``
+Defines the target ABI version of libc++.
+:::
- Defines the target ABI version of libc++.
+:::{option} LIBCXX_ABI_UNSTABLE:BOOL
+**Default**: `OFF`
-.. option:: LIBCXX_ABI_UNSTABLE:BOOL
+Build the "unstable" ABI version of libc++. Includes all ABI changing features
+on top of the current stable version.
+:::
- **Default**: ``OFF``
+::::{option} LIBCXX_ABI_NAMESPACE:STRING
+**Default**: `__n` where `n` is the current ABI version.
- Build the "unstable" ABI version of libc++. Includes all ABI changing features
- on top of the current stable version.
+This option defines the name of the inline ABI versioning namespace. It can be used for building
+custom versions of libc++ with unique symbol names in order to prevent conflicts or ODR issues
+with other libc++ versions.
-.. option:: LIBCXX_ABI_NAMESPACE:STRING
+:::{warning}
+When providing a custom namespace, it's the vendor's responsibility to ensure the name won't cause
+conflicts with other names defined by libc++, both now and in the future. In particular, inline
+namespaces of the form `__[0-9]+` could cause conflicts with future versions of the library,
+and so should be avoided.
+:::
+::::
- **Default**: ``__n`` where ``n`` is the current ABI version.
+:::{option} LIBCXX_ABI_DEFINES:STRING
+**Default**: `""`
- This option defines the name of the inline ABI versioning namespace. It can be used for building
- custom versions of libc++ with unique symbol names in order to prevent conflicts or ODR issues
- with other libc++ versions.
+A semicolon-separated list of ABI macros to persist in the site config header.
+See `include/__config` for the list of ABI macros.
+:::
- .. warning::
- When providing a custom namespace, it's the vendor's responsibility to ensure the name won't cause
- conflicts with other names defined by libc++, both now and in the future. In particular, inline
- namespaces of the form ``__[0-9]+`` could cause conflicts with future versions of the library,
- and so should be avoided.
+:::{option} LIBCXX_CXX_ABI:STRING
+**Values**: `none`, `libcxxabi`, `system-libcxxabi`, `libcxxrt`, `libstdc++`, `libsupc++`, `vcruntime`.
-.. option:: LIBCXX_ABI_DEFINES:STRING
+Select the ABI library to build libc++ against.
+:::
- **Default**: ``""``
+:::{option} LIBCXX_CXX_ABI_INCLUDE_PATHS:PATHS
+Provide additional search paths for the ABI library headers.
+:::
- A semicolon-separated list of ABI macros to persist in the site config header.
- See ``include/__config`` for the list of ABI macros.
+:::{option} LIBCXX_CXX_ABI_LIBRARY_PATH:PATH
+Provide the path to the ABI library that libc++ should link against. This is only
+useful when linking against an out-of-tree ABI library.
+:::
-.. option:: LIBCXX_CXX_ABI:STRING
+:::{option} LIBCXX_ENABLE_STATIC_ABI_LIBRARY:BOOL
+**Default**: `OFF`
- **Values**: ``none``, ``libcxxabi``, ``system-libcxxabi``, ``libcxxrt``, ``libstdc++``, ``libsupc++``, ``vcruntime``.
+If this option is enabled, libc++ will try and link the selected ABI library
+statically.
+:::
- Select the ABI library to build libc++ against.
+:::{option} LIBCXX_ENABLE_ABI_LINKER_SCRIPT:BOOL
+**Default**: `ON` by default on UNIX platforms other than Apple unless
+'LIBCXX_ENABLE_STATIC_ABI_LIBRARY' is ON. Otherwise the default value is `OFF`.
-.. option:: LIBCXX_CXX_ABI_INCLUDE_PATHS:PATHS
+This option generate and installs a linker script as `libc++.so` which
+links the correct ABI library.
+:::
- Provide additional search paths for the ABI library headers.
+:::{option} LIBCXX_AVAILABILITY_MINIMUM_HEADER_VERSION:STRING
+**Default**: `2`
-.. option:: LIBCXX_CXX_ABI_LIBRARY_PATH:PATH
+This option configures the oldest version of the libc++ headers that the built
+library has to be compatible with. See the
+{ref}`minimum header version documentation<MinimumHeaderVersion>` for details.
+:::
- Provide the path to the ABI library that libc++ should link against. This is only
- useful when linking against an out-of-tree ABI library.
+:::{option} LIBCXXABI_AVAILABILITY_MINIMUM_HEADER_VERSION:STRING
+**Default**: `2`
-.. option:: LIBCXX_ENABLE_STATIC_ABI_LIBRARY:BOOL
+This is the same as `LIBCXX_AVAILABILITY_MINIMUM_HEADER_VERSION` documented
+above, but for libc++abi. The two options should be set to the same value if
+libc++abi is used.
+:::
- **Default**: ``OFF``
+:::{option} LIBCXXABI_USE_LLVM_UNWINDER:BOOL
+**Default**: `ON`
- If this option is enabled, libc++ will try and link the selected ABI library
- statically.
+Build and use the LLVM unwinder. Note: This option can only be used when
+libc++abi is the C++ ABI library used.
+:::
-.. option:: LIBCXX_ENABLE_ABI_LINKER_SCRIPT:BOOL
+:::{option} LIBCXXABI_ADDITIONAL_LIBRARIES:STRING
+**Default**: `""`
- **Default**: ``ON`` by default on UNIX platforms other than Apple unless
- 'LIBCXX_ENABLE_STATIC_ABI_LIBRARY' is ON. Otherwise the default value is ``OFF``.
+Additional libraries libc++abi is linked to which can be provided in cache.
+:::
- This option generate and installs a linker script as ``libc++.so`` which
- links the correct ABI library.
+### LLVM-specific options
-.. option:: LIBCXX_AVAILABILITY_MINIMUM_HEADER_VERSION:STRING
+:::{option} LLVM_LIBDIR_SUFFIX:STRING
+Extra suffix to append to the directory where libraries are to be
+installed. On a 64-bit architecture, one could use `-DLLVM_LIBDIR_SUFFIX=64`
+to install libraries to `/usr/lib64`.
+:::
- **Default**: ``2``
+:::{option} LLVM_BUILD_32_BITS:BOOL
+Build 32-bits executables and libraries on 64-bits systems. This option is
+available only on some 64-bits Unix systems. Defaults to OFF.
+:::
- This option configures the oldest version of the libc++ headers that the built
- library has to be compatible with. See the
- :ref:`minimum header version documentation<MinimumHeaderVersion>` for details.
+:::{option} LLVM_LIT_ARGS:STRING
+Arguments given to lit. `make check` and `make clang-test` are affected.
+By default, `'-sv --no-progress-bar'` on Visual C++ and Xcode, `'-sv'` on
+others.
+:::
-.. option:: LIBCXXABI_AVAILABILITY_MINIMUM_HEADER_VERSION:STRING
-
- **Default**: ``2``
-
- This is the same as ``LIBCXX_AVAILABILITY_MINIMUM_HEADER_VERSION`` documented
- above, but for libc++abi. The two options should be set to the same value if
- libc++abi is used.
-
-.. option:: LIBCXXABI_USE_LLVM_UNWINDER:BOOL
-
- **Default**: ``ON``
-
- Build and use the LLVM unwinder. Note: This option can only be used when
- libc++abi is the C++ ABI library used.
-
-.. option:: LIBCXXABI_ADDITIONAL_LIBRARIES:STRING
-
- **Default**: ``""``
-
- Additional libraries libc++abi is linked to which can be provided in cache.
-
-LLVM-specific options
----------------------
-
-.. option:: LLVM_LIBDIR_SUFFIX:STRING
-
- Extra suffix to append to the directory where libraries are to be
- installed. On a 64-bit architecture, one could use ``-DLLVM_LIBDIR_SUFFIX=64``
- to install libraries to ``/usr/lib64``.
-
-.. option:: LLVM_BUILD_32_BITS:BOOL
-
- Build 32-bits executables and libraries on 64-bits systems. This option is
- available only on some 64-bits Unix systems. Defaults to OFF.
-
-.. option:: LLVM_LIT_ARGS:STRING
-
- Arguments given to lit. ``make check`` and ``make clang-test`` are affected.
- By default, ``'-sv --no-progress-bar'`` on Visual C++ and Xcode, ``'-sv'`` on
- others.
-
-
-Support for Windows
-===================
+## Support for Windows
Libc++ supports being built with clang-cl, but not with MSVC's cl.exe, as
-cl doesn't support the ``#include_next`` extension. Furthermore, VS 2017 or
+cl doesn't support the `#include_next` extension. Furthermore, VS 2017 or
newer (19.14) is required.
Libc++ also supports being built with clang targeting MinGW environments.
Libc++ supports Windows 7 or newer. However, the minimum runtime version
-of the build is determined by the ``_WIN32_WINNT`` define, which in many
+of the build is determined by the `_WIN32_WINNT` define, which in many
SDKs defaults to the latest version. To build a version that runs on an
-older version, define e.g. ``_WIN32_WINNT=0x601`` while building libc++,
+older version, define e.g. `_WIN32_WINNT=0x601` while building libc++,
to target Windows 7.
-CMake + Visual Studio
----------------------
+### CMake + Visual Studio
Building with Visual Studio currently does not permit running tests. However,
it is the simplest way to build.
-.. code-block:: batch
-
- > cmake -G "Visual Studio 16 2019" -S runtimes -B build ^
- -T "ClangCL" ^
- -DLLVM_ENABLE_RUNTIMES=libcxx ^
- -DLIBCXX_ENABLE_SHARED=YES ^
- -DLIBCXX_ENABLE_STATIC=NO
- > cmake --build build
+```batch
+> cmake -G "Visual Studio 16 2019" -S runtimes -B build ^
+ -T "ClangCL" ^
+ -DLLVM_ENABLE_RUNTIMES=libcxx ^
+ -DLIBCXX_ENABLE_SHARED=YES ^
+ -DLIBCXX_ENABLE_STATIC=NO
+> cmake --build build
+```
-CMake + ninja (MSVC)
---------------------
+### CMake + ninja (MSVC)
Building with ninja is required for development to enable tests.
A couple of tests require Bash to be available, and a couple dozens
@@ -432,76 +423,71 @@ can still be ran successfully.
If Git for Windows is available, that can be used to provide the bash
shell by adding the right bin directory to the path, e.g.
-``set PATH=%PATH%;C:\Program Files\Git\usr\bin``.
+`set PATH=%PATH%;C:\Program Files\Git\usr\bin`.
Alternatively, one can also choose to run the whole build in a MSYS2
shell. That can be set up e.g. by starting a Visual Studio Tools Command
Prompt (for getting the environment variables pointing to the headers and
import libraries), and making sure that clang-cl is available in the
path. From there, launch an MSYS2 shell via e.g.
-``C:\msys64\msys2_shell.cmd -full-path -mingw64`` (preserving the earlier
+`C:\msys64\msys2_shell.cmd -full-path -mingw64` (preserving the earlier
environment, allowing the MSVC headers/libraries and clang-cl to be found).
In either case, then run:
-.. code-block:: batch
-
- > cmake -G Ninja -S runtimes -B build ^
- -DCMAKE_C_COMPILER=clang-cl ^
- -DCMAKE_CXX_COMPILER=clang-cl ^
- -DLLVM_ENABLE_RUNTIMES=libcxx
- > ninja -C build cxx
- > ninja -C build check-cxx
+```batch
+> cmake -G Ninja -S runtimes -B build ^
+ -DCMAKE_C_COMPILER=clang-cl ^
+ -DCMAKE_CXX_COMPILER=clang-cl ^
+ -DLLVM_ENABLE_RUNTIMES=libcxx
+> ninja -C build cxx
+> ninja -C build check-cxx
+```
If you are running in an MSYS2 shell and you have installed the
MSYS2-provided clang package (which defaults to a non-MSVC target), you
-should add e.g. ``-DCMAKE_CXX_COMPILER_TARGET=x86_64-windows-msvc`` (replacing
-``x86_64`` with the architecture you're targeting) to the ``cmake`` command
-line above. This will instruct ``check-cxx`` to use the right target triple
-when invoking ``clang++``.
+should add e.g. `-DCMAKE_CXX_COMPILER_TARGET=x86_64-windows-msvc` (replacing
+`x86_64` with the architecture you're targeting) to the `cmake` command
+line above. This will instruct `check-cxx` to use the right target triple
+when invoking `clang++`.
-CMake + ninja (MinGW)
----------------------
+### CMake + ninja (MinGW)
libcxx can also be built in MinGW environments, e.g. with the MinGW
compilers in MSYS2. This requires clang to be available (installed with
-e.g. the ``mingw-w64-x86_64-clang`` package), together with CMake and ninja.
-
-.. code-block:: bash
+e.g. the `mingw-w64-x86_64-clang` package), together with CMake and ninja.
- > cmake -G Ninja -S runtimes -B build \
- -DCMAKE_C_COMPILER=clang \
- -DCMAKE_CXX_COMPILER=clang++ \
- -DLLVM_ENABLE_LLD=ON \
- -DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi;libunwind" \
- -DLIBCXXABI_ENABLE_SHARED=OFF \
- -DLIBCXX_ENABLE_STATIC_ABI_LIBRARY=ON
- > ninja -C build cxx
- > ninja -C build check-cxx
+```bash
+> cmake -G Ninja -S runtimes -B build \
+ -DCMAKE_C_COMPILER=clang \
+ -DCMAKE_CXX_COMPILER=clang++ \
+ -DLLVM_ENABLE_LLD=ON \
+ -DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi;libunwind" \
+ -DLIBCXXABI_ENABLE_SHARED=OFF \
+ -DLIBCXX_ENABLE_STATIC_ABI_LIBRARY=ON
+> ninja -C build cxx
+> ninja -C build check-cxx
+```
-.. _`libc++abi`: http://libcxxabi.llvm.org/
+(assertion-handler)=
-
-.. _assertion-handler:
-
-Overriding the default assertion handler
-========================================
+## Overriding the default assertion handler
When the library wants to terminate due to a hardening assertion failure, the
program is aborted by invoking a trap instruction (or in debug mode, by
a special verbose termination function that prints an error message and calls
-``std::abort()``). This is done to minimize the code size impact of enabling
+`std::abort()`). This is done to minimize the code size impact of enabling
hardening in the library. However, vendors can also override that mechanism at
CMake configuration time.
Under the hood, a hardening assertion will invoke the
-``_LIBCPP_ASSERTION_HANDLER`` macro upon failure. A vendor may provide a header
+`_LIBCPP_ASSERTION_HANDLER` macro upon failure. A vendor may provide a header
that contains a custom definition of this macro and specify the path to the
-header via the ``LIBCXX_ASSERTION_HANDLER_FILE`` CMake variable. If provided,
+header via the `LIBCXX_ASSERTION_HANDLER_FILE` CMake variable. If provided,
this header will be included by the library and replace the default
implementation. The header must not include any standard library headers
(directly or transitively) because doing so will almost always create a circular
-dependency. The ``_LIBCPP_ASSERTION_HANDLER(message)`` macro takes a single
+dependency. The `_LIBCPP_ASSERTION_HANDLER(message)` macro takes a single
parameter that contains an error message explaining the hardening failure and
some details about the source location that triggered it.
@@ -512,118 +498,109 @@ decides to avoid doing so (e.g. it chooses to log and continue instead), it does
so at its own risk -- this approach should only be used in non-production builds
and with an understanding of potential consequences. Furthermore, the custom
assertion handler should not throw any exceptions as it may be invoked from
-standard library functions that are marked ``noexcept`` (so throwing will result
-in ``std::terminate`` being called).
+standard library functions that are marked `noexcept` (so throwing will result
+in `std::terminate` being called).
+## Using Alternate ABI libraries
-Using Alternate ABI libraries
-=============================
-
-In order to implement various features like exceptions, RTTI, ``dynamic_cast`` and
+In order to implement various features like exceptions, RTTI, `dynamic_cast` and
more, libc++ requires what we refer to as an ABI library. Typically, that library
-implements the `Itanium C++ ABI <https://itanium-cxx-abi.github.io/cxx-abi/abi.html>`_.
+implements the [Itanium C++ ABI](https://itanium-cxx-abi.github.io/cxx-abi/abi.html).
By default, libc++ uses libc++abi as an ABI library. However, it is possible to use
other ABI libraries too.
-Using libsupc++ on Linux
-------------------------
+### Using libsupc++ on Linux
You will need libstdc++ in order to provide libsupc++.
Figure out where the libsupc++ headers are on your system. On Ubuntu this
-is ``/usr/include/c++/<version>`` and ``/usr/include/c++/<version>/<target-triple>``
+is `/usr/include/c++/<version>` and `/usr/include/c++/<version>/<target-triple>`
You can also figure this out by running
-.. code-block:: bash
-
- $ echo | g++ -Wp,-v -x c++ - -fsyntax-only
- ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"
- ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../x86_64-linux-gnu/include"
- #include "..." search starts here:
- #include <...> search starts here:
- /usr/include/c++/4.7
- /usr/include/c++/4.7/x86_64-linux-gnu
- /usr/include/c++/4.7/backward
- /usr/lib/gcc/x86_64-linux-gnu/4.7/include
- /usr/local/include
- /usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed
- /usr/include/x86_64-linux-gnu
- /usr/include
- End of search list.
+```bash
+$ echo | g++ -Wp,-v -x c++ - -fsyntax-only
+ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"
+ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../x86_64-linux-gnu/include"
+#include "..." search starts here:
+#include <...> search starts here:
+/usr/include/c++/4.7
+/usr/include/c++/4.7/x86_64-linux-gnu
+/usr/include/c++/4.7/backward
+/usr/lib/gcc/x86_64-linux-gnu/4.7/include
+/usr/local/include
+/usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed
+/usr/include/x86_64-linux-gnu
+/usr/include
+End of search list.
+```
Note that the first two entries happen to be what we are looking for. This
may not be correct on all platforms.
We can now run CMake:
-.. code-block:: bash
-
- $ cmake -G Ninja -S runtimes -B build \
- -DLLVM_ENABLE_RUNTIMES="libcxx" \
- -DLIBCXX_CXX_ABI=libstdc++ \
- -DLIBCXXABI_USE_LLVM_UNWINDER=OFF \
- -DLIBCXX_CXX_ABI_INCLUDE_PATHS="/usr/include/c++/4.7/;/usr/include/c++/4.7/x86_64-linux-gnu/"
- $ ninja -C build install-cxx
+```bash
+$ cmake -G Ninja -S runtimes -B build \
+ -DLLVM_ENABLE_RUNTIMES="libcxx" \
+ -DLIBCXX_CXX_ABI=libstdc++ \
+ -DLIBCXXABI_USE_LLVM_UNWINDER=OFF \
+ -DLIBCXX_CXX_ABI_INCLUDE_PATHS="/usr/include/c++/4.7/;/usr/include/c++/4.7/x86_64-linux-gnu/"
+$ ninja -C build install-cxx
+```
-
-You can also substitute ``-DLIBCXX_CXX_ABI=libsupc++``
+You can also substitute `-DLIBCXX_CXX_ABI=libsupc++`
above, which will cause the library to be linked to libsupc++ instead
of libstdc++, but this is only recommended if you know that you will
never need to link against libstdc++ in the same executable as libc++.
-GCC ships libsupc++ separately but only as a static library. If a
+GCC ships libsupc++ separately but only as a static library. If a
program also needs to link against libstdc++, it will provide its
own copy of libsupc++ and this can lead to subtle problems.
-Using libcxxrt on Linux
-------------------------
+### Using libcxxrt on Linux
-You will need to keep the source tree of `libcxxrt`_ available
+You will need to keep the source tree of [libcxxrt][libcxxrt] available
on your build machine and your copy of the libcxxrt shared library must
be placed where your linker will find it.
We can now run CMake like:
-.. code-block:: bash
-
- $ cmake -G Ninja -S runtimes -B build \
- -DLLVM_ENABLE_RUNTIMES="libcxx" \
- -DLIBCXX_CXX_ABI=libcxxrt \
- -DLIBCXX_ENABLE_NEW_DELETE_DEFINITIONS=ON \
- -DLIBCXXABI_USE_LLVM_UNWINDER=OFF \
- -DLIBCXX_CXX_ABI_INCLUDE_PATHS=path/to/libcxxrt-sources/src
- $ ninja -C build install-cxx
+```bash
+$ cmake -G Ninja -S runtimes -B build \
+ -DLLVM_ENABLE_RUNTIMES="libcxx" \
+ -DLIBCXX_CXX_ABI=libcxxrt \
+ -DLIBCXX_ENABLE_NEW_DELETE_DEFINITIONS=ON \
+ -DLIBCXXABI_USE_LLVM_UNWINDER=OFF \
+ -DLIBCXX_CXX_ABI_INCLUDE_PATHS=path/to/libcxxrt-sources/src
+$ ninja -C build install-cxx
+```
Unfortunately you can't simply run clang with "-stdlib=libc++" at this point, as
-clang is set up to link for libc++ linked to libsupc++. To get around this
-you'll have to set up your linker yourself (or patch clang). For example,
+clang is set up to link for libc++ linked to libsupc++. To get around this
+you'll have to set up your linker yourself (or patch clang). For example,
-.. code-block:: bash
-
- $ clang++ -stdlib=libc++ helloworld.cpp \
- -nodefaultlibs -lc++ -lcxxrt -lm -lc -lgcc_s -lgcc
+```bash
+$ clang++ -stdlib=libc++ helloworld.cpp \
+ -nodefaultlibs -lc++ -lcxxrt -lm -lc -lgcc_s -lgcc
+```
Alternately, you could just add libcxxrt to your libraries list, which in most
situations will give the same result:
-.. code-block:: bash
-
- $ clang++ -stdlib=libc++ helloworld.cpp -lcxxrt
+```bash
+$ clang++ -stdlib=libc++ helloworld.cpp -lcxxrt
+```
-.. _`libcxxrt`: https://github.com/libcxxrt/libcxxrt
+## libc++'s ABI guarantees
-libc++'s ABI guarantees
-=======================
+Libc++ provides several ABI guarantees, which are documented {ref}`here <ABIGuarantees>`.
-Libc++ provides several ABI guarantees, which are documented :ref:`here <ABIGuarantees>`.
-
-Availability Markup
-===================
+## Availability Markup
Libc++ is shipped by various vendors. In particular, it is used as a system library on macOS, iOS and other Apple
platforms. In order for users to be able to compile a binary that is intended to be deployed to an older version of a
-platform, Clang provides `availability attributes <https://clang.llvm.org/docs/AttributeReference.html#availability>`_.
+platform, Clang provides [availability attributes](https://clang.llvm.org/docs/AttributeReference.html#availability).
These attributes can be placed on declarations and are used to describe the life cycle of a symbol in the library.
The main goal is to ensure a compile-time error if a symbol that hasn't been introduced in a previously released library
@@ -641,36 +618,38 @@ This mechanism is general in nature, and any vendor can add their markup to the
feature is added that requires support in the shared library, two macros are added below to allow marking the feature as
unavailable:
-1. A macro named ``_LIBCPP_AVAILABILITY_HAS_<feature>`` which must be defined to ``_LIBCPP_INTRODUCED_IN_<version>`` for
+1. A macro named `_LIBCPP_AVAILABILITY_HAS_<feature>` which must be defined to `_LIBCPP_INTRODUCED_IN_<version>` for
the appropriate LLVM version.
-
-2. A macro named ``_LIBCPP_AVAILABILITY_<feature>``, which must be defined to ``_LIBCPP_INTRODUCED_IN_<version>_MARKUP``
+2. A macro named `_LIBCPP_AVAILABILITY_<feature>`, which must be defined to `_LIBCPP_INTRODUCED_IN_<version>_MARKUP`
for the appropriate LLVM version.
When vendors decide to ship the feature as part of their shared library, they can update the
-``_LIBCPP_INTRODUCED_IN_<version>`` macro (and the markup counterpart) based on the platform version they shipped that
+`_LIBCPP_INTRODUCED_IN_<version>` macro (and the markup counterpart) based on the platform version they shipped that
version of LLVM in. The library will then use this markup to provide an optimal user experience on these platforms.
Furthermore, many features in the standard library have corresponding feature-test macros. The
-``_LIBCPP_AVAILABILITY_HAS_<feature>`` macros are checked by the corresponding feature-test macros generated by
-``generate_feature_test_macro_components.py`` to ensure that the library doesn't announce a feature as being implemented
+`_LIBCPP_AVAILABILITY_HAS_<feature>` macros are checked by the corresponding feature-test macros generated by
+`generate_feature_test_macro_components.py` to ensure that the library doesn't announce a feature as being implemented
if it is unavailable on the deployment target.
Note that this mechanism is disabled by default in the "upstream" libc++. Availability annotations are only meaningful
when shipping libc++ inside a platform (i.e. as a system library), and so vendors that want them should turn those
annotations on at CMake configuration time.
-.. _MinimumHeaderVersion:
+(minimumheaderversion)=
-Minimum Header Version
-======================
+## Minimum Header Version
In libc++ we add new functions and remove the use of other functions in the built library on a regular basis. To avoid
breaking programs, we keep old functions in the built library as documented in our
-:ref:`header support policy<HeaderSupportPolicy>`. However, there are platforms where some of these functions could
+{ref}`header support policy<HeaderSupportPolicy>`. However, there are platforms where some of these functions could
never be referenced, because that platform never provided headers which referenced these functions. To reduce the size
of the built library on these platforms, libc++ provides the notion of a minimum header version. The minimum header
version describes the earliest version of the libc++ headers that can be used in a program linking against the library
currently being built. Functions which have never been referenced in headers since the minimum header version are
removed from the library. The minimum header version can be set with the CMake variables
-``LIBCXX_AVAILABILITY_MINIMUM_HEADER_VERSION`` and ``LIBCXXABI_AVAILABILITY_MINIMUM_HEADER_VERSION``.
+`LIBCXX_AVAILABILITY_MINIMUM_HEADER_VERSION` and `LIBCXXABI_AVAILABILITY_MINIMUM_HEADER_VERSION`.
+
+[libc++abi]: http://libcxxabi.llvm.org/
+[libcxxrt]: https://github.com/libcxxrt/libcxxrt
+
diff --git a/libcxx/docs/index.md b/libcxx/docs/index.md
index e4f337270231e..9a74d39a6c440 100644
--- a/libcxx/docs/index.md
+++ b/libcxx/docs/index.md
@@ -1,68 +1,62 @@
-.. _index:
+(index)=
-=============================
-"libc++" C++ Standard Library
-=============================
+# "libc++" C++ Standard Library
-Overview
-========
+## Overview
libc++ is a new implementation of the C++ standard library, targeting C++11 and
above.
-* Features and Goals
+- Features and Goals
- * Correctness as defined by the C++11 standard.
- * Fast execution.
- * Minimal memory use.
- * Fast compile times.
- * ABI compatibility with gcc's libstdc++ for some low-level features
+ - Correctness as defined by the C++11 standard.
+ - Fast execution.
+ - Minimal memory use.
+ - Fast compile times.
+ - ABI compatibility with gcc's libstdc++ for some low-level features
such as exception objects, rtti and memory allocation.
- * Extensive unit tests.
-
-* Design and Implementation:
-
- * Extensive unit tests
- * Internal linker model can be dumped/read to textual format
- * Additional linking features can be plugged in as "passes"
- * OS specific and CPU specific code factored out
-
-
-Getting Started with libc++
-===========================
-
-.. toctree::
- :maxdepth: 1
-
- ReleaseNotes
- UserDocumentation
- VendorDocumentation
- ABIGuarantees
- Contributing
- CodingGuidelines
- TestingLibcxx
- ImplementationDefinedBehavior
- Modules
- Hardening
- Status/Cxx17
- Status/Cxx20
- Status/Cxx23
- Status/Cxx26
- Status/Cxx29
-
-
-.. toctree::
- :hidden:
-
- AddingNewCIJobs
- Contributing/ReleaseProcedure
- Contributing/PostMeetingProcedure
- Contributing/NewStandardProcedure
- FeatureTestMacroTable
-
-
-Current Status
-==============
+ - Extensive unit tests.
+
+- Design and Implementation:
+
+ - Extensive unit tests
+ - Internal linker model can be dumped/read to textual format
+ - Additional linking features can be plugged in as "passes"
+ - OS specific and CPU specific code factored out
+
+## Getting Started with libc++
+
+```{toctree}
+:maxdepth: 1
+
+ReleaseNotes
+UserDocumentation
+VendorDocumentation
+ABIGuarantees
+Contributing
+CodingGuidelines
+TestingLibcxx
+ImplementationDefinedBehavior
+Modules
+Hardening
+Status/Cxx17
+Status/Cxx20
+Status/Cxx23
+Status/Cxx26
+Status/Cxx29
+```
+
+```{toctree}
+:hidden: true
+
+AddingNewCIJobs
+Contributing/ReleaseProcedure
+Contributing/PostMeetingProcedure
+Contributing/NewStandardProcedure
+FeatureTestMacroTable
+```
+
+## Current Status
libc++ has become the default C++ Standard Library implementation for many major platforms, including Apple's macOS,
iOS, watchOS, and tvOS, Google Search, the Android operating system, and FreeBSD. As a result, libc++ has an estimated
@@ -80,35 +74,32 @@ As an open-source project, libc++ benefits from a vibrant community of contribut
library and add new features. This ongoing development and support ensure that libc++ remains at the forefront of
C++ standardization efforts and continues to meet the evolving needs of C++ developers worldwide.
+### History
-History
--------
After its initial introduction, many people have asked "why start a new
library instead of contributing to an existing library?" (like Apache's
-libstdcxx, GNU's libstdc++, STLport, etc). There are many contributing
+libstdcxx, GNU's libstdc++, STLport, etc). There are many contributing
reasons, but some of the major ones are:
-* From years of experience (including having implemented the standard
+- From years of experience (including having implemented the standard
library before), we've learned many things about implementing
the standard containers which require ABI breakage and fundamental changes
- to how they are implemented. For example, it is generally accepted that
+ to how they are implemented. For example, it is generally accepted that
building std::string using the "short string optimization" instead of
using Copy On Write (COW) is a superior approach for multicore
- machines (particularly in C++11, which has rvalue references). Breaking
+ machines (particularly in C++11, which has rvalue references). Breaking
ABI compatibility with old versions of the library was
determined to be critical to achieving the performance goals of
libc++.
-
-* Mainline libstdc++ has switched to GPL3, a license which the developers
- of libc++ cannot use. libstdc++ 4.2 (the last GPL2 version) could be
+- Mainline libstdc++ has switched to GPL3, a license which the developers
+ of libc++ cannot use. libstdc++ 4.2 (the last GPL2 version) could be
independently extended to support C++11, but this would be a fork of the
codebase (which is often seen as worse for a project than starting a new
- independent one). Another problem with libstdc++ is that it is tightly
+ independent one). Another problem with libstdc++ is that it is tightly
integrated with G++ development, tending to be tied fairly closely to the
matching version of G++.
-
-* STLport and the Apache libstdcxx library are two other popular
- candidates, but both lack C++11 support. Our experience (and the
+- STLport and the Apache libstdcxx library are two other popular
+ candidates, but both lack C++11 support. Our experience (and the
experience of libstdc++ developers) is that adding support for C++11 (in
particular rvalue references and move-only types) requires changes to
almost every class and function, essentially amounting to a rewrite.
@@ -117,40 +108,34 @@ reasons, but some of the major ones are:
Further, both projects are apparently abandoned: STLport 5.2.1 was
released in Oct'08, and STDCXX 4.2.1 in May'08.
-..
- LLVM RELEASE bump version
+% LLVM RELEASE bump version
-.. _SupportedPlatforms:
+(supportedplatforms)=
-Platform and Compiler Support
-=============================
+## Platform and Compiler Support
Libc++ aims to support common compilers that implement the C++11 Standard. In order to strike a
good balance between stability for users and maintenance cost, testing coverage and development
velocity, libc++ drops support for older compilers as newer ones are released.
-============ =================== ========================== =====================
-Compiler Versions Restrictions Support policy
-============ =================== ========================== =====================
-Clang 21, 22, 23-git latest two stable releases per `LLVM's release page <https://releases.llvm.org>`_ and the development version
-AppleClang 26.4 latest stable release per `Xcode's release page <https://developer.apple.com/documentation/xcode-release-notes>`_
-Open XL 17.1.4 (AIX) latest stable release per `Open XL's documentation page <https://www.ibm.com/docs/en/openxl-c-and-cpp-aix>`_
-GCC 16 In C++11 or later only latest stable release per `GCC's release page <https://gcc.gnu.org/releases.html>`_
-============ =================== ========================== =====================
+| Compiler | Versions | Restrictions | Support policy |
+| ---------- | -------------- | ---------------------- | --------------------------------------------------------------------------------------------------------------- |
+| Clang | 21, 22, 23-git | | latest two stable releases per [LLVM's release page](https://releases.llvm.org) and the development version |
+| AppleClang | 26.4 | | latest stable release per [Xcode's release page](https://developer.apple.com/documentation/xcode-release-notes) |
+| Open XL | 17.1.4 (AIX) | | latest stable release per [Open XL's documentation page](https://www.ibm.com/docs/en/openxl-c-and-cpp-aix) |
+| GCC | 16 | In C++11 or later only | latest stable release per [GCC's release page](https://gcc.gnu.org/releases.html) |
Libc++ also supports common platforms and architectures:
-===================== ========================= ============================
-Target platform Target architecture Notes
-===================== ========================= ============================
-macOS 11.0+ i386, x86_64, arm64 Deployment target lower bound is the minimum between what Chrome resp. the last stable `Xcode release <https://developer.apple.com/support/xcode>`_ support
-FreeBSD 12+ i386, x86_64, arm
-Linux i386, x86_64, arm, arm64 Only glibc-2.24 and later and no other libc is officially supported
-Android 5.0+ i386, x86_64, arm, arm64
-Windows 7+ i386, x86_64, arm64 Both MSVC and MinGW style environments, ABI in MSVC environments is :doc:`unstable <DesignDocs/ABIVersioning>`
-AIX 7.2TL5+ powerpc, powerpc64
-Embedded (picolibc) arm
-===================== ========================= ============================
+| Target platform | Target architecture | Notes |
+| ------------------- | ------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| macOS 11.0+ | i386, x86_64, arm64 | Deployment target lower bound is the minimum between what Chrome resp. the last stable [Xcode release](https://developer.apple.com/support/xcode) support |
+| FreeBSD 12+ | i386, x86_64, arm | |
+| Linux | i386, x86_64, arm, arm64 | Only glibc-2.24 and later and no other libc is officially supported |
+| Android 5.0+ | i386, x86_64, arm, arm64 | |
+| Windows 7+ | i386, x86_64, arm64 | Both MSVC and MinGW style environments, ABI in MSVC environments is {doc}`unstable <DesignDocs/ABIVersioning>` |
+| AIX 7.2TL5+ | powerpc, powerpc64 | |
+| Embedded (picolibc) | arm | |
Generally speaking, libc++ should work on any platform that provides a fairly complete
C Standard Library. It is also possible to turn off parts of the library for use on
@@ -165,90 +150,84 @@ we don't make any guarantees. If you would like your compiler and/or platform
to be formally supported and listed here, please work with the libc++ team to set
up testing for your configuration.
-.. _HeaderSupportPolicy:
+(headersupportpolicy)=
Libc++ maintains backwards compatibility with programs compiled against older
versions of the headers. The library can currently be configured by vendors to
support headers from LLVM 2.8 or any later major release.
-C++ Standards Conformance
-=========================
+## C++ Standards Conformance
Libc++ provides full support for C++11 and C++14, and provides most of newer standards
with a few omissions. The conformance status of the library's tip is tracked in real-time
-using `this page <https://github.com/orgs/llvm/projects/31>`_. The conformance status of
+using [this page](https://github.com/orgs/llvm/projects/31). The conformance status of
this release is described in the pages below:
-* C++11 - Complete
-* C++14 - Complete
-* :ref:`C++17 - In Progress <cxx17-status>`
-* :ref:`C++20 - In Progress <cxx20-status>`
-* :ref:`C++23 - In Progress <cxx23-status>`
-* :ref:`C++26 - In Progress <cxx26-status>`
-* :ref:`C++29 - In Progress <cxx29-status>`
-* :ref:`C++ Feature Test Macro Status <feature-status>`
-
+- C++11 - Complete
+- C++14 - Complete
+- {ref}`C++17 - In Progress <cxx17-status>`
+- {ref}`C++20 - In Progress <cxx20-status>`
+- {ref}`C++23 - In Progress <cxx23-status>`
+- {ref}`C++26 - In Progress <cxx26-status>`
+- {ref}`C++29 - In Progress <cxx29-status>`
+- {ref}`C++ Feature Test Macro Status <feature-status>`
-Getting Involved
-================
+## Getting Involved
-First please review our `Developer's Policy <https://llvm.org/docs/DeveloperPolicy.html>`__
-and `Getting started with LLVM <https://llvm.org/docs/GettingStarted.html>`__.
+First please review our [Developer's Policy](https://llvm.org/docs/DeveloperPolicy.html)
+and [Getting started with LLVM](https://llvm.org/docs/GettingStarted.html).
**Bug Reports**
-If you think you've found a bug in libc++, please report it using the `LLVM bug tracker`_.
-If you're not sure, you can ask for support on the `libc++ forum`_ or in the `libc++ chat`_.
+If you think you've found a bug in libc++, please report it using the [LLVM bug tracker].
+If you're not sure, you can ask for support on the [libc++ forum] or in the [libc++ chat].
**Patches**
If you want to contribute a patch to libc++, please start by reviewing our
-:ref:`documentation about contributing <ContributingToLibcxx>`.
+{ref}`documentation about contributing <ContributingToLibcxx>`.
**Discussion and Questions**
-Send discussions and questions to the `libc++ forum`_.
-
-
-Design Documents
-================
-
-.. toctree::
- :maxdepth: 1
-
- DesignDocs/ABIVersioning
- DesignDocs/AtomicDesign
- DesignDocs/CapturingConfigInfo
- DesignDocs/ExperimentalFeatures
- DesignDocs/ExtendedCXX03Support
- DesignDocs/FeatureTestMacros
- DesignDocs/FileTimeType
- DesignDocs/HeaderRemovalPolicy
- DesignDocs/NoexceptPolicy
- DesignDocs/PSTLIntegration
- DesignDocs/ThreadingSupportAPI
- DesignDocs/UniquePtrTrivialAbi
- DesignDocs/UnspecifiedBehaviorRandomization
- DesignDocs/VisibilityMacros
- DesignDocs/TimeZone
- DesignDocs/WindowsSupport
-
-
-Build Bots and Test Coverage
-============================
-
-* `Github Actions CI pipeline <https://github.com/llvm/llvm-project/actions/workflows/libcxx-pr-conformance-tests.yaml>`_
-* `Buildkite CI pipeline <https://buildkite.com/llvm-project/libcxx-ci>`_
-* `LLVM Buildbot Builders <https://lab.llvm.org/buildbot>`_
-* :ref:`Adding New CI Jobs <AddingNewCIJobs>`
-
-
-Quick Links
-===========
-* `LLVM Homepage <https://llvm.org/>`_
-* `libc++abi Homepage <http://libcxxabi.llvm.org/>`_
-* `LLVM Bug Tracker <https://github.com/llvm/llvm-project/labels/libc++/>`_
-* `libcxx-commits Mailing List <http://lists.llvm.org/mailman/listinfo/libcxx-commits>`_
-* `libc++ forum <https://discourse.llvm.org/c/runtimes/libcxx/>`_
-* `libc++ chat <https://discord.com/channels/636084430946959380/636732894974312448>`_ (`invite link <https://discord.gg/xS7Z362>`_)
-* `Browse libc++ Sources <https://github.com/llvm/llvm-project/tree/main/libcxx/>`_
+Send discussions and questions to the [libc++ forum].
+
+## Design Documents
+
+```{toctree}
+:maxdepth: 1
+
+DesignDocs/ABIVersioning
+DesignDocs/AtomicDesign
+DesignDocs/CapturingConfigInfo
+DesignDocs/ExperimentalFeatures
+DesignDocs/ExtendedCXX03Support
+DesignDocs/FeatureTestMacros
+DesignDocs/FileTimeType
+DesignDocs/HeaderRemovalPolicy
+DesignDocs/NoexceptPolicy
+DesignDocs/PSTLIntegration
+DesignDocs/ThreadingSupportAPI
+DesignDocs/UniquePtrTrivialAbi
+DesignDocs/UnspecifiedBehaviorRandomization
+DesignDocs/VisibilityMacros
+DesignDocs/TimeZone
+DesignDocs/WindowsSupport
+```
+
+## Build Bots and Test Coverage
+
+- [Github Actions CI pipeline](https://github.com/llvm/llvm-project/actions/workflows/libcxx-pr-conformance-tests.yaml)
+- [Buildkite CI pipeline](https://buildkite.com/llvm-project/libcxx-ci)
+- [LLVM Buildbot Builders](https://lab.llvm.org/buildbot)
+- {ref}`Adding New CI Jobs <AddingNewCIJobs>`
+
+## Quick Links
+
+- [LLVM Homepage](https://llvm.org/)
+- [libc++abi Homepage](http://libcxxabi.llvm.org/)
+- [LLVM Bug Tracker](https://github.com/llvm/llvm-project/labels/libc++/)
+- [libcxx-commits Mailing List](http://lists.llvm.org/mailman/listinfo/libcxx-commits)
+- [libc++ forum](https://discourse.llvm.org/c/runtimes/libcxx/)
+- [libc++ chat](https://discord.com/channels/636084430946959380/636732894974312448) ([invite link](https://discord.gg/xS7Z362))
+- [Browse libc++ Sources](https://github.com/llvm/llvm-project/tree/main/libcxx/)
+
>From 1ac82ccfa55c6d0858a031ad00e32e0eb3bc2178 Mon Sep 17 00:00:00 2001
From: Reid Kleckner <rkleckner at nvidia.com>
Date: Sat, 5 Sep 2026 04:10:05 +0000
Subject: [PATCH 2/2] [libc++][docs] Finish MyST migration
---
libcxx/docs/ABIGuarantees.md | 73 +-
libcxx/docs/AddingNewCIJobs.md | 5 +-
libcxx/docs/CMakeLists.txt | 3 +
libcxx/docs/CodingGuidelines.md | 10 +-
libcxx/docs/Contributing.md | 5 +-
libcxx/docs/DesignDocs/AtomicDesign.md | 3 +-
.../docs/DesignDocs/ExperimentalFeatures.md | 7 +-
.../docs/DesignDocs/ExtendedCXX03Support.md | 5 +-
libcxx/docs/DesignDocs/FeatureTestMacros.md | 17 +-
libcxx/docs/DesignDocs/UniquePtrTrivialAbi.md | 3 +-
.../UnspecifiedBehaviorRandomization.md | 3 +-
libcxx/docs/DesignDocs/VisibilityMacros.md | 31 +-
libcxx/docs/FeatureTestMacroTable.md | 4 +-
libcxx/docs/Hardening.md | 290 ++++----
libcxx/docs/Helpers/ReleaseNotesTemplate.md | 5 +-
libcxx/docs/Helpers/Styles.md | 43 --
libcxx/docs/Modules.md | 103 ++-
libcxx/docs/ReleaseNotes.md | 4 +-
libcxx/docs/ReleaseNotes/20.md | 5 +-
libcxx/docs/ReleaseNotes/21.md | 11 +-
libcxx/docs/ReleaseNotes/23.md | 5 +-
libcxx/docs/Status/Cxx17.md | 37 +-
libcxx/docs/Status/Cxx17Issues.csv | 614 ++++++++--------
libcxx/docs/Status/Cxx17Papers.csv | 210 +++---
libcxx/docs/Status/Cxx20.md | 37 +-
libcxx/docs/Status/Cxx20Issues.csv | 584 +++++++--------
libcxx/docs/Status/Cxx20Papers.csv | 386 +++++-----
libcxx/docs/Status/Cxx23.md | 37 +-
libcxx/docs/Status/Cxx23Issues.csv | 600 ++++++++--------
libcxx/docs/Status/Cxx23Papers.csv | 228 +++---
libcxx/docs/Status/Cxx26.md | 37 +-
libcxx/docs/Status/Cxx26Issues.csv | 674 +++++++++---------
libcxx/docs/Status/Cxx26Papers.csv | 416 +++++------
libcxx/docs/Status/Cxx29.md | 31 +-
libcxx/docs/Status/Cxx29Issues.csv | 38 +-
libcxx/docs/Status/Cxx29Papers.csv | 42 +-
libcxx/docs/TestingLibcxx.md | 31 +-
libcxx/docs/UserDocumentation.md | 124 ++--
libcxx/docs/VendorDocumentation.md | 5 +-
libcxx/docs/conf.py | 25 +-
libcxx/docs/index.md | 9 +-
.../generate_feature_test_macro_components.py | 136 ++--
42 files changed, 2475 insertions(+), 2461 deletions(-)
diff --git a/libcxx/docs/ABIGuarantees.md b/libcxx/docs/ABIGuarantees.md
index 6e94a2159764e..6fa1fa0513979 100644
--- a/libcxx/docs/ABIGuarantees.md
+++ b/libcxx/docs/ABIGuarantees.md
@@ -60,51 +60,50 @@ Changes the layout of {cpp:type}`std::vector` from pointer-based to size-based.
libc++ supports two different data layouts for {cpp:type}`std::vector`:
-```{eval-rst}
-.. list-table::
- :header-rows: 1
+:::{list-table}
+:header-rows: 1
- * - **Layout**
- - ABI
- - Description
- * - Pointer-based layout
- - Stable ABI (default)
- - :cpp:type:`std::vector` uses three pointers to manage its state:
+* - **Layout**
+ - ABI
+ - Description
+* - Pointer-based layout
+ - Stable ABI (default)
+ - {cpp:type}`std::vector` uses three pointers to manage its state:
- * A pointer to the beginning of the buffer (:cpp:expr:`begin_`);
- * A pointer to where the next element should be inserted (:cpp:expr:`end_`); and
- * A pointer to the end of the buffer (:cpp:expr:`cap_`).
+ * A pointer to the beginning of the buffer ({cpp:expr}`begin_`);
+ * A pointer to where the next element should be inserted ({cpp:expr}`end_`); and
+ * A pointer to the end of the buffer ({cpp:expr}`cap_`).
- This layout causes :cpp:type:`vector`'s implementation details to be pointer-oriented.
- The following methods are of particular interest:
+ This layout causes {cpp:type}`vector`'s implementation details to be pointer-oriented.
+ The following methods are of particular interest:
- * :cpp:expr:`vector::size()` returns :cpp:expr:`end_ - begin_`;
- * :cpp:expr:`vector::capacity()` returns :cpp:expr:`cap_ - begin_`; and
- * :cpp:expr:`vector::end()` returns :cpp:expr:`end_`.
+ * {cpp:expr}`vector::size()` returns {cpp:expr}`end_ - begin_`;
+ * {cpp:expr}`vector::capacity()` returns {cpp:expr}`cap_ - begin_`; and
+ * {cpp:expr}`vector::end()` returns {cpp:expr}`end_`.
- This is the original layout for libc++'s :cpp:type:`std::vector` implementation, and
- is the default layout as a result.
+ This is the original layout for libc++'s {cpp:type}`std::vector` implementation, and
+ is the default layout as a result.
- * - Size-based layout
- - Unstable ABI (opt-in)
- - :cpp:type:`std::vector` uses a pointer and two integers to manage its state:
+* - Size-based layout
+ - Unstable ABI (opt-in)
+ - {cpp:type}`std::vector` uses a pointer and two integers to manage its state:
- * A pointer to the beginning of the buffer (:cpp:expr:`begin_`);
- * An integer storing how many elements are in the vector (:cpp:expr:`size_`); and
- * An integer storing how many elements the vector can potentially hold before needing
- to reallocate (:cpp:expr:`capacity_`).
+ * A pointer to the beginning of the buffer ({cpp:expr}`begin_`);
+ * An integer storing how many elements are in the vector ({cpp:expr}`size_`); and
+ * An integer storing how many elements the vector can potentially hold before needing
+ to reallocate ({cpp:expr}`capacity_`).
- This layout causes :cpp:type:`vector`'s implementation details to be integer-oriented.
- The following methods are of particular interest:
+ This layout causes {cpp:type}`vector`'s implementation details to be integer-oriented.
+ The following methods are of particular interest:
- * :cpp:expr:`vector::size()` returns :cpp:expr:`size_`;
- * :cpp:expr:`vector::capacity()` returns :cpp:expr:`cap_`; and
- * :cpp:expr:`vector::end()` returns :cpp:expr:`begin_ + size_`.
+ * {cpp:expr}`vector::size()` returns {cpp:expr}`size_`;
+ * {cpp:expr}`vector::capacity()` returns {cpp:expr}`cap_`; and
+ * {cpp:expr}`vector::end()` returns {cpp:expr}`begin_ + size_`.
- This layout is opt-in, and is incompatible with the pointer-based layout. It has the
- potential for significant performance improvements, especially when combined with
- :ref:`hardening`.
-```
+ This layout is opt-in, and is incompatible with the pointer-based layout. It has the
+ potential for significant performance improvements, especially when combined with
+ {ref}`hardening`.
+:::
### `_LIBCPP_ABI_NO_RANDOM_DEVICE_COMPATIBILITY_LAYOUT`
@@ -145,8 +144,8 @@ flags like `-fexceptions`, which **do** change the observable behaviour. libc++
compiled with specific flags only and makes no guarantees for any of the flags not listed below.
The flags allowed (in any combination) are:
-\- `-f[no-]exceptions`
-\- `-D_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE{_FAST,_EXTENSIVE,_DEBUG,_NONE}`
+- `-f[no-]exceptions`
+- `-D_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE{_FAST,_EXTENSIVE,_DEBUG,_NONE}`
Note that this does not provide any guarantees about user-defined functions, but only that the libc++ functions linked
behave as the flags say.
diff --git a/libcxx/docs/AddingNewCIJobs.md b/libcxx/docs/AddingNewCIJobs.md
index 2e059a750b782..02de072a7a42b 100644
--- a/libcxx/docs/AddingNewCIJobs.md
+++ b/libcxx/docs/AddingNewCIJobs.md
@@ -2,9 +2,9 @@
# Adding New CI Jobs
-```{contents}
+:::{contents}
:local: true
-```
+:::
## Adding The Job
@@ -66,4 +66,3 @@ order to avoid flaky failures, which reduce the value of CI for everyone.
We may be reluctant to add and support CI jobs that take a long time to finish
or that are too flaky.
-
diff --git a/libcxx/docs/CMakeLists.txt b/libcxx/docs/CMakeLists.txt
index d679761a5adb0..7e79fffe8d3b8 100644
--- a/libcxx/docs/CMakeLists.txt
+++ b/libcxx/docs/CMakeLists.txt
@@ -5,5 +5,8 @@ if (LLVM_ENABLE_SPHINX)
if (${SPHINX_OUTPUT_HTML})
add_sphinx_target(html libcxx)
endif()
+ if (${SPHINX_OUTPUT_MAN})
+ add_sphinx_target(man libcxx)
+ endif()
endif()
endif()
diff --git a/libcxx/docs/CodingGuidelines.md b/libcxx/docs/CodingGuidelines.md
index 266ed0f291d04..11e2404407a60 100644
--- a/libcxx/docs/CodingGuidelines.md
+++ b/libcxx/docs/CodingGuidelines.md
@@ -137,7 +137,7 @@ possible. They do force more eager evaluation though, which can be a problem in
## Apply `[[nodiscard]]` where relevant
-Libc++ adds `[[nodiscard]]` whenever relevant to catch potential bugs. The standards committee has decided to \_not\_
+Libc++ adds `[[nodiscard]]` whenever relevant to catch potential bugs. The standards committee has decided to *not*
have a recommended practice where to put them, so libc++ applies it whenever it makes sense to catch potential bugs.
`[[nodiscard]]` should be applied to functions
@@ -163,9 +163,10 @@ have a recommended practice where to put them, so libc++ applies it whenever it
in the presence of future optimizations.
`[[nodiscard]]` should not be applied to functions if Clang already diagnoses unused results, for example:
-\- conversion functions
-\- equality operators
-\- relational operators
+
+- conversion functions
+- equality operators
+- relational operators
Applications of `[[nodiscard]]` are code like any other code, so we aim to test them on public interfaces. This can be
done with a `.verify.cpp` test. Many examples are available. Just look for tests with the suffix
@@ -209,4 +210,3 @@ after the function they are measuring, with a few transformations to help filter
When multiple benchmarks measure the same function under different circumstances, we add context as a parenthesis
after the function signature. For example, `std::vector<bool>::ctor(Self&&, const allocator_type&) (equal allocators)`
would be the allocator-aware move constructor for `std::vector<bool>` in the case of equal allocators.
-
diff --git a/libcxx/docs/Contributing.md b/libcxx/docs/Contributing.md
index e3bb5d5bb9ba7..f30fcd558b7f9 100644
--- a/libcxx/docs/Contributing.md
+++ b/libcxx/docs/Contributing.md
@@ -154,7 +154,7 @@ updated list from the failed build at
Look for the failed build and select the `artifacts` tab. There, download the
abilist for the platform, e.g.:
-- C++\<version>.
+- `C++<version>`.
- macOS X86_64 and macOS arm64 for the Apple platform.
## Pre-commit CI
@@ -182,7 +182,7 @@ are used to build libc++ and execute its tests.
Unless specified otherwise, the configurations:
- use a nightly build of the `main` branch of Clang,
-- execute the tests using the language C++\<latest>. This is the version
+- execute the tests using the language `C++<latest>`. This is the version
"developed" by the C++ committee.
:::{note}
@@ -336,4 +336,3 @@ Contains the jobs executed in the CI. This file contains the version
information of the jobs being executed. Since this script differs between the
`main` and `release` branch, both branches can use different compiler
versions.
-
diff --git a/libcxx/docs/DesignDocs/AtomicDesign.md b/libcxx/docs/DesignDocs/AtomicDesign.md
index 9a6ba94e5196d..7a378da85eedf 100644
--- a/libcxx/docs/DesignDocs/AtomicDesign.md
+++ b/libcxx/docs/DesignDocs/AtomicDesign.md
@@ -491,7 +491,7 @@ Where:
the library defines `__atomic_flag__` as a typedef to `bool`.
- To communicate that the above intrinsics are available, the compiler must
arrange for `__has_feature` to return 1 when fed the intrinsic name
- appended with an '\_' and the mangled type name of `__atomic_flag__`.
+ appended with an '_' and the mangled type name of `__atomic_flag__`.
For example if `__atomic_flag__` is `unsigned int`:
@@ -788,4 +788,3 @@ void bar() { return A.compare_exchange_strong(y, z); }
If only **one** of these calls to `compare_exchange_strong` is implemented with
mutex-locked code, then that mutex-locked code will not be executed mutually
exclusively of the one implemented in a lock-free manner.
-
diff --git a/libcxx/docs/DesignDocs/ExperimentalFeatures.md b/libcxx/docs/DesignDocs/ExperimentalFeatures.md
index 8522383c8bc3d..5d611f2ca80f5 100644
--- a/libcxx/docs/DesignDocs/ExperimentalFeatures.md
+++ b/libcxx/docs/DesignDocs/ExperimentalFeatures.md
@@ -1,10 +1,10 @@
# Experimental Features
-```{contents}
+:::{contents}
:local: true
-```
+:::
-(experimental-features-1)=
+(experimental features)=
## Overview
@@ -188,4 +188,3 @@ We have not yet shipped an implementation of the Concurrency TS.
% | 4 | Atomic Smart Pointers | | | Adopted for C++20 |
% +---------+-------------------------------------------------------+--------------------+------------------------------------------+-------------------------+
-
diff --git a/libcxx/docs/DesignDocs/ExtendedCXX03Support.md b/libcxx/docs/DesignDocs/ExtendedCXX03Support.md
index 40911fd6a2a3c..f71742182eeef 100644
--- a/libcxx/docs/DesignDocs/ExtendedCXX03Support.md
+++ b/libcxx/docs/DesignDocs/ExtendedCXX03Support.md
@@ -1,8 +1,8 @@
# Extended C++03 Support
-```{contents}
+:::{contents}
:local: true
-```
+:::
## Overview
@@ -43,4 +43,3 @@ in new code.
This section will be updated once the libc++ developer community has further discussed the
future of C++03 with libc++.
:::
-
diff --git a/libcxx/docs/DesignDocs/FeatureTestMacros.md b/libcxx/docs/DesignDocs/FeatureTestMacros.md
index 8799442319028..7aeadf7dfc794 100644
--- a/libcxx/docs/DesignDocs/FeatureTestMacros.md
+++ b/libcxx/docs/DesignDocs/FeatureTestMacros.md
@@ -1,8 +1,8 @@
# Feature Test Macros
-```{contents}
+:::{contents}
:local: true
-```
+:::
## Overview
@@ -18,22 +18,21 @@ different dialects, and they may or may not be implemented by libc++. In order t
track all of these conditions correctly and easily, we want a Single Source of
Truth (SSoT) that defines each feature test macro, its values, the headers it
lives in, and whether or not it is implemented by libc++. From this SSoA we
-have enough information to automatically generate the `<version>` header,
+have enough information to automatically generate the {title-reference}`<version>` header,
the tests, and the documentation.
-Therefore we maintain a SSoA in `libcxx/utils/generate_feature_test_macro_components.py`
+Therefore we maintain a SSoA in {title-reference}`libcxx/utils/generate_feature_test_macro_components.py`
which doubles as a script to generate the following components:
-- The `<version>` header.
-- The version tests under `support.limits.general`.
+- The {title-reference}`<version>` header.
+- The version tests under {title-reference}`support.limits.general`.
- Documentation of libc++'s implementation of each macro.
## Usage
-The `generate_feature_test_macro_components.py` script is used to track and
+The {title-reference}`generate_feature_test_macro_components.py` script is used to track and
update feature test macros in libc++.
Whenever a feature test macro is added or changed, the table should be updated
and the script should be re-ran. The script will clobber the existing test files,
-the documentation and the `<version>` header.
-
+the documentation and the {title-reference}`<version>` header.
diff --git a/libcxx/docs/DesignDocs/UniquePtrTrivialAbi.md b/libcxx/docs/DesignDocs/UniquePtrTrivialAbi.md
index 92df3ba1abe0b..af65c7bd6e32f 100644
--- a/libcxx/docs/DesignDocs/UniquePtrTrivialAbi.md
+++ b/libcxx/docs/DesignDocs/UniquePtrTrivialAbi.md
@@ -55,7 +55,7 @@ Google has measured performance improvements of up to 1.6% on some large server
This also affects null pointer optimization
-Clang's optimizer can now figure out when a `std::unique_ptr` is known to contain *non*-null.
+Clang's optimizer can now figure out when a {title-reference}`std::unique_ptr` is known to contain *non*-null.
(Actually, this has been a *missed* optimization all along.)
```cpp
@@ -129,4 +129,3 @@ The following breakages were discovered by enabling this change and fixing the r
> In other words, `&foo` in callee and `&foo` in the caller are the same address.
ASAN can be used to detect both of these.
-
diff --git a/libcxx/docs/DesignDocs/UnspecifiedBehaviorRandomization.md b/libcxx/docs/DesignDocs/UnspecifiedBehaviorRandomization.md
index 9a82c8b3c8239..4d608cc1dabd2 100644
--- a/libcxx/docs/DesignDocs/UnspecifiedBehaviorRandomization.md
+++ b/libcxx/docs/DesignDocs/UnspecifiedBehaviorRandomization.md
@@ -24,7 +24,7 @@ algorithms and optimizations to the containers.
For example, as of LLVM version 13, libcxx sorting algorithm takes
[O(n^2) worst case](https://llvm.org/PR20837) but according
-to the standard its worst case should be `O(n log n)`. This effort helps users
+to the standard its worst case should be {title-reference}`O(n log n)`. This effort helps users
to gradually fix their tests while updating to new faster algorithms.
## Design
@@ -74,4 +74,3 @@ results, for example, for caching.
: partition
Patches welcome.
-
diff --git a/libcxx/docs/DesignDocs/VisibilityMacros.md b/libcxx/docs/DesignDocs/VisibilityMacros.md
index 8e41ca9d00277..9ea35d82b2b70 100644
--- a/libcxx/docs/DesignDocs/VisibilityMacros.md
+++ b/libcxx/docs/DesignDocs/VisibilityMacros.md
@@ -29,7 +29,7 @@ default visibility, thus removing the need for any annotations.
: Mark a symbol as being part of our ABI. This includes functions that are part
of the libc++ library, type information and other symbols. On Windows,
- this macro applies `dllimport`/`dllexport` to the symbol, and on other
+ this macro applies {title-reference}`dllimport`/{title-reference}`dllexport` to the symbol, and on other
platforms it gives the symbol default visibility. This macro should never be
used on class templates. On classes it should only be used if the vtable
lives in the built library.
@@ -37,14 +37,14 @@ default visibility, thus removing the need for any annotations.
**\_LIBCPP_OVERRIDABLE_FUNC_VIS**
: Mark a symbol as being exported by the libc++ library, but allow it to be
- overridden locally. On non-Windows, this is equivalent to `_LIBCPP_FUNC_VIS`.
- This macro is applied to all `operator new` and `operator delete` overloads.
-
- **Windows Behavior**: Any symbol marked `dllimport` cannot be overridden
- locally, since `dllimport` indicates the symbol should be bound to a separate
- DLL. All `operator new` and `operator delete` overloads are required to be
- locally overridable, and therefore must not be marked `dllimport`. On Windows,
- this macro therefore expands to `__declspec(dllexport)` when building the
+ overridden locally. On non-Windows, this is equivalent to {title-reference}`_LIBCPP_FUNC_VIS`.
+ This macro is applied to all {title-reference}`operator new` and {title-reference}`operator delete` overloads.
+
+ **Windows Behavior**: Any symbol marked {title-reference}`dllimport` cannot be overridden
+ locally, since {title-reference}`dllimport` indicates the symbol should be bound to a separate
+ DLL. All {title-reference}`operator new` and {title-reference}`operator delete` overloads are required to be
+ locally overridable, and therefore must not be marked {title-reference}`dllimport`. On Windows,
+ this macro therefore expands to {title-reference}`__declspec(dllexport)` when building the
library and has an empty definition otherwise.
**\_LIBCPP_HIDE_FROM_ABI**
@@ -54,7 +54,7 @@ default visibility, thus removing the need for any annotations.
**\_LIBCPP_HIDE_FROM_ABI_AFTER_V1**
-: Mark a function as being hidden from the ABI (per `_LIBCPP_HIDE_FROM_ABI`)
+: Mark a function as being hidden from the ABI (per {title-reference}`_LIBCPP_HIDE_FROM_ABI`)
when libc++ is built with an ABI version after ABI v1. This macro is used to
maintain ABI compatibility for symbols that have been historically exported
by libc++ in v1 of the ABI, but that we don't want to export in the future.
@@ -77,16 +77,16 @@ default visibility, thus removing the need for any annotations.
This macro is used to export the member functions produced by the explicit
instantiation in the dylib.
- **Windows Behavior**: `extern template` and `dllexport` are fundamentally
+ **Windows Behavior**: {title-reference}`extern template` and {title-reference}`dllexport` are fundamentally
incompatible *on a class template* on Windows; the former suppresses
instantiation, while the latter forces it. Specifying both on the same
declaration makes the class template be instantiated, which is not desirable
- inside headers. This macro therefore expands to `dllimport` outside of libc++
- but nothing inside of it (rather than expanding to `dllexport`); instead, the
+ inside headers. This macro therefore expands to {title-reference}`dllimport` outside of libc++
+ but nothing inside of it (rather than expanding to {title-reference}`dllexport`); instead, the
explicit instantiations themselves are marked as exported. Note that this
applies *only* to extern *class* templates. Extern *function* templates obey
- regular import/export semantics, and applying `dllexport` directly to the
- extern template declaration (i.e. using `_LIBCPP_FUNC_VIS`) is the correct
+ regular import/export semantics, and applying {title-reference}`dllexport` directly to the
+ extern template declaration (i.e. using {title-reference}`_LIBCPP_FUNC_VIS`) is the correct
thing to do for them.
**\_LIBCPP_CLASS_TEMPLATE_INSTANTIATION_VIS**
@@ -104,4 +104,3 @@ default visibility, thus removing the need for any annotations.
- [[cfe-dev] Visibility in libc++ - 1](http://lists.llvm.org/pipermail/cfe-dev/2013-July/030610.html)
- [[cfe-dev] Visibility in libc++ - 2](http://lists.llvm.org/pipermail/cfe-dev/2013-August/031195.html)
- [[libcxx] Visibility fixes for Windows](http://lists.llvm.org/pipermail/cfe-commits/Week-of-Mon-20130805/085461.html)
-
diff --git a/libcxx/docs/FeatureTestMacroTable.md b/libcxx/docs/FeatureTestMacroTable.md
index 450181f8fd0f3..c71275d16ae25 100644
--- a/libcxx/docs/FeatureTestMacroTable.md
+++ b/libcxx/docs/FeatureTestMacroTable.md
@@ -2,9 +2,9 @@
# Feature Test Macro Support
-```{contents}
+:::{contents}
:local: true
-```
+:::
## Overview
diff --git a/libcxx/docs/Hardening.md b/libcxx/docs/Hardening.md
index 4e50a1240ba09..caf9bfb3f6355 100644
--- a/libcxx/docs/Hardening.md
+++ b/libcxx/docs/Hardening.md
@@ -2,9 +2,9 @@
# Hardening Modes
-```{contents}
+:::{contents}
:local: true
-```
+:::
(using-hardening-modes)=
@@ -113,8 +113,8 @@ categories are considered internal to the library and subject to change.
- `valid-input-range` -- checks that ranges (whether expressed as an iterator
pair, an iterator and a sentinel, an iterator and a count, or
a `std::range`) given as input to library functions are valid:
- \- the sentinel is reachable from the begin iterator;
- \- TODO(hardening): both iterators refer to the same container.
+ - the sentinel is reachable from the begin iterator;
+ - TODO(hardening): both iterators refer to the same container.
("input" here refers to "an input given to an algorithm", not to an iterator
category)
@@ -171,64 +171,63 @@ categories are considered internal to the library and subject to change.
## Mapping between the hardening modes and the assertion categories
-```{eval-rst}
-.. list-table::
- :header-rows: 1
- :widths: auto
-
- * - Category name
- - ``fast``
- - ``extensive``
- - ``debug``
- * - ``valid-element-access``
- - ✅
- - ✅
- - ✅
- * - ``valid-input-range``
- - ✅
- - ✅
- - ✅
- * - ``non-null``
- - ❌
- - ✅
- - ✅
- * - ``non-overlapping-ranges``
- - ❌
- - ✅
- - ✅
- * - ``valid-deallocation``
- - ❌
- - ✅
- - ✅
- * - ``valid-external-api-call``
- - ❌
- - ✅
- - ✅
- * - ``compatible-allocator``
- - ❌
- - ✅
- - ✅
- * - ``argument-within-domain``
- - ❌
- - ✅
- - ✅
- * - ``pedantic``
- - ❌
- - ✅
- - ✅
- * - ``semantic-requirement``
- - ❌
- - ❌
- - ✅
- * - ``internal``
- - ❌
- - ❌
- - ✅
- * - ``uncategorized``
- - ❌
- - ✅
- - ✅
-```
+:::{list-table}
+:header-rows: 1
+:widths: auto
+
+* - Category name
+ - `fast`
+ - `extensive`
+ - `debug`
+* - `valid-element-access`
+ - ✅
+ - ✅
+ - ✅
+* - `valid-input-range`
+ - ✅
+ - ✅
+ - ✅
+* - `non-null`
+ - ❌
+ - ✅
+ - ✅
+* - `non-overlapping-ranges`
+ - ❌
+ - ✅
+ - ✅
+* - `valid-deallocation`
+ - ❌
+ - ✅
+ - ✅
+* - `valid-external-api-call`
+ - ❌
+ - ✅
+ - ✅
+* - `compatible-allocator`
+ - ❌
+ - ✅
+ - ✅
+* - `argument-within-domain`
+ - ❌
+ - ✅
+ - ✅
+* - `pedantic`
+ - ❌
+ - ✅
+ - ✅
+* - `semantic-requirement`
+ - ❌
+ - ❌
+ - ✅
+* - `internal`
+ - ❌
+ - ❌
+ - ✅
+* - `uncategorized`
+ - ❌
+ - ✅
+ - ✅
+:::
:::{note}
At the moment, each subsequent hardening mode is a strict superset of the
@@ -419,9 +418,8 @@ CMake configuration time. The available options are:
to the library.
ABI impact: changes the layout of `std::unique_ptr<T[]>`, and the representation
-
- : of a few library types that use `std::unique_ptr` internally, such as
- the unordered containers.
+ of a few library types that use `std::unique_ptr` internally, such as
+ the unordered containers.
- `_LIBCPP_ABI_BOUNDED_ITERATORS_IN_STD_ARRAY` -- changes the iterator type of `std::array` to a
bounded iterator that keeps track of whether it's within the bounds of the container and asserts it
@@ -465,87 +463,86 @@ The second character of an ABI tag encodes the assertion semantic:
## Hardened containers status
-```{eval-rst}
-.. list-table::
- :header-rows: 1
- :widths: auto
-
- * - Name
- - Member functions
- - Iterators (ABI-dependent)
- * - ``span``
- - ✅
- - ✅
- * - ``string_view``
- - ✅
- - ✅
- * - ``array``
- - ✅
- - ❌
- * - ``vector``
- - ✅
- - ✅ (see note)
- * - ``string``
- - ✅
- - ✅ (see note)
- * - ``list``
- - ✅
- - ❌
- * - ``forward_list``
- - ✅
- - ❌
- * - ``deque``
- - ✅
- - ❌
- * - ``map``
- - ❌
- - ❌
- * - ``set``
- - ❌
- - ❌
- * - ``multimap``
- - ❌
- - ❌
- * - ``multiset``
- - ❌
- - ❌
- * - ``unordered_map``
- - Partial
- - Partial
- * - ``unordered_set``
- - Partial
- - Partial
- * - ``unordered_multimap``
- - Partial
- - Partial
- * - ``unordered_multiset``
- - Partial
- - Partial
- * - ``mdspan``
- - ✅
- - ❌
- * - ``optional``
- - ✅
- - ✅
- * - ``function``
- - ❌
- - N/A
- * - ``variant``
- - N/A
- - N/A
- * - ``any``
- - N/A
- - N/A
- * - ``expected``
- - ✅
- - N/A
- * - ``valarray``
- - Partial
- - N/A
- * - ``bitset``
- - ✅
- - N/A
-```
+:::{list-table}
+:header-rows: 1
+:widths: auto
+
+* - Name
+ - Member functions
+ - Iterators (ABI-dependent)
+* - `span`
+ - ✅
+ - ✅
+* - `string_view`
+ - ✅
+ - ✅
+* - `array`
+ - ✅
+ - ❌
+* - `vector`
+ - ✅
+ - ✅ (see note)
+* - `string`
+ - ✅
+ - ✅ (see note)
+* - `list`
+ - ✅
+ - ❌
+* - `forward_list`
+ - ✅
+ - ❌
+* - `deque`
+ - ✅
+ - ❌
+* - `map`
+ - ❌
+ - ❌
+* - `set`
+ - ❌
+ - ❌
+* - `multimap`
+ - ❌
+ - ❌
+* - `multiset`
+ - ❌
+ - ❌
+* - `unordered_map`
+ - Partial
+ - Partial
+* - `unordered_set`
+ - Partial
+ - Partial
+* - `unordered_multimap`
+ - Partial
+ - Partial
+* - `unordered_multiset`
+ - Partial
+ - Partial
+* - `mdspan`
+ - ✅
+ - ❌
+* - `optional`
+ - ✅
+ - ✅
+* - `function`
+ - ❌
+ - N/A
+* - `variant`
+ - N/A
+ - N/A
+* - `any`
+ - N/A
+ - N/A
+* - `expected`
+ - ✅
+ - N/A
+* - `valarray`
+ - Partial
+ - N/A
+* - `bitset`
+ - ✅
+ - N/A
+:::
Note: for `vector` and `string`, the iterator does not check for
invalidation (accesses made via an invalidated iterator still lead to undefined
@@ -563,4 +560,3 @@ Please see {ref}`Testing documentation <testing-hardening-assertions>`.
contains some of the design rationale.
[odr issues]: https://en.cppreference.com/w/cpp/language/definition#:~:text=is%20ill%2Dformed.-,One%20Definition%20Rule,-Only%20one%20definition
-
diff --git a/libcxx/docs/Helpers/ReleaseNotesTemplate.md b/libcxx/docs/Helpers/ReleaseNotesTemplate.md
index 60e93db15e4da..4474caba71d9b 100644
--- a/libcxx/docs/Helpers/ReleaseNotesTemplate.md
+++ b/libcxx/docs/Helpers/ReleaseNotesTemplate.md
@@ -1,9 +1,9 @@
# Libc++ XX.YY.ZZ (In-Progress) Release Notes
-```{contents}
+:::{contents}
:depth: 2
:local: true
-```
+:::
Written by the [Libc++ Team](https://libcxx.llvm.org)
@@ -44,4 +44,3 @@ NOTE: THIS SHOULD BE POPULATED FROM THE PREVIOUS RELEASE'S UPCOMING DEPRECATIONS
### ABI Affecting Changes
### Build System Changes
-
diff --git a/libcxx/docs/Helpers/Styles.md b/libcxx/docs/Helpers/Styles.md
index 358dde4ad8ea8..19eb2c77c57f9 100644
--- a/libcxx/docs/Helpers/Styles.md
+++ b/libcxx/docs/Helpers/Styles.md
@@ -1,21 +1,3 @@
----
-substitutions:
- Complete: '{complete}`Complete`'
- In Progress: '{inprogress}`In Progress`'
- Not Started: '{notstarted}`Not Started`'
- Nothing To Do: '{nothingtodo}`Nothing To Do`'
- Partial: '{partial}`Partial`'
- Review: '{inreview}`Review`'
- hellip: |-
- ```{eval-rst}
- .. unicode:: U+2026
- ```
- sect: |-
- ```{eval-rst}
- .. unicode:: U+00A7
- ```
----
-
```{raw} html
<style type="text/css">
td { text-align: left; }
@@ -36,28 +18,3 @@ substitutions:
.complete { background-color: #99FF99; }
</style>
```
-
-```{eval-rst}
-.. role:: notstarted
-```
-
-```{eval-rst}
-.. role:: nothingtodo
-```
-
-```{eval-rst}
-.. role:: inprogress
-```
-
-```{eval-rst}
-.. role:: inreview
-```
-
-```{eval-rst}
-.. role:: partial
-```
-
-```{eval-rst}
-.. role:: complete
-```
-
diff --git a/libcxx/docs/Modules.md b/libcxx/docs/Modules.md
index 38ddd34be8611..85612b74482bf 100644
--- a/libcxx/docs/Modules.md
+++ b/libcxx/docs/Modules.md
@@ -13,8 +13,8 @@ considered stable nor complete
This page contains information regarding C++23 module support in libc++.
There are two kinds of modules available in Clang
-> - [Clang specific modules](https://clang.llvm.org/docs/Modules.html)
-> - [C++ modules](https://clang.llvm.org/docs/StandardCPlusPlusModules.html)
+- [Clang specific modules](https://clang.llvm.org/docs/Modules.html)
+- [C++ modules](https://clang.llvm.org/docs/StandardCPlusPlusModules.html)
This page mainly discusses the C++ modules. In C++20 there are also header units,
these are not part of this document.
@@ -37,58 +37,58 @@ on the availability of build systems with proper module support.
### What works
-> - Building BMIs
->
-> - Running tests using the `std` and `std.compat` module
->
-> - Using the `std` and `std.compat` module in external projects
->
-> - The following "parts disabled" configuration options are supported
->
-> - `LIBCXX_ENABLE_LOCALIZATION`
-> - `LIBCXX_ENABLE_WIDE_CHARACTERS`
-> - `LIBCXX_ENABLE_THREADS`
-> - `LIBCXX_ENABLE_FILESYSTEM`
-> - `LIBCXX_ENABLE_RANDOM_DEVICE`
-> - `LIBCXX_ENABLE_UNICODE`
-> - `LIBCXX_ENABLE_EXCEPTIONS` [^note-no-windows]
->
-> - A C++20 based extension
+- Building BMIs
-:::{note}
-[^note-no-windows]: This configuration will probably not work on Windows
+- Running tests using the `std` and `std.compat` module
+
+- Using the `std` and `std.compat` module in external projects
+
+- The following "parts disabled" configuration options are supported
+
+ - `LIBCXX_ENABLE_LOCALIZATION`
+ - `LIBCXX_ENABLE_WIDE_CHARACTERS`
+ - `LIBCXX_ENABLE_THREADS`
+ - `LIBCXX_ENABLE_FILESYSTEM`
+ - `LIBCXX_ENABLE_RANDOM_DEVICE`
+ - `LIBCXX_ENABLE_UNICODE`
+ - `LIBCXX_ENABLE_EXCEPTIONS` [^note-no-windows]
+
+- A C++20 based extension
+
+[^note-no-windows]:
+ This configuration will probably not work on Windows
due to hard-coded compilation flags.
-:::
### Some of the current limitations
-> - There is no official build system support, libc++ has experimental CMake support
-> - Requires CMake 3.26 for C++20 support
-> - Requires CMake 3.26 for C++23 support
-> - Requires CMake 3.27 for C++26 support
-> - Requires Ninja 1.11
-> - Requires Clang 17
-> - The path to the compiler may not be a symlink, `clang-scan-deps` does
-> not handle that case properly
-> - Libc++ is not tested with modules instead of headers
-> - Clang:
-> : - Including headers after importing the `std` module may fail. This is
-> hard to solve and there is a work-around by first including all headers
-> [bug report](https://llvm.org/PR61465).
+- There is no official build system support, libc++ has experimental CMake support
+- Requires CMake 3.26 for C++20 support
+- Requires CMake 3.26 for C++23 support
+- Requires CMake 3.27 for C++26 support
+- Requires Ninja 1.11
+- Requires Clang 17
+- The path to the compiler may not be a symlink, `clang-scan-deps` does
+ not handle that case properly
+- Libc++ is not tested with modules instead of headers
+- Clang:
+
+ - Including headers after importing the `std` module may fail. This is
+ hard to solve and there is a work-around by first including all headers
+ [bug report](https://llvm.org/PR61465).
### Blockers
-> - libc++
->
-> - Currently the tests only test with modules enabled, but do not import
-> modules instead of headers. When converting tests to using modules there
-> are still failures. These are under investigation.
-> - It has not been determined how to fully test libc++ with modules instead
-> of headers.
->
-> - Clang
->
-> - Some concepts do not work properly [bug report](https://llvm.org/PR61465).
+- libc++
+
+ - Currently the tests only test with modules enabled, but do not import
+ modules instead of headers. When converting tests to using modules there
+ are still failures. These are under investigation.
+ - It has not been determined how to fully test libc++ with modules instead
+ of headers.
+
+- Clang
+
+ - Some concepts do not work properly [bug report](https://llvm.org/PR61465).
## Using in external projects
@@ -104,11 +104,11 @@ the build system.
Currently there are two ways to build modules
-> - Use a local build of modules from the build directory. This requires
-> Clang 17 or later and CMake 3.26 or later.
-> - Use the installed modules. This requires Clang 18.1.2 or later and
-> a recent build of CMake. The CMake changes will be part of CMake 3.30. This
-> method requires you or your distribution to enable module installation.
+- Use a local build of modules from the build directory. This requires
+ Clang 17 or later and CMake 3.26 or later.
+- Use the installed modules. This requires Clang 18.1.2 or later and
+ a recent build of CMake. The CMake changes will be part of CMake 3.30. This
+ method requires you or your distribution to enable module installation.
### Using the local build
@@ -283,4 +283,3 @@ channel on [LLVM's Discord server](https://discord.gg/jzUbyP26tQ).
If you think you've found a bug please it using the [LLVM bug tracker](https://github.com/llvm/llvm-project/issues). Please make sure the issue
you found is not one of the known bugs or limitations on this page.
-
diff --git a/libcxx/docs/ReleaseNotes.md b/libcxx/docs/ReleaseNotes.md
index de250f469df69..874be472a652b 100644
--- a/libcxx/docs/ReleaseNotes.md
+++ b/libcxx/docs/ReleaseNotes.md
@@ -1,5 +1,4 @@
-```{eval-rst}
-.. include:: ReleaseNotes/24.md
+```{include} ReleaseNotes/24.md
```
% Make sure to reference the non-live release notes in a toctree to avoid Sphinx errors.
@@ -16,4 +15,3 @@ ReleaseNotes/23
% The release notes are in versioned files, but we make sure to keep publishing
% them in an unversioned ReleaseNotes.html page for external sites to reference.
-
diff --git a/libcxx/docs/ReleaseNotes/20.md b/libcxx/docs/ReleaseNotes/20.md
index 88ef5a04da030..6fb5331ceedb6 100644
--- a/libcxx/docs/ReleaseNotes/20.md
+++ b/libcxx/docs/ReleaseNotes/20.md
@@ -1,9 +1,9 @@
# Libc++ 20.0.0 (In-Progress) Release Notes
-```{contents}
+:::{contents}
:depth: 2
:local: true
-```
+:::
Written by the [Libc++ Team](https://libcxx.llvm.org)
@@ -195,4 +195,3 @@ The main focus of the libc++ team has been to implement new C++20, C++23, and C+
the element type of `zip_view` from a `std::pair` to a `std::tuple` in some cases. This is technically an ABI
break, however since `zip_view` is generally not an ABI sensitive type, we don't expect users to encounter any
issues and we don't provide a way to change this behavior, which would make libc++ non-conforming.
-
diff --git a/libcxx/docs/ReleaseNotes/21.md b/libcxx/docs/ReleaseNotes/21.md
index 557b4061c8779..56f247e72116c 100644
--- a/libcxx/docs/ReleaseNotes/21.md
+++ b/libcxx/docs/ReleaseNotes/21.md
@@ -39,7 +39,7 @@ see the [releases page](https://llvm.org/releases/).
- P2255R2: A type trait to detect reference binding to temporary (implemented the type traits only) ([Github](https://github.com/llvm/llvm-project/issues/105180))
- P2372R3: Fixing locale handling in chrono formatters ([Github](https://github.com/llvm/llvm-project/issues/100043))
- P2562R1: `constexpr` Stable Sorting ([Github](https://github.com/llvm/llvm-project/issues/105360))
-- P0472R3: Put std::monostate in \<utility> ([Github](https://github.com/llvm/llvm-project/issues/127874))
+- P0472R3: Put std::monostate in `<utility>` ([Github](https://github.com/llvm/llvm-project/issues/127874))
- P1222R4: A Standard `flat_set` ([Github](https://github.com/llvm/llvm-project/issues/105193))
- P2897R7: `aligned_accessor`: An mdspan accessor expressing pointer over-alignment ([Github](https://github.com/llvm/llvm-project/issues/118372))
- P3247R2: Deprecate the notion of trivial types ([Github](https://github.com/llvm/llvm-project/issues/118387))
@@ -121,10 +121,10 @@ see the [releases page](https://llvm.org/releases/).
- LLVM 20 contained an ABI break that can result in the size of `std::unordered_{map,set,multimap,multiset}` and `std::deque` changing when used with an allocator type that is empty and contains a base class that is the same across rebound allocator instantiations (e.g. `Allocator<int>` and `Allocator<char>` are both empty and contain the same base class).
In addition, the layout of a user-defined type that:
- > - contains one of the following containers: `std::unordered_{map,set,multimap,multiset}`, `std::deque`, `std::map`, `std::set`, `std::multimap`, `std::multiset`, `std::list` or `std::vector`, and
- > - passes an empty allocator, comparator or hasher type to that container, and
- > - has a member of that same empty allocator, comparator or hasher type inside the enclosing struct, and
- > - that member is either marked with `[[no_unique_address]]` or optimized out via the EBO (empty base optimization) technique
+ - contains one of the following containers: `std::unordered_{map,set,multimap,multiset}`, `std::deque`, `std::map`, `std::set`, `std::multimap`, `std::multiset`, `std::list` or `std::vector`, and
+ - passes an empty allocator, comparator or hasher type to that container, and
+ - has a member of that same empty allocator, comparator or hasher type inside the enclosing struct, and
+ - that member is either marked with `[[no_unique_address]]` or optimized out via the EBO (empty base optimization) technique
saw its size increase from LLVM 19 to LLVM 20. This was caused by the usage of `[[no_unique_address]]` within some of libc++'s containers in a way that allowed subtle interactions with enclosing objects. This is fixed in LLVM 21 when using the Clang compiler (returning to the LLVM 19 ABI), however that implies an ABI break from LLVM 20 to LLVM 21.
@@ -137,4 +137,3 @@ see the [releases page](https://llvm.org/releases/).
### Build System Changes
- TODO
-
diff --git a/libcxx/docs/ReleaseNotes/23.md b/libcxx/docs/ReleaseNotes/23.md
index 330826181412b..8989b2a3999d7 100644
--- a/libcxx/docs/ReleaseNotes/23.md
+++ b/libcxx/docs/ReleaseNotes/23.md
@@ -1,9 +1,9 @@
# Libc++ 23.0.0 (In-Progress) Release Notes
-```{contents}
+:::{contents}
:depth: 2
:local: true
-```
+:::
Written by the [Libc++ Team](https://libcxx.llvm.org)
@@ -114,4 +114,3 @@ see the [releases page](https://llvm.org/releases/).
pointer.
### Build System Changes
-
diff --git a/libcxx/docs/Status/Cxx17.md b/libcxx/docs/Status/Cxx17.md
index a4e91d807ca86..e4235a3be29cf 100644
--- a/libcxx/docs/Status/Cxx17.md
+++ b/libcxx/docs/Status/Cxx17.md
@@ -2,13 +2,12 @@
# libc++ C++17 Status
-```{eval-rst}
-.. include:: ../Helpers/Styles.md
-```
+:::{include} ../Helpers/Styles.md
+:::
-```{contents}
+:::{contents}
:local: true
-```
+:::
## Overview
@@ -30,18 +29,24 @@ The groups that have contributed papers:
## Paper Status
```{eval-rst}
-.. csv-table::
- :file: Cxx17Papers.csv
- :header-rows: 1
- :widths: auto
+.. role:: notstarted
+.. role:: nothingtodo
+.. role:: inprogress
+.. role:: inreview
+.. role:: partial
+.. role:: complete
```
-## Library Working Group Issues Status
+:::{csv-table}
+:file: Cxx17Papers.csv
+:header-rows: 1
+:widths: auto
+:::
-```{eval-rst}
-.. csv-table::
- :file: Cxx17Issues.csv
- :header-rows: 1
- :widths: auto
-```
+## Library Working Group Issues Status
+:::{csv-table}
+:file: Cxx17Issues.csv
+:header-rows: 1
+:widths: auto
+:::
diff --git a/libcxx/docs/Status/Cxx17Issues.csv b/libcxx/docs/Status/Cxx17Issues.csv
index 2fb7f14996be0..5137ef99aafb2 100644
--- a/libcxx/docs/Status/Cxx17Issues.csv
+++ b/libcxx/docs/Status/Cxx17Issues.csv
@@ -1,315 +1,315 @@
"Issue #","Issue Name","Meeting","Status","First released version","GitHub issue","Notes"
-"`LWG2016 <https://wg21.link/LWG2016>`__","Allocators must be no-throw swappable","2014-11 (Urbana)","|Complete|","","`#103224 <https://github.com/llvm/llvm-project/issues/103224>`__",""
-"`LWG2118 <https://wg21.link/LWG2118>`__","``unique_ptr``\ for array does not support cv qualification conversion of actual argument","2014-11 (Urbana)","|Complete|","","`#103225 <https://github.com/llvm/llvm-project/issues/103225>`__",""
-"`LWG2170 <https://wg21.link/LWG2170>`__","Aggregates cannot be ``DefaultConstructible``\ ","2014-11 (Urbana)","|Complete|","","`#103226 <https://github.com/llvm/llvm-project/issues/103226>`__",""
-"`LWG2340 <https://wg21.link/LWG2340>`__","Replacement allocation functions declared as inline","2014-11 (Urbana)","|Complete|","","`#103227 <https://github.com/llvm/llvm-project/issues/103227>`__",""
-"`LWG2354 <https://wg21.link/LWG2354>`__","Unnecessary copying when inserting into maps with braced-init syntax","2014-11 (Urbana)","|Complete|","","`#103228 <https://github.com/llvm/llvm-project/issues/103228>`__",""
-"`LWG2377 <https://wg21.link/LWG2377>`__","``std::align``\ requirements overly strict","2014-11 (Urbana)","|Complete|","","`#103229 <https://github.com/llvm/llvm-project/issues/103229>`__",""
-"`LWG2396 <https://wg21.link/LWG2396>`__","``underlying_type``\ doesn't say what to do for an incomplete enumeration type","2014-11 (Urbana)","|Complete|","","`#103230 <https://github.com/llvm/llvm-project/issues/103230>`__",""
-"`LWG2399 <https://wg21.link/LWG2399>`__","``shared_ptr``\ 's constructor from ``unique_ptr``\ should be constrained","2014-11 (Urbana)","|Complete|","","`#103231 <https://github.com/llvm/llvm-project/issues/103231>`__",""
-"`LWG2400 <https://wg21.link/LWG2400>`__","``shared_ptr``\ 's ``get_deleter()``\ should use ``addressof()``\ ","2014-11 (Urbana)","|Complete|","","`#103232 <https://github.com/llvm/llvm-project/issues/103232>`__",""
-"`LWG2401 <https://wg21.link/LWG2401>`__","``std::function``\ needs more noexcept","2014-11 (Urbana)","|Complete|","","`#103233 <https://github.com/llvm/llvm-project/issues/103233>`__",""
-"`LWG2404 <https://wg21.link/LWG2404>`__","``mismatch()``\ 's complexity needs to be updated","2014-11 (Urbana)","|Complete|","","`#103234 <https://github.com/llvm/llvm-project/issues/103234>`__",""
-"`LWG2408 <https://wg21.link/LWG2408>`__","SFINAE-friendly ``common_type``\ / ``iterator_traits``\ is missing in C++14","2014-11 (Urbana)","|Complete|","","`#103235 <https://github.com/llvm/llvm-project/issues/103235>`__",""
-"`LWG2106 <https://wg21.link/LWG2106>`__","``move_iterator``\ wrapping iterators returning prvalues","2014-11 (Urbana)","|Complete|","","`#103236 <https://github.com/llvm/llvm-project/issues/103236>`__",""
-"`LWG2129 <https://wg21.link/LWG2129>`__","User specializations of ``std::initializer_list``\ ","2014-11 (Urbana)","|Complete|","21","`#103237 <https://github.com/llvm/llvm-project/issues/103237>`__",""
-"`LWG2212 <https://wg21.link/LWG2212>`__","``tuple_size``\ for ``const pair``\ request <tuple> header","2014-11 (Urbana)","|Complete|","","`#103238 <https://github.com/llvm/llvm-project/issues/103238>`__",""
-"`LWG2217 <https://wg21.link/LWG2217>`__","``operator==(sub_match, string)``\ slices on embedded '\0's","2014-11 (Urbana)","|Complete|","","`#103239 <https://github.com/llvm/llvm-project/issues/103239>`__",""
-"`LWG2230 <https://wg21.link/LWG2230>`__","""see below"" for ``initializer_list``\ constructors of unordered containers","2014-11 (Urbana)","|Complete|","","`#103240 <https://github.com/llvm/llvm-project/issues/103240>`__",""
-"`LWG2233 <https://wg21.link/LWG2233>`__","``bad_function_call::what()``\ unhelpful","2014-11 (Urbana)","|Complete|","","`#103241 <https://github.com/llvm/llvm-project/issues/103241>`__",""
-"`LWG2266 <https://wg21.link/LWG2266>`__","``vector``\ and ``deque``\ have incorrect insert requirements","2014-11 (Urbana)","|Complete|","","`#103242 <https://github.com/llvm/llvm-project/issues/103242>`__",""
-"`LWG2325 <https://wg21.link/LWG2325>`__","``minmax_element()``\ 's behavior differing from ``max_element()``\ 's should be noted","2014-11 (Urbana)","|Complete|","","`#103243 <https://github.com/llvm/llvm-project/issues/103243>`__",""
-"`LWG2361 <https://wg21.link/LWG2361>`__","Apply 2299 resolution throughout library","2014-11 (Urbana)","|Complete|","","`#103244 <https://github.com/llvm/llvm-project/issues/103244>`__",""
-"`LWG2365 <https://wg21.link/LWG2365>`__","Missing noexcept in ``shared_ptr::shared_ptr(nullptr_t)``\ ","2014-11 (Urbana)","|Complete|","","`#103246 <https://github.com/llvm/llvm-project/issues/103246>`__",""
-"`LWG2376 <https://wg21.link/LWG2376>`__","``bad_weak_ptr::what()``\ overspecified","2014-11 (Urbana)","|Complete|","","`#103247 <https://github.com/llvm/llvm-project/issues/103247>`__",""
-"`LWG2387 <https://wg21.link/LWG2387>`__","More nested types that must be accessible and unambiguous","2014-11 (Urbana)","|Complete|","","`#103248 <https://github.com/llvm/llvm-project/issues/103248>`__",""
+"[LWG2016](https://wg21.link/LWG2016)","Allocators must be no-throw swappable","2014-11 (Urbana)","{{Complete}}","","[#103224](https://github.com/llvm/llvm-project/issues/103224)",""
+"[LWG2118](https://wg21.link/LWG2118)","`unique_ptr` for array does not support cv qualification conversion of actual argument","2014-11 (Urbana)","{{Complete}}","","[#103225](https://github.com/llvm/llvm-project/issues/103225)",""
+"[LWG2170](https://wg21.link/LWG2170)","Aggregates cannot be `DefaultConstructible` ","2014-11 (Urbana)","{{Complete}}","","[#103226](https://github.com/llvm/llvm-project/issues/103226)",""
+"[LWG2340](https://wg21.link/LWG2340)","Replacement allocation functions declared as inline","2014-11 (Urbana)","{{Complete}}","","[#103227](https://github.com/llvm/llvm-project/issues/103227)",""
+"[LWG2354](https://wg21.link/LWG2354)","Unnecessary copying when inserting into maps with braced-init syntax","2014-11 (Urbana)","{{Complete}}","","[#103228](https://github.com/llvm/llvm-project/issues/103228)",""
+"[LWG2377](https://wg21.link/LWG2377)","`std::align` requirements overly strict","2014-11 (Urbana)","{{Complete}}","","[#103229](https://github.com/llvm/llvm-project/issues/103229)",""
+"[LWG2396](https://wg21.link/LWG2396)","`underlying_type` doesn't say what to do for an incomplete enumeration type","2014-11 (Urbana)","{{Complete}}","","[#103230](https://github.com/llvm/llvm-project/issues/103230)",""
+"[LWG2399](https://wg21.link/LWG2399)","`shared_ptr` 's constructor from `unique_ptr` should be constrained","2014-11 (Urbana)","{{Complete}}","","[#103231](https://github.com/llvm/llvm-project/issues/103231)",""
+"[LWG2400](https://wg21.link/LWG2400)","`shared_ptr` 's `get_deleter()` should use `addressof()` ","2014-11 (Urbana)","{{Complete}}","","[#103232](https://github.com/llvm/llvm-project/issues/103232)",""
+"[LWG2401](https://wg21.link/LWG2401)","`std::function` needs more noexcept","2014-11 (Urbana)","{{Complete}}","","[#103233](https://github.com/llvm/llvm-project/issues/103233)",""
+"[LWG2404](https://wg21.link/LWG2404)","`mismatch()` 's complexity needs to be updated","2014-11 (Urbana)","{{Complete}}","","[#103234](https://github.com/llvm/llvm-project/issues/103234)",""
+"[LWG2408](https://wg21.link/LWG2408)","SFINAE-friendly `common_type` / `iterator_traits` is missing in C++14","2014-11 (Urbana)","{{Complete}}","","[#103235](https://github.com/llvm/llvm-project/issues/103235)",""
+"[LWG2106](https://wg21.link/LWG2106)","`move_iterator` wrapping iterators returning prvalues","2014-11 (Urbana)","{{Complete}}","","[#103236](https://github.com/llvm/llvm-project/issues/103236)",""
+"[LWG2129](https://wg21.link/LWG2129)","User specializations of `std::initializer_list` ","2014-11 (Urbana)","{{Complete}}","21","[#103237](https://github.com/llvm/llvm-project/issues/103237)",""
+"[LWG2212](https://wg21.link/LWG2212)","`tuple_size` for `const pair` request \<tuple\> header","2014-11 (Urbana)","{{Complete}}","","[#103238](https://github.com/llvm/llvm-project/issues/103238)",""
+"[LWG2217](https://wg21.link/LWG2217)","`operator==(sub_match, string)` slices on embedded '\0's","2014-11 (Urbana)","{{Complete}}","","[#103239](https://github.com/llvm/llvm-project/issues/103239)",""
+"[LWG2230](https://wg21.link/LWG2230)","""see below"" for `initializer_list` constructors of unordered containers","2014-11 (Urbana)","{{Complete}}","","[#103240](https://github.com/llvm/llvm-project/issues/103240)",""
+"[LWG2233](https://wg21.link/LWG2233)","`bad_function_call::what()` unhelpful","2014-11 (Urbana)","{{Complete}}","","[#103241](https://github.com/llvm/llvm-project/issues/103241)",""
+"[LWG2266](https://wg21.link/LWG2266)","`vector` and `deque` have incorrect insert requirements","2014-11 (Urbana)","{{Complete}}","","[#103242](https://github.com/llvm/llvm-project/issues/103242)",""
+"[LWG2325](https://wg21.link/LWG2325)","`minmax_element()` 's behavior differing from `max_element()` 's should be noted","2014-11 (Urbana)","{{Complete}}","","[#103243](https://github.com/llvm/llvm-project/issues/103243)",""
+"[LWG2361](https://wg21.link/LWG2361)","Apply 2299 resolution throughout library","2014-11 (Urbana)","{{Complete}}","","[#103244](https://github.com/llvm/llvm-project/issues/103244)",""
+"[LWG2365](https://wg21.link/LWG2365)","Missing noexcept in `shared_ptr::shared_ptr(nullptr_t)` ","2014-11 (Urbana)","{{Complete}}","","[#103246](https://github.com/llvm/llvm-project/issues/103246)",""
+"[LWG2376](https://wg21.link/LWG2376)","`bad_weak_ptr::what()` overspecified","2014-11 (Urbana)","{{Complete}}","","[#103247](https://github.com/llvm/llvm-project/issues/103247)",""
+"[LWG2387](https://wg21.link/LWG2387)","More nested types that must be accessible and unambiguous","2014-11 (Urbana)","{{Complete}}","","[#103248](https://github.com/llvm/llvm-project/issues/103248)",""
"","","","","","",""
-"`LWG2059 <https://wg21.link/LWG2059>`__","C++0x ambiguity problem with map::erase","2015-05 (Lenexa)","|Complete|","","`#103249 <https://github.com/llvm/llvm-project/issues/103249>`__",""
-"`LWG2063 <https://wg21.link/LWG2063>`__","Contradictory requirements for string move assignment","2015-05 (Lenexa)","|Complete|","","`#103250 <https://github.com/llvm/llvm-project/issues/103250>`__",""
-"`LWG2076 <https://wg21.link/LWG2076>`__","Bad CopyConstructible requirement in set constructors","2015-05 (Lenexa)","|Complete|","","`#103251 <https://github.com/llvm/llvm-project/issues/103251>`__",""
-"`LWG2160 <https://wg21.link/LWG2160>`__","Unintended destruction ordering-specification of resize","2015-05 (Lenexa)","|Complete|","","`#103252 <https://github.com/llvm/llvm-project/issues/103252>`__",""
-"`LWG2168 <https://wg21.link/LWG2168>`__","Inconsistent specification of uniform_real_distribution constructor","2015-05 (Lenexa)","|Complete|","","`#103253 <https://github.com/llvm/llvm-project/issues/103253>`__",""
-"`LWG2239 <https://wg21.link/LWG2239>`__","min/max/minmax requirements","2015-05 (Lenexa)","|Complete|","","`#103254 <https://github.com/llvm/llvm-project/issues/103254>`__",""
-"`LWG2364 <https://wg21.link/LWG2364>`__","deque and vector pop_back don't specify iterator invalidation requirements","2015-05 (Lenexa)","|Complete|","","`#103255 <https://github.com/llvm/llvm-project/issues/103255>`__",""
-"`LWG2369 <https://wg21.link/LWG2369>`__","constexpr max(initializer_list) vs max_element","2015-05 (Lenexa)","|Complete|","","`#103256 <https://github.com/llvm/llvm-project/issues/103256>`__",""
-"`LWG2378 <https://wg21.link/LWG2378>`__","Behaviour of standard exception types","2015-05 (Lenexa)","|Complete|","","`#103257 <https://github.com/llvm/llvm-project/issues/103257>`__",""
-"`LWG2403 <https://wg21.link/LWG2403>`__","stof() should call strtof() and wcstof()","2015-05 (Lenexa)","|Complete|","","`#103258 <https://github.com/llvm/llvm-project/issues/103258>`__",""
-"`LWG2406 <https://wg21.link/LWG2406>`__","negative_binomial_distribution should reject p == 1","2015-05 (Lenexa)","|Complete|","","`#103259 <https://github.com/llvm/llvm-project/issues/103259>`__",""
-"`LWG2407 <https://wg21.link/LWG2407>`__","packaged_task(allocator_arg_t, const Allocator&, F&&) should neither be constrained nor explicit","2015-05 (Lenexa)","|Complete|","","`#103260 <https://github.com/llvm/llvm-project/issues/103260>`__",""
-"`LWG2411 <https://wg21.link/LWG2411>`__","shared_ptr is only contextually convertible to bool","2015-05 (Lenexa)","|Complete|","","`#103261 <https://github.com/llvm/llvm-project/issues/103261>`__",""
-"`LWG2415 <https://wg21.link/LWG2415>`__","Inconsistency between unique_ptr and shared_ptr","2015-05 (Lenexa)","|Complete|","","`#103262 <https://github.com/llvm/llvm-project/issues/103262>`__",""
-"`LWG2420 <https://wg21.link/LWG2420>`__","function<void(ArgTypes...)> does not discard the return value of the target object","2015-05 (Lenexa)","|Complete|","","`#103263 <https://github.com/llvm/llvm-project/issues/103263>`__",""
-"`LWG2425 <https://wg21.link/LWG2425>`__","``operator delete(void*, size_t)``\ doesn't invalidate pointers sufficiently","2015-05 (Lenexa)","|Complete|","","`#103264 <https://github.com/llvm/llvm-project/issues/103264>`__",""
-"`LWG2427 <https://wg21.link/LWG2427>`__","Container adaptors as sequence containers, redux","2015-05 (Lenexa)","|Complete|","","`#103265 <https://github.com/llvm/llvm-project/issues/103265>`__",""
-"`LWG2428 <https://wg21.link/LWG2428>`__","""External declaration"" used without being defined","2015-05 (Lenexa)","|Complete|","","`#103266 <https://github.com/llvm/llvm-project/issues/103266>`__",""
-"`LWG2433 <https://wg21.link/LWG2433>`__","``uninitialized_copy()``\ /etc. should tolerate overloaded operator&","2015-05 (Lenexa)","|Complete|","","`#103267 <https://github.com/llvm/llvm-project/issues/103267>`__",""
-"`LWG2434 <https://wg21.link/LWG2434>`__","``shared_ptr::use_count()``\ is efficient","2015-05 (Lenexa)","|Complete|","","`#103268 <https://github.com/llvm/llvm-project/issues/103268>`__",""
-"`LWG2437 <https://wg21.link/LWG2437>`__","``iterator_traits::reference``\ can and can't be void","2015-05 (Lenexa)","|Complete|","","`#103269 <https://github.com/llvm/llvm-project/issues/103269>`__",""
-"`LWG2438 <https://wg21.link/LWG2438>`__","``std::iterator``\ inheritance shouldn't be mandated","2015-05 (Lenexa)","|Complete|","","`#103270 <https://github.com/llvm/llvm-project/issues/103270>`__",""
-"`LWG2439 <https://wg21.link/LWG2439>`__","``unique_copy()``\ sometimes can't fall back to reading its output","2015-05 (Lenexa)","|Complete|","","`#103271 <https://github.com/llvm/llvm-project/issues/103271>`__",""
-"`LWG2440 <https://wg21.link/LWG2440>`__","``seed_seq::size()``\ should be noexcept","2015-05 (Lenexa)","|Complete|","","`#103272 <https://github.com/llvm/llvm-project/issues/103272>`__",""
-"`LWG2442 <https://wg21.link/LWG2442>`__","``call_once()``\ shouldn't DECAY_COPY()","2015-05 (Lenexa)","|Complete|","","`#103274 <https://github.com/llvm/llvm-project/issues/103274>`__",""
-"`LWG2448 <https://wg21.link/LWG2448>`__","Non-normative Container destructor specification","2015-05 (Lenexa)","|Complete|","","`#103276 <https://github.com/llvm/llvm-project/issues/103276>`__",""
-"`LWG2454 <https://wg21.link/LWG2454>`__","Add ``raw_storage_iterator::base()``\ member","2015-05 (Lenexa)","|Complete|","","`#103277 <https://github.com/llvm/llvm-project/issues/103277>`__",""
-"`LWG2455 <https://wg21.link/LWG2455>`__","Allocator default construction should be allowed to throw","2015-05 (Lenexa)","|Complete|","","`#103278 <https://github.com/llvm/llvm-project/issues/103278>`__",""
-"`LWG2458 <https://wg21.link/LWG2458>`__","N3778 and new library deallocation signatures","2015-05 (Lenexa)","|Complete|","","`#103279 <https://github.com/llvm/llvm-project/issues/103279>`__",""
-"`LWG2459 <https://wg21.link/LWG2459>`__","``std::polar``\ should require a non-negative rho","2015-05 (Lenexa)","|Complete|","","`#103280 <https://github.com/llvm/llvm-project/issues/103280>`__",""
-"`LWG2464 <https://wg21.link/LWG2464>`__","``try_emplace``\ and ``insert_or_assign``\ misspecified","2015-05 (Lenexa)","|Complete|","","`#103281 <https://github.com/llvm/llvm-project/issues/103281>`__",""
-"`LWG2467 <https://wg21.link/LWG2467>`__","``is_always_equal``\ has slightly inconsistent default","2015-05 (Lenexa)","|Complete|","","`#103282 <https://github.com/llvm/llvm-project/issues/103282>`__",""
-"`LWG2470 <https://wg21.link/LWG2470>`__","Allocator's destroy function should be allowed to fail to instantiate","2015-05 (Lenexa)","|Complete|","","`#103283 <https://github.com/llvm/llvm-project/issues/103283>`__",""
-"`LWG2482 <https://wg21.link/LWG2482>`__","[c.strings] Table 73 mentions nonexistent functions","2015-05 (Lenexa)","|Complete|","","`#103284 <https://github.com/llvm/llvm-project/issues/103284>`__",""
-"`LWG2488 <https://wg21.link/LWG2488>`__","Placeholders should be allowed and encouraged to be constexpr","2015-05 (Lenexa)","|Complete|","","`#103285 <https://github.com/llvm/llvm-project/issues/103285>`__",""
+"[LWG2059](https://wg21.link/LWG2059)","C++0x ambiguity problem with map::erase","2015-05 (Lenexa)","{{Complete}}","","[#103249](https://github.com/llvm/llvm-project/issues/103249)",""
+"[LWG2063](https://wg21.link/LWG2063)","Contradictory requirements for string move assignment","2015-05 (Lenexa)","{{Complete}}","","[#103250](https://github.com/llvm/llvm-project/issues/103250)",""
+"[LWG2076](https://wg21.link/LWG2076)","Bad CopyConstructible requirement in set constructors","2015-05 (Lenexa)","{{Complete}}","","[#103251](https://github.com/llvm/llvm-project/issues/103251)",""
+"[LWG2160](https://wg21.link/LWG2160)","Unintended destruction ordering-specification of resize","2015-05 (Lenexa)","{{Complete}}","","[#103252](https://github.com/llvm/llvm-project/issues/103252)",""
+"[LWG2168](https://wg21.link/LWG2168)","Inconsistent specification of uniform_real_distribution constructor","2015-05 (Lenexa)","{{Complete}}","","[#103253](https://github.com/llvm/llvm-project/issues/103253)",""
+"[LWG2239](https://wg21.link/LWG2239)","min/max/minmax requirements","2015-05 (Lenexa)","{{Complete}}","","[#103254](https://github.com/llvm/llvm-project/issues/103254)",""
+"[LWG2364](https://wg21.link/LWG2364)","deque and vector pop_back don't specify iterator invalidation requirements","2015-05 (Lenexa)","{{Complete}}","","[#103255](https://github.com/llvm/llvm-project/issues/103255)",""
+"[LWG2369](https://wg21.link/LWG2369)","constexpr max(initializer_list) vs max_element","2015-05 (Lenexa)","{{Complete}}","","[#103256](https://github.com/llvm/llvm-project/issues/103256)",""
+"[LWG2378](https://wg21.link/LWG2378)","Behaviour of standard exception types","2015-05 (Lenexa)","{{Complete}}","","[#103257](https://github.com/llvm/llvm-project/issues/103257)",""
+"[LWG2403](https://wg21.link/LWG2403)","stof() should call strtof() and wcstof()","2015-05 (Lenexa)","{{Complete}}","","[#103258](https://github.com/llvm/llvm-project/issues/103258)",""
+"[LWG2406](https://wg21.link/LWG2406)","negative_binomial_distribution should reject p == 1","2015-05 (Lenexa)","{{Complete}}","","[#103259](https://github.com/llvm/llvm-project/issues/103259)",""
+"[LWG2407](https://wg21.link/LWG2407)","packaged_task(allocator_arg_t, const Allocator&, F&&) should neither be constrained nor explicit","2015-05 (Lenexa)","{{Complete}}","","[#103260](https://github.com/llvm/llvm-project/issues/103260)",""
+"[LWG2411](https://wg21.link/LWG2411)","shared_ptr is only contextually convertible to bool","2015-05 (Lenexa)","{{Complete}}","","[#103261](https://github.com/llvm/llvm-project/issues/103261)",""
+"[LWG2415](https://wg21.link/LWG2415)","Inconsistency between unique_ptr and shared_ptr","2015-05 (Lenexa)","{{Complete}}","","[#103262](https://github.com/llvm/llvm-project/issues/103262)",""
+"[LWG2420](https://wg21.link/LWG2420)","function\<void(ArgTypes...)\> does not discard the return value of the target object","2015-05 (Lenexa)","{{Complete}}","","[#103263](https://github.com/llvm/llvm-project/issues/103263)",""
+"[LWG2425](https://wg21.link/LWG2425)","`operator delete(void*, size_t)` doesn't invalidate pointers sufficiently","2015-05 (Lenexa)","{{Complete}}","","[#103264](https://github.com/llvm/llvm-project/issues/103264)",""
+"[LWG2427](https://wg21.link/LWG2427)","Container adaptors as sequence containers, redux","2015-05 (Lenexa)","{{Complete}}","","[#103265](https://github.com/llvm/llvm-project/issues/103265)",""
+"[LWG2428](https://wg21.link/LWG2428)","""External declaration"" used without being defined","2015-05 (Lenexa)","{{Complete}}","","[#103266](https://github.com/llvm/llvm-project/issues/103266)",""
+"[LWG2433](https://wg21.link/LWG2433)","`uninitialized_copy()` /etc. should tolerate overloaded operator&","2015-05 (Lenexa)","{{Complete}}","","[#103267](https://github.com/llvm/llvm-project/issues/103267)",""
+"[LWG2434](https://wg21.link/LWG2434)","`shared_ptr::use_count()` is efficient","2015-05 (Lenexa)","{{Complete}}","","[#103268](https://github.com/llvm/llvm-project/issues/103268)",""
+"[LWG2437](https://wg21.link/LWG2437)","`iterator_traits::reference` can and can't be void","2015-05 (Lenexa)","{{Complete}}","","[#103269](https://github.com/llvm/llvm-project/issues/103269)",""
+"[LWG2438](https://wg21.link/LWG2438)","`std::iterator` inheritance shouldn't be mandated","2015-05 (Lenexa)","{{Complete}}","","[#103270](https://github.com/llvm/llvm-project/issues/103270)",""
+"[LWG2439](https://wg21.link/LWG2439)","`unique_copy()` sometimes can't fall back to reading its output","2015-05 (Lenexa)","{{Complete}}","","[#103271](https://github.com/llvm/llvm-project/issues/103271)",""
+"[LWG2440](https://wg21.link/LWG2440)","`seed_seq::size()` should be noexcept","2015-05 (Lenexa)","{{Complete}}","","[#103272](https://github.com/llvm/llvm-project/issues/103272)",""
+"[LWG2442](https://wg21.link/LWG2442)","`call_once()` shouldn't DECAY_COPY()","2015-05 (Lenexa)","{{Complete}}","","[#103274](https://github.com/llvm/llvm-project/issues/103274)",""
+"[LWG2448](https://wg21.link/LWG2448)","Non-normative Container destructor specification","2015-05 (Lenexa)","{{Complete}}","","[#103276](https://github.com/llvm/llvm-project/issues/103276)",""
+"[LWG2454](https://wg21.link/LWG2454)","Add `raw_storage_iterator::base()` member","2015-05 (Lenexa)","{{Complete}}","","[#103277](https://github.com/llvm/llvm-project/issues/103277)",""
+"[LWG2455](https://wg21.link/LWG2455)","Allocator default construction should be allowed to throw","2015-05 (Lenexa)","{{Complete}}","","[#103278](https://github.com/llvm/llvm-project/issues/103278)",""
+"[LWG2458](https://wg21.link/LWG2458)","N3778 and new library deallocation signatures","2015-05 (Lenexa)","{{Complete}}","","[#103279](https://github.com/llvm/llvm-project/issues/103279)",""
+"[LWG2459](https://wg21.link/LWG2459)","`std::polar` should require a non-negative rho","2015-05 (Lenexa)","{{Complete}}","","[#103280](https://github.com/llvm/llvm-project/issues/103280)",""
+"[LWG2464](https://wg21.link/LWG2464)","`try_emplace` and `insert_or_assign` misspecified","2015-05 (Lenexa)","{{Complete}}","","[#103281](https://github.com/llvm/llvm-project/issues/103281)",""
+"[LWG2467](https://wg21.link/LWG2467)","`is_always_equal` has slightly inconsistent default","2015-05 (Lenexa)","{{Complete}}","","[#103282](https://github.com/llvm/llvm-project/issues/103282)",""
+"[LWG2470](https://wg21.link/LWG2470)","Allocator's destroy function should be allowed to fail to instantiate","2015-05 (Lenexa)","{{Complete}}","","[#103283](https://github.com/llvm/llvm-project/issues/103283)",""
+"[LWG2482](https://wg21.link/LWG2482)","[c.strings] Table 73 mentions nonexistent functions","2015-05 (Lenexa)","{{Complete}}","","[#103284](https://github.com/llvm/llvm-project/issues/103284)",""
+"[LWG2488](https://wg21.link/LWG2488)","Placeholders should be allowed and encouraged to be constexpr","2015-05 (Lenexa)","{{Complete}}","","[#103285](https://github.com/llvm/llvm-project/issues/103285)",""
"","","","","","",""
-"`LWG1169 <https://wg21.link/LWG1169>`__","``num_get``\ not fully compatible with ``strto*``\ ","2015-10 (Kona)","|Complete|","","`#103286 <https://github.com/llvm/llvm-project/issues/103286>`__",""
-"`LWG2072 <https://wg21.link/LWG2072>`__","Unclear wording about capacity of temporary buffers","2015-10 (Kona)","|Complete|","","`#103287 <https://github.com/llvm/llvm-project/issues/103287>`__",""
-"`LWG2101 <https://wg21.link/LWG2101>`__","Some transformation types can produce impossible types","2015-10 (Kona)","|Complete|","","`#103288 <https://github.com/llvm/llvm-project/issues/103288>`__",""
-"`LWG2111 <https://wg21.link/LWG2111>`__","Which ``unexpected``\ /``terminate``\ handler is called from the exception handling runtime?","2015-10 (Kona)","|Complete|","","`#103289 <https://github.com/llvm/llvm-project/issues/103289>`__",""
-"`LWG2119 <https://wg21.link/LWG2119>`__","Missing ``hash``\ specializations for extended integer types","2015-10 (Kona)","|Complete|","","`#103290 <https://github.com/llvm/llvm-project/issues/103290>`__",""
-"`LWG2127 <https://wg21.link/LWG2127>`__","Move-construction with ``raw_storage_iterator``\ ","2015-10 (Kona)","|Complete|","","`#103291 <https://github.com/llvm/llvm-project/issues/103291>`__",""
-"`LWG2133 <https://wg21.link/LWG2133>`__","Attitude to overloaded comma for iterators","2015-10 (Kona)","|Complete|","","`#103292 <https://github.com/llvm/llvm-project/issues/103292>`__",""
-"`LWG2156 <https://wg21.link/LWG2156>`__","Unordered containers' ``reserve(n)``\ reserves for ``n-1``\ elements","2015-10 (Kona)","|Complete|","","`#103293 <https://github.com/llvm/llvm-project/issues/103293>`__",""
-"`LWG2218 <https://wg21.link/LWG2218>`__","Unclear how containers use ``allocator_traits::construct()``\ ","2015-10 (Kona)","|Complete|","","`#103294 <https://github.com/llvm/llvm-project/issues/103294>`__",""
-"`LWG2219 <https://wg21.link/LWG2219>`__","``*INVOKE*``\ -ing a pointer to member with a ``reference_wrapper``\ as the object expression","2015-10 (Kona)","|Complete|","","`#103295 <https://github.com/llvm/llvm-project/issues/103295>`__",""
-"`LWG2224 <https://wg21.link/LWG2224>`__","Ambiguous status of access to non-live objects","2015-10 (Kona)","|Complete|","","`#103296 <https://github.com/llvm/llvm-project/issues/103296>`__",""
-"`LWG2234 <https://wg21.link/LWG2234>`__","``assert()``\ should allow usage in constant expressions","2015-10 (Kona)","|Complete|","","`#103297 <https://github.com/llvm/llvm-project/issues/103297>`__",""
-"`LWG2244 <https://wg21.link/LWG2244>`__","Issue on ``basic_istream::seekg``\ ","2015-10 (Kona)","|Complete|","","`#103312 <https://github.com/llvm/llvm-project/issues/103312>`__",""
-"`LWG2250 <https://wg21.link/LWG2250>`__","Follow-up On Library Issue 2207","2015-10 (Kona)","|Complete|","","`#103313 <https://github.com/llvm/llvm-project/issues/103313>`__",""
-"`LWG2259 <https://wg21.link/LWG2259>`__","Issues in 17.6.5.5 rules for member functions","2015-10 (Kona)","|Complete|","","`#103314 <https://github.com/llvm/llvm-project/issues/103314>`__",""
-"`LWG2273 <https://wg21.link/LWG2273>`__","``regex_match``\ ambiguity","2015-10 (Kona)","|Complete|","","`#103315 <https://github.com/llvm/llvm-project/issues/103315>`__",""
-"`LWG2336 <https://wg21.link/LWG2336>`__","``is_trivially_constructible``\ /``is_trivially_assignable``\ traits are always false","2015-10 (Kona)","|Complete|","","`#103316 <https://github.com/llvm/llvm-project/issues/103316>`__",""
-"`LWG2353 <https://wg21.link/LWG2353>`__","``std::next``\ is over-constrained","2015-10 (Kona)","|Complete|","","`#103317 <https://github.com/llvm/llvm-project/issues/103317>`__",""
-"`LWG2367 <https://wg21.link/LWG2367>`__","``pair``\ and ``tuple``\ are not correctly implemented for ``is_constructible``\ with no args","2015-10 (Kona)","|Complete|","","`#103318 <https://github.com/llvm/llvm-project/issues/103318>`__",""
-"`LWG2380 <https://wg21.link/LWG2380>`__","May ``<cstdlib>``\ provide ``long ::abs(long)``\ and ``long long ::abs(long long)``\ ?","2015-10 (Kona)","|Complete|","","`#103319 <https://github.com/llvm/llvm-project/issues/103319>`__",""
-"`LWG2384 <https://wg21.link/LWG2384>`__","Allocator's ``deallocate``\ function needs better specification","2015-10 (Kona)","|Complete|","","`#103320 <https://github.com/llvm/llvm-project/issues/103320>`__",""
-"`LWG2385 <https://wg21.link/LWG2385>`__","``function::assign``\ allocator argument doesn't make sense","2015-10 (Kona)","|Complete|","","`#103321 <https://github.com/llvm/llvm-project/issues/103321>`__",""
-"`LWG2435 <https://wg21.link/LWG2435>`__","``reference_wrapper::operator()``\ 's Remark should be deleted","2015-10 (Kona)","|Complete|","","`#103322 <https://github.com/llvm/llvm-project/issues/103322>`__",""
-"`LWG2447 <https://wg21.link/LWG2447>`__","Allocators and ``volatile``\ -qualified value types","2015-10 (Kona)","|Complete|","","`#103323 <https://github.com/llvm/llvm-project/issues/103323>`__",""
-"`LWG2462 <https://wg21.link/LWG2462>`__","``std::ios_base::failure``\ is overspecified","2015-10 (Kona)","|Complete|","","`#103324 <https://github.com/llvm/llvm-project/issues/103324>`__",""
-"`LWG2466 <https://wg21.link/LWG2466>`__","``allocator_traits::max_size()``\ default behavior is incorrect","2015-10 (Kona)","|Complete|","","`#103325 <https://github.com/llvm/llvm-project/issues/103325>`__",""
-"`LWG2469 <https://wg21.link/LWG2469>`__","Wrong specification of Requires clause of ``operator[]``\ for ``map``\ and ``unordered_map``\ ","2015-10 (Kona)","|Complete|","","`#103326 <https://github.com/llvm/llvm-project/issues/103326>`__",""
-"`LWG2473 <https://wg21.link/LWG2473>`__","``basic_filebuf``\ 's relation to C ``FILE``\ semantics","2015-10 (Kona)","|Complete|","","`#103327 <https://github.com/llvm/llvm-project/issues/103327>`__",""
-"`LWG2476 <https://wg21.link/LWG2476>`__","``scoped_allocator_adaptor``\ is not assignable","2015-10 (Kona)","|Complete|","","`#103328 <https://github.com/llvm/llvm-project/issues/103328>`__",""
-"`LWG2477 <https://wg21.link/LWG2477>`__","Inconsistency of wordings in ``std::vector::erase()``\ and ``std::deque::erase()``\ ","2015-10 (Kona)","|Complete|","","`#103329 <https://github.com/llvm/llvm-project/issues/103329>`__",""
-"`LWG2483 <https://wg21.link/LWG2483>`__","``throw_with_nested()``\ should use ``is_final``\ ","2015-10 (Kona)","|Complete|","","`#103330 <https://github.com/llvm/llvm-project/issues/103330>`__",""
-"`LWG2484 <https://wg21.link/LWG2484>`__","``rethrow_if_nested()``\ is doubly unimplementable","2015-10 (Kona)","|Complete|","","`#103331 <https://github.com/llvm/llvm-project/issues/103331>`__",""
-"`LWG2485 <https://wg21.link/LWG2485>`__","``get()``\ should be overloaded for ``const tuple&&``\ ","2015-10 (Kona)","|Complete|","","`#103332 <https://github.com/llvm/llvm-project/issues/103332>`__",""
-"`LWG2486 <https://wg21.link/LWG2486>`__","``mem_fn()``\ should be required to use perfect forwarding","2015-10 (Kona)","|Complete|","","`#103333 <https://github.com/llvm/llvm-project/issues/103333>`__",""
-"`LWG2487 <https://wg21.link/LWG2487>`__","``bind()``\ should be ``const``\ -overloaded, not *cv*-overloaded","2015-10 (Kona)","|Complete|","","`#103334 <https://github.com/llvm/llvm-project/issues/103334>`__",""
-"`LWG2489 <https://wg21.link/LWG2489>`__","``mem_fn()``\ should be ``noexcept``\ ","2015-10 (Kona)","|Complete|","","`#103335 <https://github.com/llvm/llvm-project/issues/103335>`__",""
-"`LWG2492 <https://wg21.link/LWG2492>`__","Clarify requirements for ``comp``\ ","2015-10 (Kona)","|Complete|","","`#103336 <https://github.com/llvm/llvm-project/issues/103336>`__",""
-"`LWG2495 <https://wg21.link/LWG2495>`__","There is no such thing as an Exception Safety element","2015-10 (Kona)","|Complete|","","`#103337 <https://github.com/llvm/llvm-project/issues/103337>`__",""
+"[LWG1169](https://wg21.link/LWG1169)","`num_get` not fully compatible with `strto*` ","2015-10 (Kona)","{{Complete}}","","[#103286](https://github.com/llvm/llvm-project/issues/103286)",""
+"[LWG2072](https://wg21.link/LWG2072)","Unclear wording about capacity of temporary buffers","2015-10 (Kona)","{{Complete}}","","[#103287](https://github.com/llvm/llvm-project/issues/103287)",""
+"[LWG2101](https://wg21.link/LWG2101)","Some transformation types can produce impossible types","2015-10 (Kona)","{{Complete}}","","[#103288](https://github.com/llvm/llvm-project/issues/103288)",""
+"[LWG2111](https://wg21.link/LWG2111)","Which `unexpected` / `terminate` handler is called from the exception handling runtime?","2015-10 (Kona)","{{Complete}}","","[#103289](https://github.com/llvm/llvm-project/issues/103289)",""
+"[LWG2119](https://wg21.link/LWG2119)","Missing `hash` specializations for extended integer types","2015-10 (Kona)","{{Complete}}","","[#103290](https://github.com/llvm/llvm-project/issues/103290)",""
+"[LWG2127](https://wg21.link/LWG2127)","Move-construction with `raw_storage_iterator` ","2015-10 (Kona)","{{Complete}}","","[#103291](https://github.com/llvm/llvm-project/issues/103291)",""
+"[LWG2133](https://wg21.link/LWG2133)","Attitude to overloaded comma for iterators","2015-10 (Kona)","{{Complete}}","","[#103292](https://github.com/llvm/llvm-project/issues/103292)",""
+"[LWG2156](https://wg21.link/LWG2156)","Unordered containers' `reserve(n)` reserves for `n-1` elements","2015-10 (Kona)","{{Complete}}","","[#103293](https://github.com/llvm/llvm-project/issues/103293)",""
+"[LWG2218](https://wg21.link/LWG2218)","Unclear how containers use `allocator_traits::construct()` ","2015-10 (Kona)","{{Complete}}","","[#103294](https://github.com/llvm/llvm-project/issues/103294)",""
+"[LWG2219](https://wg21.link/LWG2219)","`*INVOKE*` -ing a pointer to member with a `reference_wrapper` as the object expression","2015-10 (Kona)","{{Complete}}","","[#103295](https://github.com/llvm/llvm-project/issues/103295)",""
+"[LWG2224](https://wg21.link/LWG2224)","Ambiguous status of access to non-live objects","2015-10 (Kona)","{{Complete}}","","[#103296](https://github.com/llvm/llvm-project/issues/103296)",""
+"[LWG2234](https://wg21.link/LWG2234)","`assert()` should allow usage in constant expressions","2015-10 (Kona)","{{Complete}}","","[#103297](https://github.com/llvm/llvm-project/issues/103297)",""
+"[LWG2244](https://wg21.link/LWG2244)","Issue on `basic_istream::seekg` ","2015-10 (Kona)","{{Complete}}","","[#103312](https://github.com/llvm/llvm-project/issues/103312)",""
+"[LWG2250](https://wg21.link/LWG2250)","Follow-up On Library Issue 2207","2015-10 (Kona)","{{Complete}}","","[#103313](https://github.com/llvm/llvm-project/issues/103313)",""
+"[LWG2259](https://wg21.link/LWG2259)","Issues in 17.6.5.5 rules for member functions","2015-10 (Kona)","{{Complete}}","","[#103314](https://github.com/llvm/llvm-project/issues/103314)",""
+"[LWG2273](https://wg21.link/LWG2273)","`regex_match` ambiguity","2015-10 (Kona)","{{Complete}}","","[#103315](https://github.com/llvm/llvm-project/issues/103315)",""
+"[LWG2336](https://wg21.link/LWG2336)","`is_trivially_constructible` /`is_trivially_assignable` traits are always false","2015-10 (Kona)","{{Complete}}","","[#103316](https://github.com/llvm/llvm-project/issues/103316)",""
+"[LWG2353](https://wg21.link/LWG2353)","`std::next` is over-constrained","2015-10 (Kona)","{{Complete}}","","[#103317](https://github.com/llvm/llvm-project/issues/103317)",""
+"[LWG2367](https://wg21.link/LWG2367)","`pair` and `tuple` are not correctly implemented for `is_constructible` with no args","2015-10 (Kona)","{{Complete}}","","[#103318](https://github.com/llvm/llvm-project/issues/103318)",""
+"[LWG2380](https://wg21.link/LWG2380)","May `<cstdlib>` provide `long ::abs(long)` and `long long ::abs(long long)` ?","2015-10 (Kona)","{{Complete}}","","[#103319](https://github.com/llvm/llvm-project/issues/103319)",""
+"[LWG2384](https://wg21.link/LWG2384)","Allocator's `deallocate` function needs better specification","2015-10 (Kona)","{{Complete}}","","[#103320](https://github.com/llvm/llvm-project/issues/103320)",""
+"[LWG2385](https://wg21.link/LWG2385)","`function::assign` allocator argument doesn't make sense","2015-10 (Kona)","{{Complete}}","","[#103321](https://github.com/llvm/llvm-project/issues/103321)",""
+"[LWG2435](https://wg21.link/LWG2435)","`reference_wrapper::operator()` 's Remark should be deleted","2015-10 (Kona)","{{Complete}}","","[#103322](https://github.com/llvm/llvm-project/issues/103322)",""
+"[LWG2447](https://wg21.link/LWG2447)","Allocators and `volatile` -qualified value types","2015-10 (Kona)","{{Complete}}","","[#103323](https://github.com/llvm/llvm-project/issues/103323)",""
+"[LWG2462](https://wg21.link/LWG2462)","`std::ios_base::failure` is overspecified","2015-10 (Kona)","{{Complete}}","","[#103324](https://github.com/llvm/llvm-project/issues/103324)",""
+"[LWG2466](https://wg21.link/LWG2466)","`allocator_traits::max_size()` default behavior is incorrect","2015-10 (Kona)","{{Complete}}","","[#103325](https://github.com/llvm/llvm-project/issues/103325)",""
+"[LWG2469](https://wg21.link/LWG2469)","Wrong specification of Requires clause of `operator[]` for `map` and `unordered_map` ","2015-10 (Kona)","{{Complete}}","","[#103326](https://github.com/llvm/llvm-project/issues/103326)",""
+"[LWG2473](https://wg21.link/LWG2473)","`basic_filebuf` 's relation to C `FILE` semantics","2015-10 (Kona)","{{Complete}}","","[#103327](https://github.com/llvm/llvm-project/issues/103327)",""
+"[LWG2476](https://wg21.link/LWG2476)","`scoped_allocator_adaptor` is not assignable","2015-10 (Kona)","{{Complete}}","","[#103328](https://github.com/llvm/llvm-project/issues/103328)",""
+"[LWG2477](https://wg21.link/LWG2477)","Inconsistency of wordings in `std::vector::erase()` and `std::deque::erase()` ","2015-10 (Kona)","{{Complete}}","","[#103329](https://github.com/llvm/llvm-project/issues/103329)",""
+"[LWG2483](https://wg21.link/LWG2483)","`throw_with_nested()` should use `is_final` ","2015-10 (Kona)","{{Complete}}","","[#103330](https://github.com/llvm/llvm-project/issues/103330)",""
+"[LWG2484](https://wg21.link/LWG2484)","`rethrow_if_nested()` is doubly unimplementable","2015-10 (Kona)","{{Complete}}","","[#103331](https://github.com/llvm/llvm-project/issues/103331)",""
+"[LWG2485](https://wg21.link/LWG2485)","`get()` should be overloaded for `const tuple&&` ","2015-10 (Kona)","{{Complete}}","","[#103332](https://github.com/llvm/llvm-project/issues/103332)",""
+"[LWG2486](https://wg21.link/LWG2486)","`mem_fn()` should be required to use perfect forwarding","2015-10 (Kona)","{{Complete}}","","[#103333](https://github.com/llvm/llvm-project/issues/103333)",""
+"[LWG2487](https://wg21.link/LWG2487)","`bind()` should be `const` -overloaded, not *cv*-overloaded","2015-10 (Kona)","{{Complete}}","","[#103334](https://github.com/llvm/llvm-project/issues/103334)",""
+"[LWG2489](https://wg21.link/LWG2489)","`mem_fn()` should be `noexcept` ","2015-10 (Kona)","{{Complete}}","","[#103335](https://github.com/llvm/llvm-project/issues/103335)",""
+"[LWG2492](https://wg21.link/LWG2492)","Clarify requirements for `comp` ","2015-10 (Kona)","{{Complete}}","","[#103336](https://github.com/llvm/llvm-project/issues/103336)",""
+"[LWG2495](https://wg21.link/LWG2495)","There is no such thing as an Exception Safety element","2015-10 (Kona)","{{Complete}}","","[#103337](https://github.com/llvm/llvm-project/issues/103337)",""
"","","","","","",""
-"`LWG2192 <https://wg21.link/LWG2192>`__","Validity and return type of ``std::abs(0u)``\ is unclear","2016-02 (Jacksonville)","|Complete|","","`#103338 <https://github.com/llvm/llvm-project/issues/103338>`__",""
-"`LWG2276 <https://wg21.link/LWG2276>`__","Missing requirement on ``std::promise::set_exception``\ ","2016-02 (Jacksonville)","|Complete|","","`#103339 <https://github.com/llvm/llvm-project/issues/103339>`__",""
-"`LWG2296 <https://wg21.link/LWG2296>`__","``std::addressof``\ should be ``constexpr``\ ","2016-02 (Jacksonville)","|Complete|","","`#103340 <https://github.com/llvm/llvm-project/issues/103340>`__",""
-"`LWG2450 <https://wg21.link/LWG2450>`__","``(greater|less|greater_equal|less_equal)<void>``\ do not yield a total order for pointers","2016-02 (Jacksonville)","|Complete|","","`#103341 <https://github.com/llvm/llvm-project/issues/103341>`__",""
-"`LWG2520 <https://wg21.link/LWG2520>`__","N4089 broke initializing ``unique_ptr<T[]>``\ from a ``nullptr``\ ","2016-02 (Jacksonville)","|Complete|","","`#103342 <https://github.com/llvm/llvm-project/issues/103342>`__",""
-"`LWG2522 <https://wg21.link/LWG2522>`__","[fund.ts.v2] Contradiction in ``set_default_resource``\ specification","2016-02 (Jacksonville)","|Complete|","","`#103344 <https://github.com/llvm/llvm-project/issues/103344>`__",""
-"`LWG2523 <https://wg21.link/LWG2523>`__","``std::promise``\ synopsis shows two ``set_value_at_thread_exit()``\ 's for no apparent reason","2016-02 (Jacksonville)","|Complete|","","`#103345 <https://github.com/llvm/llvm-project/issues/103345>`__",""
-"`LWG2537 <https://wg21.link/LWG2537>`__","Constructors for ``priority_queue``\ taking allocators should call ``make_heap``\ ","2016-02 (Jacksonville)","|Complete|","","`#103346 <https://github.com/llvm/llvm-project/issues/103346>`__",""
-"`LWG2539 <https://wg21.link/LWG2539>`__","[fund.ts.v2] ``invocation_trait``\ definition definition doesn't work for surrogate call functions","2016-02 (Jacksonville)","","","`#99954 <https://github.com/llvm/llvm-project/issues/99954>`__",""
-"`LWG2545 <https://wg21.link/LWG2545>`__","Simplify wording for ``bind``\ without explicitly specified return type","2016-02 (Jacksonville)","|Complete|","","`#103347 <https://github.com/llvm/llvm-project/issues/103347>`__",""
-"`LWG2557 <https://wg21.link/LWG2557>`__","Logical operator traits are broken in the zero-argument case","2016-02 (Jacksonville)","|Complete|","","`#103348 <https://github.com/llvm/llvm-project/issues/103348>`__",""
-"`LWG2558 <https://wg21.link/LWG2558>`__","[fund.ts.v2] Logical operator traits are broken in the zero-argument case","2016-02 (Jacksonville)","|Complete|","","`#103349 <https://github.com/llvm/llvm-project/issues/103349>`__",""
-"`LWG2559 <https://wg21.link/LWG2559>`__","Error in LWG 2234's resolution","2016-02 (Jacksonville)","|Complete|","","`#103350 <https://github.com/llvm/llvm-project/issues/103350>`__",""
-"`LWG2560 <https://wg21.link/LWG2560>`__","``is_constructible``\ underspecified when applied to a function type","2016-02 (Jacksonville)","|Complete|","","`#103351 <https://github.com/llvm/llvm-project/issues/103351>`__",""
-"`LWG2565 <https://wg21.link/LWG2565>`__","``std::function``\ 's move constructor should guarantee nothrow for ``reference_wrapper``\ s and function pointers","2016-02 (Jacksonville)","|Complete|","","`#103352 <https://github.com/llvm/llvm-project/issues/103352>`__",""
-"`LWG2566 <https://wg21.link/LWG2566>`__","Requirements on the first template parameter of container adaptors","2016-02 (Jacksonville)","|Complete|","","`#103353 <https://github.com/llvm/llvm-project/issues/103353>`__",""
-"`LWG2571 <https://wg21.link/LWG2571>`__","|sect|\ [map.modifiers]/2 imposes nonsensical requirement on ``insert(InputIterator, InputIterator)``\ ","2016-02 (Jacksonville)","|Complete|","","`#103354 <https://github.com/llvm/llvm-project/issues/103354>`__",""
-"`LWG2572 <https://wg21.link/LWG2572>`__","The remarks for ``shared_ptr::operator*``\ should apply to *cv*-qualified ``void``\ as well","2016-02 (Jacksonville)","|Complete|","","`#103355 <https://github.com/llvm/llvm-project/issues/103355>`__",""
-"`LWG2574 <https://wg21.link/LWG2574>`__","[fund.ts.v2] ``std::experimental::function::operator=(F&&)``\ should be constrained","2016-02 (Jacksonville)","|Complete|","","`#103356 <https://github.com/llvm/llvm-project/issues/103356>`__",""
-"`LWG2575 <https://wg21.link/LWG2575>`__","[fund.ts.v2] ``experimental::function::assign``\ should be removed","2016-02 (Jacksonville)","","","`#99959 <https://github.com/llvm/llvm-project/issues/99959>`__",""
-"`LWG2576 <https://wg21.link/LWG2576>`__","``istream_iterator``\ and ``ostream_iterator``\ should use ``std::addressof``\ ","2016-02 (Jacksonville)","|Complete|","","`#103357 <https://github.com/llvm/llvm-project/issues/103357>`__",""
-"`LWG2577 <https://wg21.link/LWG2577>`__","``{shared,unique}_lock``\ should use ``std::addressof``\ ","2016-02 (Jacksonville)","|Complete|","","`#103358 <https://github.com/llvm/llvm-project/issues/103358>`__",""
-"`LWG2579 <https://wg21.link/LWG2579>`__","Inconsistency wrt Allocators in ``basic_string``\ assignment vs. ``basic_string::assign``\ ","2016-02 (Jacksonville)","|Complete|","","`#103359 <https://github.com/llvm/llvm-project/issues/103359>`__",""
-"`LWG2581 <https://wg21.link/LWG2581>`__","Specialization of ``<type_traits>``\ variable templates should be prohibited","2016-02 (Jacksonville)","|Complete|","","`#103360 <https://github.com/llvm/llvm-project/issues/103360>`__",""
-"`LWG2582 <https://wg21.link/LWG2582>`__","|sect|\ [res.on.functions]/2's prohibition against incomplete types shouldn't apply to type traits","2016-02 (Jacksonville)","|Complete|","","`#103361 <https://github.com/llvm/llvm-project/issues/103361>`__",""
-"`LWG2583 <https://wg21.link/LWG2583>`__","There is no way to supply an allocator for ``basic_string(str, pos)``\ ","2016-02 (Jacksonville)","|Complete|","","`#103362 <https://github.com/llvm/llvm-project/issues/103362>`__",""
-"`LWG2585 <https://wg21.link/LWG2585>`__","``forward_list::resize(size_type, const value_type&)``\ effects incorrect","2016-02 (Jacksonville)","|Complete|","","`#103363 <https://github.com/llvm/llvm-project/issues/103363>`__",""
-"`LWG2586 <https://wg21.link/LWG2586>`__","Wrong value category used in ``scoped_allocator_adaptor::construct()``\ ","2016-02 (Jacksonville)","|Complete|","","`#103364 <https://github.com/llvm/llvm-project/issues/103364>`__",""
-"`LWG2590 <https://wg21.link/LWG2590>`__","Aggregate initialization for ``std::array``\ ","2016-02 (Jacksonville)","|Complete|","","`#103365 <https://github.com/llvm/llvm-project/issues/103365>`__",""
+"[LWG2192](https://wg21.link/LWG2192)","Validity and return type of `std::abs(0u)` is unclear","2016-02 (Jacksonville)","{{Complete}}","","[#103338](https://github.com/llvm/llvm-project/issues/103338)",""
+"[LWG2276](https://wg21.link/LWG2276)","Missing requirement on `std::promise::set_exception` ","2016-02 (Jacksonville)","{{Complete}}","","[#103339](https://github.com/llvm/llvm-project/issues/103339)",""
+"[LWG2296](https://wg21.link/LWG2296)","`std::addressof` should be `constexpr` ","2016-02 (Jacksonville)","{{Complete}}","","[#103340](https://github.com/llvm/llvm-project/issues/103340)",""
+"[LWG2450](https://wg21.link/LWG2450)","`(greater|less|greater_equal|less_equal)<void>` do not yield a total order for pointers","2016-02 (Jacksonville)","{{Complete}}","","[#103341](https://github.com/llvm/llvm-project/issues/103341)",""
+"[LWG2520](https://wg21.link/LWG2520)","N4089 broke initializing `unique_ptr<T[]>` from a `nullptr` ","2016-02 (Jacksonville)","{{Complete}}","","[#103342](https://github.com/llvm/llvm-project/issues/103342)",""
+"[LWG2522](https://wg21.link/LWG2522)","[fund.ts.v2] Contradiction in `set_default_resource` specification","2016-02 (Jacksonville)","{{Complete}}","","[#103344](https://github.com/llvm/llvm-project/issues/103344)",""
+"[LWG2523](https://wg21.link/LWG2523)","`std::promise` synopsis shows two `set_value_at_thread_exit()` 's for no apparent reason","2016-02 (Jacksonville)","{{Complete}}","","[#103345](https://github.com/llvm/llvm-project/issues/103345)",""
+"[LWG2537](https://wg21.link/LWG2537)","Constructors for `priority_queue` taking allocators should call `make_heap` ","2016-02 (Jacksonville)","{{Complete}}","","[#103346](https://github.com/llvm/llvm-project/issues/103346)",""
+"[LWG2539](https://wg21.link/LWG2539)","[fund.ts.v2] `invocation_trait` definition definition doesn't work for surrogate call functions","2016-02 (Jacksonville)","","","[#99954](https://github.com/llvm/llvm-project/issues/99954)",""
+"[LWG2545](https://wg21.link/LWG2545)","Simplify wording for `bind` without explicitly specified return type","2016-02 (Jacksonville)","{{Complete}}","","[#103347](https://github.com/llvm/llvm-project/issues/103347)",""
+"[LWG2557](https://wg21.link/LWG2557)","Logical operator traits are broken in the zero-argument case","2016-02 (Jacksonville)","{{Complete}}","","[#103348](https://github.com/llvm/llvm-project/issues/103348)",""
+"[LWG2558](https://wg21.link/LWG2558)","[fund.ts.v2] Logical operator traits are broken in the zero-argument case","2016-02 (Jacksonville)","{{Complete}}","","[#103349](https://github.com/llvm/llvm-project/issues/103349)",""
+"[LWG2559](https://wg21.link/LWG2559)","Error in LWG 2234's resolution","2016-02 (Jacksonville)","{{Complete}}","","[#103350](https://github.com/llvm/llvm-project/issues/103350)",""
+"[LWG2560](https://wg21.link/LWG2560)","`is_constructible` underspecified when applied to a function type","2016-02 (Jacksonville)","{{Complete}}","","[#103351](https://github.com/llvm/llvm-project/issues/103351)",""
+"[LWG2565](https://wg21.link/LWG2565)","`std::function` 's move constructor should guarantee nothrow for `reference_wrapper` s and function pointers","2016-02 (Jacksonville)","{{Complete}}","","[#103352](https://github.com/llvm/llvm-project/issues/103352)",""
+"[LWG2566](https://wg21.link/LWG2566)","Requirements on the first template parameter of container adaptors","2016-02 (Jacksonville)","{{Complete}}","","[#103353](https://github.com/llvm/llvm-project/issues/103353)",""
+"[LWG2571](https://wg21.link/LWG2571)","§[map.modifiers]/2 imposes nonsensical requirement on `insert(InputIterator, InputIterator)` ","2016-02 (Jacksonville)","{{Complete}}","","[#103354](https://github.com/llvm/llvm-project/issues/103354)",""
+"[LWG2572](https://wg21.link/LWG2572)","The remarks for `shared_ptr::operator*` should apply to *cv*-qualified `void` as well","2016-02 (Jacksonville)","{{Complete}}","","[#103355](https://github.com/llvm/llvm-project/issues/103355)",""
+"[LWG2574](https://wg21.link/LWG2574)","[fund.ts.v2] `std::experimental::function::operator=(F&&)` should be constrained","2016-02 (Jacksonville)","{{Complete}}","","[#103356](https://github.com/llvm/llvm-project/issues/103356)",""
+"[LWG2575](https://wg21.link/LWG2575)","[fund.ts.v2] `experimental::function::assign` should be removed","2016-02 (Jacksonville)","","","[#99959](https://github.com/llvm/llvm-project/issues/99959)",""
+"[LWG2576](https://wg21.link/LWG2576)","`istream_iterator` and `ostream_iterator` should use `std::addressof` ","2016-02 (Jacksonville)","{{Complete}}","","[#103357](https://github.com/llvm/llvm-project/issues/103357)",""
+"[LWG2577](https://wg21.link/LWG2577)","`{shared,unique}_lock` should use `std::addressof` ","2016-02 (Jacksonville)","{{Complete}}","","[#103358](https://github.com/llvm/llvm-project/issues/103358)",""
+"[LWG2579](https://wg21.link/LWG2579)","Inconsistency wrt Allocators in `basic_string` assignment vs. `basic_string::assign` ","2016-02 (Jacksonville)","{{Complete}}","","[#103359](https://github.com/llvm/llvm-project/issues/103359)",""
+"[LWG2581](https://wg21.link/LWG2581)","Specialization of `<type_traits>` variable templates should be prohibited","2016-02 (Jacksonville)","{{Complete}}","","[#103360](https://github.com/llvm/llvm-project/issues/103360)",""
+"[LWG2582](https://wg21.link/LWG2582)","§[res.on.functions]/2's prohibition against incomplete types shouldn't apply to type traits","2016-02 (Jacksonville)","{{Complete}}","","[#103361](https://github.com/llvm/llvm-project/issues/103361)",""
+"[LWG2583](https://wg21.link/LWG2583)","There is no way to supply an allocator for `basic_string(str, pos)` ","2016-02 (Jacksonville)","{{Complete}}","","[#103362](https://github.com/llvm/llvm-project/issues/103362)",""
+"[LWG2585](https://wg21.link/LWG2585)","`forward_list::resize(size_type, const value_type&)` effects incorrect","2016-02 (Jacksonville)","{{Complete}}","","[#103363](https://github.com/llvm/llvm-project/issues/103363)",""
+"[LWG2586](https://wg21.link/LWG2586)","Wrong value category used in `scoped_allocator_adaptor::construct()` ","2016-02 (Jacksonville)","{{Complete}}","","[#103364](https://github.com/llvm/llvm-project/issues/103364)",""
+"[LWG2590](https://wg21.link/LWG2590)","Aggregate initialization for `std::array` ","2016-02 (Jacksonville)","{{Complete}}","","[#103365](https://github.com/llvm/llvm-project/issues/103365)",""
"","","","","","",""
-"`LWG2181 <https://wg21.link/LWG2181>`__","Exceptions from seed sequence operations","2016-06 (Oulu)","|Complete|","","`#103367 <https://github.com/llvm/llvm-project/issues/103367>`__",""
-"`LWG2309 <https://wg21.link/LWG2309>`__","mutex::lock() should not throw device_or_resource_busy","2016-06 (Oulu)","|Complete|","","`#103368 <https://github.com/llvm/llvm-project/issues/103368>`__",""
-"`LWG2310 <https://wg21.link/LWG2310>`__","Public exposition only member in std::array","2016-06 (Oulu)","|Complete|","","`#103369 <https://github.com/llvm/llvm-project/issues/103369>`__",""
-"`LWG2312 <https://wg21.link/LWG2312>`__","tuple's constructor constraints need to be phrased more precisely","2016-06 (Oulu)","|Complete|","","`#103370 <https://github.com/llvm/llvm-project/issues/103370>`__",""
-"`LWG2328 <https://wg21.link/LWG2328>`__","Rvalue stream extraction should use perfect forwarding","2016-06 (Oulu)","|Complete|","","`#103372 <https://github.com/llvm/llvm-project/issues/103372>`__",""
-"`LWG2393 <https://wg21.link/LWG2393>`__","std::function's Callable definition is broken","2016-06 (Oulu)","|Complete|","","`#103373 <https://github.com/llvm/llvm-project/issues/103373>`__",""
-"`LWG2422 <https://wg21.link/LWG2422>`__","``std::numeric_limits<T>::is_modulo``\ description: ""most machines"" errata","2016-06 (Oulu)","|Complete|","","`#103374 <https://github.com/llvm/llvm-project/issues/103374>`__",""
-"`LWG2426 <https://wg21.link/LWG2426>`__","Issue about compare_exchange","2016-06 (Oulu)","|Complete|","","`#103375 <https://github.com/llvm/llvm-project/issues/103375>`__",""
-"`LWG2436 <https://wg21.link/LWG2436>`__","Comparators for associative containers should always be CopyConstructible","2016-06 (Oulu)","|Complete|","","`#103376 <https://github.com/llvm/llvm-project/issues/103376>`__",""
-"`LWG2441 <https://wg21.link/LWG2441>`__","Exact-width atomic typedefs should be provided","2016-06 (Oulu)","|Complete|","","`#103378 <https://github.com/llvm/llvm-project/issues/103378>`__",""
-"`LWG2451 <https://wg21.link/LWG2451>`__","[fund.ts.v2] optional should 'forward' T's implicit conversions","2016-06 (Oulu)","|Nothing To Do|","","`#103379 <https://github.com/llvm/llvm-project/issues/103379>`__",""
-"`LWG2509 <https://wg21.link/LWG2509>`__","[fund.ts.v2] any_cast doesn't work with rvalue reference targets and cannot move with a value target","2016-06 (Oulu)","|Complete|","","`#103380 <https://github.com/llvm/llvm-project/issues/103380>`__",""
-"`LWG2516 <https://wg21.link/LWG2516>`__","[fund.ts.v2] Public ""exposition only"" members in observer_ptr","2016-06 (Oulu)","|Complete|","18","`#103381 <https://github.com/llvm/llvm-project/issues/103381>`__",""
-"`LWG2542 <https://wg21.link/LWG2542>`__","Missing const requirements for associative containers","2016-06 (Oulu)","","","`#99960 <https://github.com/llvm/llvm-project/issues/99960>`__",""
-"`LWG2549 <https://wg21.link/LWG2549>`__","Tuple EXPLICIT constructor templates that take tuple parameters end up taking references to temporaries and will create dangling references","2016-06 (Oulu)","|Complete|","","`#103382 <https://github.com/llvm/llvm-project/issues/103382>`__",""
-"`LWG2550 <https://wg21.link/LWG2550>`__","Wording of unordered container's clear() method complexity","2016-06 (Oulu)","|Complete|","","`#103383 <https://github.com/llvm/llvm-project/issues/103383>`__",""
-"`LWG2551 <https://wg21.link/LWG2551>`__","[fund.ts.v2] ""Exception safety"" cleanup in library fundamentals required","2016-06 (Oulu)","|Complete|","","`#103384 <https://github.com/llvm/llvm-project/issues/103384>`__",""
-"`LWG2555 <https://wg21.link/LWG2555>`__","[fund.ts.v2] No handling for over-aligned types in optional","2016-06 (Oulu)","|Complete|","","`#103385 <https://github.com/llvm/llvm-project/issues/103385>`__",""
-"`LWG2573 <https://wg21.link/LWG2573>`__","[fund.ts.v2] std::hash<std::experimental::shared_ptr> does not work for arrays","2016-06 (Oulu)","","","`#99961 <https://github.com/llvm/llvm-project/issues/99961>`__",""
-"`LWG2596 <https://wg21.link/LWG2596>`__","vector::data() should use addressof","2016-06 (Oulu)","|Complete|","","`#103386 <https://github.com/llvm/llvm-project/issues/103386>`__",""
-"`LWG2667 <https://wg21.link/LWG2667>`__","path::root_directory() description is confusing","2016-06 (Oulu)","|Complete|","","`#103387 <https://github.com/llvm/llvm-project/issues/103387>`__",""
-"`LWG2669 <https://wg21.link/LWG2669>`__","recursive_directory_iterator effects refers to non-existent functions","2016-06 (Oulu)","|Complete|","","`#103402 <https://github.com/llvm/llvm-project/issues/103402>`__",""
-"`LWG2670 <https://wg21.link/LWG2670>`__","system_complete refers to undefined variable 'base'","2016-06 (Oulu)","|Complete|","","`#103404 <https://github.com/llvm/llvm-project/issues/103404>`__",""
-"`LWG2671 <https://wg21.link/LWG2671>`__","Errors in Copy","2016-06 (Oulu)","|Complete|","","`#103405 <https://github.com/llvm/llvm-project/issues/103405>`__",""
-"`LWG2673 <https://wg21.link/LWG2673>`__","status() effects cannot be implemented as specified","2016-06 (Oulu)","|Complete|","","`#103406 <https://github.com/llvm/llvm-project/issues/103406>`__",""
-"`LWG2674 <https://wg21.link/LWG2674>`__","Bidirectional iterator requirement on path::iterator is very expensive","2016-06 (Oulu)","|Complete|","","`#103407 <https://github.com/llvm/llvm-project/issues/103407>`__",""
-"`LWG2683 <https://wg21.link/LWG2683>`__","filesystem::copy() says ""no effects""","2016-06 (Oulu)","|Complete|","","`#103408 <https://github.com/llvm/llvm-project/issues/103408>`__",""
-"`LWG2684 <https://wg21.link/LWG2684>`__","priority_queue lacking comparator typedef","2016-06 (Oulu)","|Complete|","","`#103412 <https://github.com/llvm/llvm-project/issues/103412>`__",""
-"`LWG2685 <https://wg21.link/LWG2685>`__","shared_ptr deleters must not throw on move construction","2016-06 (Oulu)","|Complete|","","`#103413 <https://github.com/llvm/llvm-project/issues/103413>`__",""
-"`LWG2687 <https://wg21.link/LWG2687>`__","{inclusive,exclusive}_scan misspecified","2016-06 (Oulu)","|Complete|","","`#99963 <https://github.com/llvm/llvm-project/issues/99963>`__",""
-"`LWG2688 <https://wg21.link/LWG2688>`__","clamp misses preconditions and has extraneous condition on result","2016-06 (Oulu)","|Complete|","","`#103414 <https://github.com/llvm/llvm-project/issues/103414>`__",""
-"`LWG2689 <https://wg21.link/LWG2689>`__","Parallel versions of std::copy and std::move shouldn't be in order","2016-06 (Oulu)","|Nothing To Do|","","`#103415 <https://github.com/llvm/llvm-project/issues/103415>`__",""
-"`LWG2698 <https://wg21.link/LWG2698>`__","Effect of assign() on iterators/pointers/references","2016-06 (Oulu)","|Complete|","","`#103416 <https://github.com/llvm/llvm-project/issues/103416>`__",""
-"`LWG2704 <https://wg21.link/LWG2704>`__","recursive_directory_iterator's members should require '``*this`` is dereferenceable'","2016-06 (Oulu)","|Complete|","","`#103417 <https://github.com/llvm/llvm-project/issues/103417>`__",""
-"`LWG2706 <https://wg21.link/LWG2706>`__","Error reporting for recursive_directory_iterator::pop() is under-specified","2016-06 (Oulu)","|Complete|","","`#103418 <https://github.com/llvm/llvm-project/issues/103418>`__",""
-"`LWG2707 <https://wg21.link/LWG2707>`__","path construction and assignment should have ""string_type&&"" overloads","2016-06 (Oulu)","|Complete|","","`#103419 <https://github.com/llvm/llvm-project/issues/103419>`__",""
-"`LWG2709 <https://wg21.link/LWG2709>`__","offsetof is unnecessarily imprecise","2016-06 (Oulu)","|Nothing To Do|","","`#99965 <https://github.com/llvm/llvm-project/issues/99965>`__",""
-"`LWG2710 <https://wg21.link/LWG2710>`__","""Effects: Equivalent to ..."" doesn't count ""Synchronization:"" as determined semantics","2016-06 (Oulu)","|Complete|","","`#103420 <https://github.com/llvm/llvm-project/issues/103420>`__",""
-"`LWG2711 <https://wg21.link/LWG2711>`__","path is convertible from approximately everything under the sun","2016-06 (Oulu)","|Complete|","","`#103421 <https://github.com/llvm/llvm-project/issues/103421>`__",""
-"`LWG2716 <https://wg21.link/LWG2716>`__","Specification of shuffle and sample disallows lvalue URNGs","2016-06 (Oulu)","|Complete|","","`#103422 <https://github.com/llvm/llvm-project/issues/103422>`__",""
-"`LWG2718 <https://wg21.link/LWG2718>`__","Parallelism bug in [algorithms.parallel.exec] p2","2016-06 (Oulu)","","","`#99966 <https://github.com/llvm/llvm-project/issues/99966>`__",""
-"`LWG2719 <https://wg21.link/LWG2719>`__","permissions function should not be noexcept due to narrow contract","2016-06 (Oulu)","|Complete|","","`#103423 <https://github.com/llvm/llvm-project/issues/103423>`__",""
-"`LWG2720 <https://wg21.link/LWG2720>`__","permissions function incorrectly specified for symlinks","2016-06 (Oulu)","|Complete|","","`#103424 <https://github.com/llvm/llvm-project/issues/103424>`__",""
-"`LWG2721 <https://wg21.link/LWG2721>`__","remove_all has incorrect post conditions","2016-06 (Oulu)","|Complete|","","`#103425 <https://github.com/llvm/llvm-project/issues/103425>`__",""
-"`LWG2723 <https://wg21.link/LWG2723>`__","Do directory_iterator and recursive_directory_iterator become the end iterator upon error?","2016-06 (Oulu)","|Complete|","","`#103426 <https://github.com/llvm/llvm-project/issues/103426>`__",""
-"`LWG2724 <https://wg21.link/LWG2724>`__","The protected virtual member functions of memory_resource should be private","2016-06 (Oulu)","|Complete|","16","`#103427 <https://github.com/llvm/llvm-project/issues/103427>`__",""
-"`LWG2725 <https://wg21.link/LWG2725>`__","filesystem::exists(const path&, error_code&) error reporting","2016-06 (Oulu)","|Complete|","","`#103428 <https://github.com/llvm/llvm-project/issues/103428>`__",""
-"`LWG2726 <https://wg21.link/LWG2726>`__","``[recursive_]directory_iterator::increment(error_code&)`` is underspecified","2016-06 (Oulu)","|Complete|","","`#103429 <https://github.com/llvm/llvm-project/issues/103429>`__",""
-"`LWG2727 <https://wg21.link/LWG2727>`__","Parallel algorithms with constexpr specifier","2016-06 (Oulu)","","","`#99968 <https://github.com/llvm/llvm-project/issues/99968>`__",""
-"`LWG2728 <https://wg21.link/LWG2728>`__","status(p).permissions() and symlink_status(p).permissions() are not specified","2016-06 (Oulu)","|Complete|","","`#103430 <https://github.com/llvm/llvm-project/issues/103430>`__",""
+"[LWG2181](https://wg21.link/LWG2181)","Exceptions from seed sequence operations","2016-06 (Oulu)","{{Complete}}","","[#103367](https://github.com/llvm/llvm-project/issues/103367)",""
+"[LWG2309](https://wg21.link/LWG2309)","mutex::lock() should not throw device_or_resource_busy","2016-06 (Oulu)","{{Complete}}","","[#103368](https://github.com/llvm/llvm-project/issues/103368)",""
+"[LWG2310](https://wg21.link/LWG2310)","Public exposition only member in std::array","2016-06 (Oulu)","{{Complete}}","","[#103369](https://github.com/llvm/llvm-project/issues/103369)",""
+"[LWG2312](https://wg21.link/LWG2312)","tuple's constructor constraints need to be phrased more precisely","2016-06 (Oulu)","{{Complete}}","","[#103370](https://github.com/llvm/llvm-project/issues/103370)",""
+"[LWG2328](https://wg21.link/LWG2328)","Rvalue stream extraction should use perfect forwarding","2016-06 (Oulu)","{{Complete}}","","[#103372](https://github.com/llvm/llvm-project/issues/103372)",""
+"[LWG2393](https://wg21.link/LWG2393)","std::function's Callable definition is broken","2016-06 (Oulu)","{{Complete}}","","[#103373](https://github.com/llvm/llvm-project/issues/103373)",""
+"[LWG2422](https://wg21.link/LWG2422)","`std::numeric_limits<T>::is_modulo` description: ""most machines"" errata","2016-06 (Oulu)","{{Complete}}","","[#103374](https://github.com/llvm/llvm-project/issues/103374)",""
+"[LWG2426](https://wg21.link/LWG2426)","Issue about compare_exchange","2016-06 (Oulu)","{{Complete}}","","[#103375](https://github.com/llvm/llvm-project/issues/103375)",""
+"[LWG2436](https://wg21.link/LWG2436)","Comparators for associative containers should always be CopyConstructible","2016-06 (Oulu)","{{Complete}}","","[#103376](https://github.com/llvm/llvm-project/issues/103376)",""
+"[LWG2441](https://wg21.link/LWG2441)","Exact-width atomic typedefs should be provided","2016-06 (Oulu)","{{Complete}}","","[#103378](https://github.com/llvm/llvm-project/issues/103378)",""
+"[LWG2451](https://wg21.link/LWG2451)","[fund.ts.v2] optional should 'forward' T's implicit conversions","2016-06 (Oulu)","{{NothingToDo}}","","[#103379](https://github.com/llvm/llvm-project/issues/103379)",""
+"[LWG2509](https://wg21.link/LWG2509)","[fund.ts.v2] any_cast doesn't work with rvalue reference targets and cannot move with a value target","2016-06 (Oulu)","{{Complete}}","","[#103380](https://github.com/llvm/llvm-project/issues/103380)",""
+"[LWG2516](https://wg21.link/LWG2516)","[fund.ts.v2] Public ""exposition only"" members in observer_ptr","2016-06 (Oulu)","{{Complete}}","18","[#103381](https://github.com/llvm/llvm-project/issues/103381)",""
+"[LWG2542](https://wg21.link/LWG2542)","Missing const requirements for associative containers","2016-06 (Oulu)","","","[#99960](https://github.com/llvm/llvm-project/issues/99960)",""
+"[LWG2549](https://wg21.link/LWG2549)","Tuple EXPLICIT constructor templates that take tuple parameters end up taking references to temporaries and will create dangling references","2016-06 (Oulu)","{{Complete}}","","[#103382](https://github.com/llvm/llvm-project/issues/103382)",""
+"[LWG2550](https://wg21.link/LWG2550)","Wording of unordered container's clear() method complexity","2016-06 (Oulu)","{{Complete}}","","[#103383](https://github.com/llvm/llvm-project/issues/103383)",""
+"[LWG2551](https://wg21.link/LWG2551)","[fund.ts.v2] ""Exception safety"" cleanup in library fundamentals required","2016-06 (Oulu)","{{Complete}}","","[#103384](https://github.com/llvm/llvm-project/issues/103384)",""
+"[LWG2555](https://wg21.link/LWG2555)","[fund.ts.v2] No handling for over-aligned types in optional","2016-06 (Oulu)","{{Complete}}","","[#103385](https://github.com/llvm/llvm-project/issues/103385)",""
+"[LWG2573](https://wg21.link/LWG2573)","[fund.ts.v2] std::hash\<std::experimental::shared_ptr\> does not work for arrays","2016-06 (Oulu)","","","[#99961](https://github.com/llvm/llvm-project/issues/99961)",""
+"[LWG2596](https://wg21.link/LWG2596)","vector::data() should use addressof","2016-06 (Oulu)","{{Complete}}","","[#103386](https://github.com/llvm/llvm-project/issues/103386)",""
+"[LWG2667](https://wg21.link/LWG2667)","path::root_directory() description is confusing","2016-06 (Oulu)","{{Complete}}","","[#103387](https://github.com/llvm/llvm-project/issues/103387)",""
+"[LWG2669](https://wg21.link/LWG2669)","recursive_directory_iterator effects refers to non-existent functions","2016-06 (Oulu)","{{Complete}}","","[#103402](https://github.com/llvm/llvm-project/issues/103402)",""
+"[LWG2670](https://wg21.link/LWG2670)","system_complete refers to undefined variable 'base'","2016-06 (Oulu)","{{Complete}}","","[#103404](https://github.com/llvm/llvm-project/issues/103404)",""
+"[LWG2671](https://wg21.link/LWG2671)","Errors in Copy","2016-06 (Oulu)","{{Complete}}","","[#103405](https://github.com/llvm/llvm-project/issues/103405)",""
+"[LWG2673](https://wg21.link/LWG2673)","status() effects cannot be implemented as specified","2016-06 (Oulu)","{{Complete}}","","[#103406](https://github.com/llvm/llvm-project/issues/103406)",""
+"[LWG2674](https://wg21.link/LWG2674)","Bidirectional iterator requirement on path::iterator is very expensive","2016-06 (Oulu)","{{Complete}}","","[#103407](https://github.com/llvm/llvm-project/issues/103407)",""
+"[LWG2683](https://wg21.link/LWG2683)","filesystem::copy() says ""no effects""","2016-06 (Oulu)","{{Complete}}","","[#103408](https://github.com/llvm/llvm-project/issues/103408)",""
+"[LWG2684](https://wg21.link/LWG2684)","priority_queue lacking comparator typedef","2016-06 (Oulu)","{{Complete}}","","[#103412](https://github.com/llvm/llvm-project/issues/103412)",""
+"[LWG2685](https://wg21.link/LWG2685)","shared_ptr deleters must not throw on move construction","2016-06 (Oulu)","{{Complete}}","","[#103413](https://github.com/llvm/llvm-project/issues/103413)",""
+"[LWG2687](https://wg21.link/LWG2687)","{inclusive,exclusive}_scan misspecified","2016-06 (Oulu)","{{Complete}}","","[#99963](https://github.com/llvm/llvm-project/issues/99963)",""
+"[LWG2688](https://wg21.link/LWG2688)","clamp misses preconditions and has extraneous condition on result","2016-06 (Oulu)","{{Complete}}","","[#103414](https://github.com/llvm/llvm-project/issues/103414)",""
+"[LWG2689](https://wg21.link/LWG2689)","Parallel versions of std::copy and std::move shouldn't be in order","2016-06 (Oulu)","{{NothingToDo}}","","[#103415](https://github.com/llvm/llvm-project/issues/103415)",""
+"[LWG2698](https://wg21.link/LWG2698)","Effect of assign() on iterators/pointers/references","2016-06 (Oulu)","{{Complete}}","","[#103416](https://github.com/llvm/llvm-project/issues/103416)",""
+"[LWG2704](https://wg21.link/LWG2704)","recursive_directory_iterator's members should require '`*this` is dereferenceable'","2016-06 (Oulu)","{{Complete}}","","[#103417](https://github.com/llvm/llvm-project/issues/103417)",""
+"[LWG2706](https://wg21.link/LWG2706)","Error reporting for recursive_directory_iterator::pop() is under-specified","2016-06 (Oulu)","{{Complete}}","","[#103418](https://github.com/llvm/llvm-project/issues/103418)",""
+"[LWG2707](https://wg21.link/LWG2707)","path construction and assignment should have ""string_type&&"" overloads","2016-06 (Oulu)","{{Complete}}","","[#103419](https://github.com/llvm/llvm-project/issues/103419)",""
+"[LWG2709](https://wg21.link/LWG2709)","offsetof is unnecessarily imprecise","2016-06 (Oulu)","{{NothingToDo}}","","[#99965](https://github.com/llvm/llvm-project/issues/99965)",""
+"[LWG2710](https://wg21.link/LWG2710)","""Effects: Equivalent to ..."" doesn't count ""Synchronization:"" as determined semantics","2016-06 (Oulu)","{{Complete}}","","[#103420](https://github.com/llvm/llvm-project/issues/103420)",""
+"[LWG2711](https://wg21.link/LWG2711)","path is convertible from approximately everything under the sun","2016-06 (Oulu)","{{Complete}}","","[#103421](https://github.com/llvm/llvm-project/issues/103421)",""
+"[LWG2716](https://wg21.link/LWG2716)","Specification of shuffle and sample disallows lvalue URNGs","2016-06 (Oulu)","{{Complete}}","","[#103422](https://github.com/llvm/llvm-project/issues/103422)",""
+"[LWG2718](https://wg21.link/LWG2718)","Parallelism bug in [algorithms.parallel.exec] p2","2016-06 (Oulu)","","","[#99966](https://github.com/llvm/llvm-project/issues/99966)",""
+"[LWG2719](https://wg21.link/LWG2719)","permissions function should not be noexcept due to narrow contract","2016-06 (Oulu)","{{Complete}}","","[#103423](https://github.com/llvm/llvm-project/issues/103423)",""
+"[LWG2720](https://wg21.link/LWG2720)","permissions function incorrectly specified for symlinks","2016-06 (Oulu)","{{Complete}}","","[#103424](https://github.com/llvm/llvm-project/issues/103424)",""
+"[LWG2721](https://wg21.link/LWG2721)","remove_all has incorrect post conditions","2016-06 (Oulu)","{{Complete}}","","[#103425](https://github.com/llvm/llvm-project/issues/103425)",""
+"[LWG2723](https://wg21.link/LWG2723)","Do directory_iterator and recursive_directory_iterator become the end iterator upon error?","2016-06 (Oulu)","{{Complete}}","","[#103426](https://github.com/llvm/llvm-project/issues/103426)",""
+"[LWG2724](https://wg21.link/LWG2724)","The protected virtual member functions of memory_resource should be private","2016-06 (Oulu)","{{Complete}}","16","[#103427](https://github.com/llvm/llvm-project/issues/103427)",""
+"[LWG2725](https://wg21.link/LWG2725)","filesystem::exists(const path&, error_code&) error reporting","2016-06 (Oulu)","{{Complete}}","","[#103428](https://github.com/llvm/llvm-project/issues/103428)",""
+"[LWG2726](https://wg21.link/LWG2726)","`[recursive_]directory_iterator::increment(error_code&)` is underspecified","2016-06 (Oulu)","{{Complete}}","","[#103429](https://github.com/llvm/llvm-project/issues/103429)",""
+"[LWG2727](https://wg21.link/LWG2727)","Parallel algorithms with constexpr specifier","2016-06 (Oulu)","","","[#99968](https://github.com/llvm/llvm-project/issues/99968)",""
+"[LWG2728](https://wg21.link/LWG2728)","status(p).permissions() and symlink_status(p).permissions() are not specified","2016-06 (Oulu)","{{Complete}}","","[#103430](https://github.com/llvm/llvm-project/issues/103430)",""
"","","","","","",""
-"`LWG2062 <https://wg21.link/LWG2062>`__","Effect contradictions w/o no-throw guarantee of std::function swaps","2016-11 (Issaquah)","|Complete|","","`#103431 <https://github.com/llvm/llvm-project/issues/103431>`__",""
-"`LWG2166 <https://wg21.link/LWG2166>`__","Heap property underspecified?","2016-11 (Issaquah)","","","`#99969 <https://github.com/llvm/llvm-project/issues/99969>`__",""
-"`LWG2221 <https://wg21.link/LWG2221>`__","No formatted output operator for nullptr","2016-11 (Issaquah)","|Complete|","","`#103432 <https://github.com/llvm/llvm-project/issues/103432>`__",""
-"`LWG2223 <https://wg21.link/LWG2223>`__","shrink_to_fit effect on iterator validity","2016-11 (Issaquah)","|Complete|","","`#103433 <https://github.com/llvm/llvm-project/issues/103433>`__",""
-"`LWG2261 <https://wg21.link/LWG2261>`__","Are containers required to use their 'pointer' type internally?","2016-11 (Issaquah)","","","`#99970 <https://github.com/llvm/llvm-project/issues/99970>`__",""
-"`LWG2394 <https://wg21.link/LWG2394>`__","locale::name specification unclear - what is implementation-defined?","2016-11 (Issaquah)","|Complete|","","`#103434 <https://github.com/llvm/llvm-project/issues/103434>`__",""
-"`LWG2460 <https://wg21.link/LWG2460>`__","LWG issue 2408 and value categories","2016-11 (Issaquah)","|Complete|","","`#103435 <https://github.com/llvm/llvm-project/issues/103435>`__",""
-"`LWG2468 <https://wg21.link/LWG2468>`__","Self-move-assignment of library types","2016-11 (Issaquah)","","","`#99971 <https://github.com/llvm/llvm-project/issues/99971>`__",""
-"`LWG2475 <https://wg21.link/LWG2475>`__","Allow overwriting of std::basic_string terminator with charT() to allow cleaner interoperation with legacy APIs","2016-11 (Issaquah)","|Complete|","","`#103436 <https://github.com/llvm/llvm-project/issues/103436>`__",""
-"`LWG2503 <https://wg21.link/LWG2503>`__","multiline option should be added to syntax_option_type","2016-11 (Issaquah)","|Complete|","","`#103437 <https://github.com/llvm/llvm-project/issues/103437>`__",""
-"`LWG2510 <https://wg21.link/LWG2510>`__","Tag types should not be DefaultConstructible","2016-11 (Issaquah)","|Complete|","","`#103438 <https://github.com/llvm/llvm-project/issues/103438>`__",""
-"`LWG2514 <https://wg21.link/LWG2514>`__","Type traits must not be final","2016-11 (Issaquah)","|Complete|","","`#103439 <https://github.com/llvm/llvm-project/issues/103439>`__",""
-"`LWG2518 <https://wg21.link/LWG2518>`__","[fund.ts.v2] Non-member swap for propagate_const should call member swap","2016-11 (Issaquah)","|Complete|","","`#103440 <https://github.com/llvm/llvm-project/issues/103440>`__",""
-"`LWG2519 <https://wg21.link/LWG2519>`__","Iterator operator-= has gratuitous undefined behaviour","2016-11 (Issaquah)","|Complete|","","`#103442 <https://github.com/llvm/llvm-project/issues/103442>`__",""
-"`LWG2521 <https://wg21.link/LWG2521>`__","[fund.ts.v2] weak_ptr's converting move constructor should be modified as well for array support","2016-11 (Issaquah)","","","`#99972 <https://github.com/llvm/llvm-project/issues/99972>`__",""
-"`LWG2525 <https://wg21.link/LWG2525>`__","[fund.ts.v2] get_memory_resource should be const and noexcept","2016-11 (Issaquah)","","","`#99973 <https://github.com/llvm/llvm-project/issues/99973>`__",""
-"`LWG2527 <https://wg21.link/LWG2527>`__","[fund.ts.v2] ALLOCATOR_OF for function::operator= has incorrect default","2016-11 (Issaquah)","","","`#99974 <https://github.com/llvm/llvm-project/issues/99974>`__",""
-"`LWG2531 <https://wg21.link/LWG2531>`__","future::get should explicitly state that the shared state is released","2016-11 (Issaquah)","|Nothing To Do|","","`#103443 <https://github.com/llvm/llvm-project/issues/103443>`__",""
-"`LWG2534 <https://wg21.link/LWG2534>`__","Constrain rvalue stream operators","2016-11 (Issaquah)","|Complete|","","`#103444 <https://github.com/llvm/llvm-project/issues/103444>`__",""
-"`LWG2536 <https://wg21.link/LWG2536>`__","What should <complex.h> do?","2016-11 (Issaquah)","|Complete|","","`#103448 <https://github.com/llvm/llvm-project/issues/103448>`__",""
-"`LWG2540 <https://wg21.link/LWG2540>`__","unordered_multimap::insert hint iterator","2016-11 (Issaquah)","|Complete|","","`#103449 <https://github.com/llvm/llvm-project/issues/103449>`__",""
-"`LWG2543 <https://wg21.link/LWG2543>`__","LWG 2148 (hash support for enum types) seems under-specified","2016-11 (Issaquah)","|Complete|","","`#103450 <https://github.com/llvm/llvm-project/issues/103450>`__",""
-"`LWG2544 <https://wg21.link/LWG2544>`__","``istreambuf_iterator(basic_streambuf<charT, traits>* s)``\ effects unclear when s is 0","2016-11 (Issaquah)","|Complete|","","`#103452 <https://github.com/llvm/llvm-project/issues/103452>`__",""
-"`LWG2556 <https://wg21.link/LWG2556>`__","Wide contract for future::share()","2016-11 (Issaquah)","|Complete|","","`#103453 <https://github.com/llvm/llvm-project/issues/103453>`__",""
-"`LWG2562 <https://wg21.link/LWG2562>`__","Consistent total ordering of pointers by comparison functors","2016-11 (Issaquah)","","","`#99975 <https://github.com/llvm/llvm-project/issues/99975>`__",""
-"`LWG2567 <https://wg21.link/LWG2567>`__","Specification of logical operator traits uses BaseCharacteristic, which is defined only for UnaryTypeTraits and BinaryTypeTraits","2016-11 (Issaquah)","|Complete|","","`#103454 <https://github.com/llvm/llvm-project/issues/103454>`__",""
-"`LWG2568 <https://wg21.link/LWG2568>`__","[fund.ts.v2] Specification of logical operator traits uses BaseCharacteristic, which is defined only for UnaryTypeTraits and BinaryTypeTraits","2016-11 (Issaquah)","|Complete|","15","`#103455 <https://github.com/llvm/llvm-project/issues/103455>`__",""
-"`LWG2569 <https://wg21.link/LWG2569>`__","conjunction and disjunction requirements are too strict","2016-11 (Issaquah)","|Complete|","15","`#103456 <https://github.com/llvm/llvm-project/issues/103456>`__",""
-"`LWG2570 <https://wg21.link/LWG2570>`__","[fund.ts.v2] conjunction and disjunction requirements are too strict","2016-11 (Issaquah)","","","`#99977 <https://github.com/llvm/llvm-project/issues/99977>`__",""
-"`LWG2578 <https://wg21.link/LWG2578>`__","Iterator requirements should reference iterator traits","2016-11 (Issaquah)","|Complete|","","`#103457 <https://github.com/llvm/llvm-project/issues/103457>`__",""
-"`LWG2584 <https://wg21.link/LWG2584>`__","<regex> ECMAScript IdentityEscape is ambiguous","2016-11 (Issaquah)","","","`#99976 <https://github.com/llvm/llvm-project/issues/99976>`__",""
-"`LWG2587 <https://wg21.link/LWG2587>`__","""Convertible to bool"" requirement in conjunction and disjunction","2016-11 (Issaquah)","|Nothing To Do|","","`#103460 <https://github.com/llvm/llvm-project/issues/103460>`__","Resolved by `LWG2567 <https://wg21.link/LWG2567>`__"
-"`LWG2588 <https://wg21.link/LWG2588>`__","[fund.ts.v2] ""Convertible to bool"" requirement in conjunction and disjunction","2016-11 (Issaquah)","|Nothing To Do|","","`#103461 <https://github.com/llvm/llvm-project/issues/103461>`__","Resolved by `LWG2568 <https://wg21.link/LWG2568>`__"
-"`LWG2589 <https://wg21.link/LWG2589>`__","match_results can't satisfy the requirements of a container","2016-11 (Issaquah)","|Complete|","","`#103462 <https://github.com/llvm/llvm-project/issues/103462>`__",""
-"`LWG2591 <https://wg21.link/LWG2591>`__","std::function's member template target() should not lead to undefined behaviour","2016-11 (Issaquah)","|Complete|","","`#103463 <https://github.com/llvm/llvm-project/issues/103463>`__",""
-"`LWG2598 <https://wg21.link/LWG2598>`__","addressof works on temporaries","2016-11 (Issaquah)","|Complete|","","`#103464 <https://github.com/llvm/llvm-project/issues/103464>`__",""
-"`LWG2664 <https://wg21.link/LWG2664>`__","operator/ (and other append) semantics not useful if argument has root","2016-11 (Issaquah)","|Complete|","","`#103465 <https://github.com/llvm/llvm-project/issues/103465>`__",""
-"`LWG2665 <https://wg21.link/LWG2665>`__","remove_filename() post condition is incorrect","2016-11 (Issaquah)","|Complete|","","`#103466 <https://github.com/llvm/llvm-project/issues/103466>`__",""
-"`LWG2672 <https://wg21.link/LWG2672>`__","Should ``is_empty``\ use error_code in its specification?","2016-11 (Issaquah)","|Complete|","","`#103467 <https://github.com/llvm/llvm-project/issues/103467>`__",""
-"`LWG2678 <https://wg21.link/LWG2678>`__","std::filesystem enum classes overspecified","2016-11 (Issaquah)","|Complete|","","`#103468 <https://github.com/llvm/llvm-project/issues/103468>`__",""
-"`LWG2679 <https://wg21.link/LWG2679>`__","Inconsistent Use of Effects and Equivalent To","2016-11 (Issaquah)","|Complete|","","`#103469 <https://github.com/llvm/llvm-project/issues/103469>`__",""
-"`LWG2680 <https://wg21.link/LWG2680>`__","Add ""Equivalent to"" to filesystem","2016-11 (Issaquah)","|Complete|","","`#103470 <https://github.com/llvm/llvm-project/issues/103470>`__",""
-"`LWG2681 <https://wg21.link/LWG2681>`__","filesystem::copy() cannot copy symlinks","2016-11 (Issaquah)","|Complete|","","`#103472 <https://github.com/llvm/llvm-project/issues/103472>`__",""
-"`LWG2686 <https://wg21.link/LWG2686>`__","Why is std::hash specialized for error_code, but not error_condition?","2016-11 (Issaquah)","|Complete|","","`#103505 <https://github.com/llvm/llvm-project/issues/103505>`__",""
-"`LWG2694 <https://wg21.link/LWG2694>`__","Application of LWG 436 accidentally deleted definition of ""facet""","2016-11 (Issaquah)","|Complete|","","`#103506 <https://github.com/llvm/llvm-project/issues/103506>`__",""
-"`LWG2696 <https://wg21.link/LWG2696>`__","Interaction between make_shared and enable_shared_from_this is underspecified","2016-11 (Issaquah)","|Nothing To Do|","","`#103507 <https://github.com/llvm/llvm-project/issues/103507>`__",""
-"`LWG2699 <https://wg21.link/LWG2699>`__","Missing restriction in [numeric.requirements]","2016-11 (Issaquah)","|Complete|","","`#103508 <https://github.com/llvm/llvm-project/issues/103508>`__",""
-"`LWG2712 <https://wg21.link/LWG2712>`__","copy_file(from, to, ...) has a number of unspecified error conditions","2016-11 (Issaquah)","|Complete|","","`#103509 <https://github.com/llvm/llvm-project/issues/103509>`__",""
-"`LWG2722 <https://wg21.link/LWG2722>`__","equivalent incorrectly specifies throws clause","2016-11 (Issaquah)","|Complete|","","`#103510 <https://github.com/llvm/llvm-project/issues/103510>`__",""
-"`LWG2729 <https://wg21.link/LWG2729>`__","Missing SFINAE on std::pair::operator=","2016-11 (Issaquah)","|Complete|","","`#103512 <https://github.com/llvm/llvm-project/issues/103512>`__",""
-"`LWG2732 <https://wg21.link/LWG2732>`__","Questionable specification of path::operator/= and path::append","2016-11 (Issaquah)","|Complete|","","`#103513 <https://github.com/llvm/llvm-project/issues/103513>`__",""
-"`LWG2733 <https://wg21.link/LWG2733>`__","[fund.ts.v2] gcd / lcm and bool","2016-11 (Issaquah)","|Complete|","","`#103514 <https://github.com/llvm/llvm-project/issues/103514>`__",""
-"`LWG2735 <https://wg21.link/LWG2735>`__","std::abs(short), std::abs(signed char) and others should return int instead of double in order to be compatible with C++98 and C","2016-11 (Issaquah)","|Complete|","","`#103515 <https://github.com/llvm/llvm-project/issues/103515>`__",""
-"`LWG2736 <https://wg21.link/LWG2736>`__","nullopt_t insufficiently constrained","2016-11 (Issaquah)","|Complete|","","`#103516 <https://github.com/llvm/llvm-project/issues/103516>`__",""
-"`LWG2738 <https://wg21.link/LWG2738>`__","``is_constructible``\ with void types","2016-11 (Issaquah)","|Complete|","","`#103517 <https://github.com/llvm/llvm-project/issues/103517>`__",""
-"`LWG2739 <https://wg21.link/LWG2739>`__","Issue with time_point non-member subtraction with an unsigned duration","2016-11 (Issaquah)","|Complete|","","`#103518 <https://github.com/llvm/llvm-project/issues/103518>`__",""
-"`LWG2740 <https://wg21.link/LWG2740>`__","constexpr optional<T>::operator->","2016-11 (Issaquah)","|Complete|","","`#103520 <https://github.com/llvm/llvm-project/issues/103520>`__",""
-"`LWG2742 <https://wg21.link/LWG2742>`__","Inconsistent string interface taking string_view","2016-11 (Issaquah)","|Complete|","","`#103521 <https://github.com/llvm/llvm-project/issues/103521>`__",""
-"`LWG2744 <https://wg21.link/LWG2744>`__","any's in_place constructors","2016-11 (Issaquah)","|Complete|","","`#103522 <https://github.com/llvm/llvm-project/issues/103522>`__",""
-"`LWG2745 <https://wg21.link/LWG2745>`__","[fund.ts.v2] Implementability of LWG 2451","2016-11 (Issaquah)","|Complete|","","`#103523 <https://github.com/llvm/llvm-project/issues/103523>`__",""
-"`LWG2747 <https://wg21.link/LWG2747>`__","Possibly redundant std::move in [alg.foreach]","2016-11 (Issaquah)","|Complete|","","`#103524 <https://github.com/llvm/llvm-project/issues/103524>`__",""
-"`LWG2748 <https://wg21.link/LWG2748>`__","swappable traits for optionals","2016-11 (Issaquah)","|Complete|","","`#103525 <https://github.com/llvm/llvm-project/issues/103525>`__",""
-"`LWG2749 <https://wg21.link/LWG2749>`__","swappable traits for variants","2016-11 (Issaquah)","|Complete|","","`#103526 <https://github.com/llvm/llvm-project/issues/103526>`__",""
-"`LWG2750 <https://wg21.link/LWG2750>`__","[fund.ts.v2] LWG 2451 conversion constructor constraint","2016-11 (Issaquah)","|Nothing To Do|","","`#103527 <https://github.com/llvm/llvm-project/issues/103527>`__",""
-"`LWG2752 <https://wg21.link/LWG2752>`__","""Throws:"" clauses of async and packaged_task are unimplementable","2016-11 (Issaquah)","|Nothing To Do|","","`#103528 <https://github.com/llvm/llvm-project/issues/103528>`__",""
-"`LWG2755 <https://wg21.link/LWG2755>`__","[string.view.io] uses non-existent basic_string_view::to_string function","2016-11 (Issaquah)","|Complete|","","`#103531 <https://github.com/llvm/llvm-project/issues/103531>`__",""
-"`LWG2756 <https://wg21.link/LWG2756>`__","C++ WP optional<T> should 'forward' T's implicit conversions","2016-11 (Issaquah)","|Complete|","","`#103532 <https://github.com/llvm/llvm-project/issues/103532>`__",""
-"`LWG2758 <https://wg21.link/LWG2758>`__","std::string{}.assign(""ABCDE"", 0, 1) is ambiguous","2016-11 (Issaquah)","|Complete|","","`#103533 <https://github.com/llvm/llvm-project/issues/103533>`__",""
-"`LWG2759 <https://wg21.link/LWG2759>`__","gcd / lcm and bool for the WP","2016-11 (Issaquah)","|Complete|","","`#103534 <https://github.com/llvm/llvm-project/issues/103534>`__",""
-"`LWG2760 <https://wg21.link/LWG2760>`__","non-const basic_string::data should not invalidate iterators","2016-11 (Issaquah)","|Complete|","","`#103535 <https://github.com/llvm/llvm-project/issues/103535>`__",""
-"`LWG2765 <https://wg21.link/LWG2765>`__","Did LWG 1123 go too far?","2016-11 (Issaquah)","|Complete|","","`#103536 <https://github.com/llvm/llvm-project/issues/103536>`__",""
-"`LWG2767 <https://wg21.link/LWG2767>`__","not_fn call_wrapper can form invalid types","2016-11 (Issaquah)","|Complete|","","`#103537 <https://github.com/llvm/llvm-project/issues/103537>`__",""
-"`LWG2770 <https://wg21.link/LWG2770>`__","``tuple_size<const T>`` specialization is not SFINAE compatible and breaks decomposition declarations","2016-11 (Issaquah)","|Complete|","21","`#148254 <https://github.com/llvm/llvm-project/issues/148254>`__",""
-"`LWG2771 <https://wg21.link/LWG2771>`__","Broken Effects of some basic_string::compare functions in terms of basic_string_view","2016-11 (Issaquah)","|Complete|","","`#103539 <https://github.com/llvm/llvm-project/issues/103539>`__",""
-"`LWG2773 <https://wg21.link/LWG2773>`__","Making std::ignore constexpr","2016-11 (Issaquah)","|Complete|","","`#103541 <https://github.com/llvm/llvm-project/issues/103541>`__",""
-"`LWG2777 <https://wg21.link/LWG2777>`__","basic_string_view::copy should use char_traits::copy","2016-11 (Issaquah)","|Complete|","","`#103542 <https://github.com/llvm/llvm-project/issues/103542>`__",""
-"`LWG2778 <https://wg21.link/LWG2778>`__","basic_string_view is missing constexpr","2016-11 (Issaquah)","|Complete|","","`#103543 <https://github.com/llvm/llvm-project/issues/103543>`__",""
+"[LWG2062](https://wg21.link/LWG2062)","Effect contradictions w/o no-throw guarantee of std::function swaps","2016-11 (Issaquah)","{{Complete}}","","[#103431](https://github.com/llvm/llvm-project/issues/103431)",""
+"[LWG2166](https://wg21.link/LWG2166)","Heap property underspecified?","2016-11 (Issaquah)","","","[#99969](https://github.com/llvm/llvm-project/issues/99969)",""
+"[LWG2221](https://wg21.link/LWG2221)","No formatted output operator for nullptr","2016-11 (Issaquah)","{{Complete}}","","[#103432](https://github.com/llvm/llvm-project/issues/103432)",""
+"[LWG2223](https://wg21.link/LWG2223)","shrink_to_fit effect on iterator validity","2016-11 (Issaquah)","{{Complete}}","","[#103433](https://github.com/llvm/llvm-project/issues/103433)",""
+"[LWG2261](https://wg21.link/LWG2261)","Are containers required to use their 'pointer' type internally?","2016-11 (Issaquah)","","","[#99970](https://github.com/llvm/llvm-project/issues/99970)",""
+"[LWG2394](https://wg21.link/LWG2394)","locale::name specification unclear - what is implementation-defined?","2016-11 (Issaquah)","{{Complete}}","","[#103434](https://github.com/llvm/llvm-project/issues/103434)",""
+"[LWG2460](https://wg21.link/LWG2460)","LWG issue 2408 and value categories","2016-11 (Issaquah)","{{Complete}}","","[#103435](https://github.com/llvm/llvm-project/issues/103435)",""
+"[LWG2468](https://wg21.link/LWG2468)","Self-move-assignment of library types","2016-11 (Issaquah)","","","[#99971](https://github.com/llvm/llvm-project/issues/99971)",""
+"[LWG2475](https://wg21.link/LWG2475)","Allow overwriting of std::basic_string terminator with charT() to allow cleaner interoperation with legacy APIs","2016-11 (Issaquah)","{{Complete}}","","[#103436](https://github.com/llvm/llvm-project/issues/103436)",""
+"[LWG2503](https://wg21.link/LWG2503)","multiline option should be added to syntax_option_type","2016-11 (Issaquah)","{{Complete}}","","[#103437](https://github.com/llvm/llvm-project/issues/103437)",""
+"[LWG2510](https://wg21.link/LWG2510)","Tag types should not be DefaultConstructible","2016-11 (Issaquah)","{{Complete}}","","[#103438](https://github.com/llvm/llvm-project/issues/103438)",""
+"[LWG2514](https://wg21.link/LWG2514)","Type traits must not be final","2016-11 (Issaquah)","{{Complete}}","","[#103439](https://github.com/llvm/llvm-project/issues/103439)",""
+"[LWG2518](https://wg21.link/LWG2518)","[fund.ts.v2] Non-member swap for propagate_const should call member swap","2016-11 (Issaquah)","{{Complete}}","","[#103440](https://github.com/llvm/llvm-project/issues/103440)",""
+"[LWG2519](https://wg21.link/LWG2519)","Iterator operator-= has gratuitous undefined behaviour","2016-11 (Issaquah)","{{Complete}}","","[#103442](https://github.com/llvm/llvm-project/issues/103442)",""
+"[LWG2521](https://wg21.link/LWG2521)","[fund.ts.v2] weak_ptr's converting move constructor should be modified as well for array support","2016-11 (Issaquah)","","","[#99972](https://github.com/llvm/llvm-project/issues/99972)",""
+"[LWG2525](https://wg21.link/LWG2525)","[fund.ts.v2] get_memory_resource should be const and noexcept","2016-11 (Issaquah)","","","[#99973](https://github.com/llvm/llvm-project/issues/99973)",""
+"[LWG2527](https://wg21.link/LWG2527)","[fund.ts.v2] ALLOCATOR_OF for function::operator= has incorrect default","2016-11 (Issaquah)","","","[#99974](https://github.com/llvm/llvm-project/issues/99974)",""
+"[LWG2531](https://wg21.link/LWG2531)","future::get should explicitly state that the shared state is released","2016-11 (Issaquah)","{{NothingToDo}}","","[#103443](https://github.com/llvm/llvm-project/issues/103443)",""
+"[LWG2534](https://wg21.link/LWG2534)","Constrain rvalue stream operators","2016-11 (Issaquah)","{{Complete}}","","[#103444](https://github.com/llvm/llvm-project/issues/103444)",""
+"[LWG2536](https://wg21.link/LWG2536)","What should \<complex.h\> do?","2016-11 (Issaquah)","{{Complete}}","","[#103448](https://github.com/llvm/llvm-project/issues/103448)",""
+"[LWG2540](https://wg21.link/LWG2540)","unordered_multimap::insert hint iterator","2016-11 (Issaquah)","{{Complete}}","","[#103449](https://github.com/llvm/llvm-project/issues/103449)",""
+"[LWG2543](https://wg21.link/LWG2543)","LWG 2148 (hash support for enum types) seems under-specified","2016-11 (Issaquah)","{{Complete}}","","[#103450](https://github.com/llvm/llvm-project/issues/103450)",""
+"[LWG2544](https://wg21.link/LWG2544)","`istreambuf_iterator(basic_streambuf<charT, traits>* s)` effects unclear when s is 0","2016-11 (Issaquah)","{{Complete}}","","[#103452](https://github.com/llvm/llvm-project/issues/103452)",""
+"[LWG2556](https://wg21.link/LWG2556)","Wide contract for future::share()","2016-11 (Issaquah)","{{Complete}}","","[#103453](https://github.com/llvm/llvm-project/issues/103453)",""
+"[LWG2562](https://wg21.link/LWG2562)","Consistent total ordering of pointers by comparison functors","2016-11 (Issaquah)","","","[#99975](https://github.com/llvm/llvm-project/issues/99975)",""
+"[LWG2567](https://wg21.link/LWG2567)","Specification of logical operator traits uses BaseCharacteristic, which is defined only for UnaryTypeTraits and BinaryTypeTraits","2016-11 (Issaquah)","{{Complete}}","","[#103454](https://github.com/llvm/llvm-project/issues/103454)",""
+"[LWG2568](https://wg21.link/LWG2568)","[fund.ts.v2] Specification of logical operator traits uses BaseCharacteristic, which is defined only for UnaryTypeTraits and BinaryTypeTraits","2016-11 (Issaquah)","{{Complete}}","15","[#103455](https://github.com/llvm/llvm-project/issues/103455)",""
+"[LWG2569](https://wg21.link/LWG2569)","conjunction and disjunction requirements are too strict","2016-11 (Issaquah)","{{Complete}}","15","[#103456](https://github.com/llvm/llvm-project/issues/103456)",""
+"[LWG2570](https://wg21.link/LWG2570)","[fund.ts.v2] conjunction and disjunction requirements are too strict","2016-11 (Issaquah)","","","[#99977](https://github.com/llvm/llvm-project/issues/99977)",""
+"[LWG2578](https://wg21.link/LWG2578)","Iterator requirements should reference iterator traits","2016-11 (Issaquah)","{{Complete}}","","[#103457](https://github.com/llvm/llvm-project/issues/103457)",""
+"[LWG2584](https://wg21.link/LWG2584)","\<regex\> ECMAScript IdentityEscape is ambiguous","2016-11 (Issaquah)","","","[#99976](https://github.com/llvm/llvm-project/issues/99976)",""
+"[LWG2587](https://wg21.link/LWG2587)","""Convertible to bool"" requirement in conjunction and disjunction","2016-11 (Issaquah)","{{NothingToDo}}","","[#103460](https://github.com/llvm/llvm-project/issues/103460)","Resolved by [LWG2567](https://wg21.link/LWG2567)"
+"[LWG2588](https://wg21.link/LWG2588)","[fund.ts.v2] ""Convertible to bool"" requirement in conjunction and disjunction","2016-11 (Issaquah)","{{NothingToDo}}","","[#103461](https://github.com/llvm/llvm-project/issues/103461)","Resolved by [LWG2568](https://wg21.link/LWG2568)"
+"[LWG2589](https://wg21.link/LWG2589)","match_results can't satisfy the requirements of a container","2016-11 (Issaquah)","{{Complete}}","","[#103462](https://github.com/llvm/llvm-project/issues/103462)",""
+"[LWG2591](https://wg21.link/LWG2591)","std::function's member template target() should not lead to undefined behaviour","2016-11 (Issaquah)","{{Complete}}","","[#103463](https://github.com/llvm/llvm-project/issues/103463)",""
+"[LWG2598](https://wg21.link/LWG2598)","addressof works on temporaries","2016-11 (Issaquah)","{{Complete}}","","[#103464](https://github.com/llvm/llvm-project/issues/103464)",""
+"[LWG2664](https://wg21.link/LWG2664)","operator/ (and other append) semantics not useful if argument has root","2016-11 (Issaquah)","{{Complete}}","","[#103465](https://github.com/llvm/llvm-project/issues/103465)",""
+"[LWG2665](https://wg21.link/LWG2665)","remove_filename() post condition is incorrect","2016-11 (Issaquah)","{{Complete}}","","[#103466](https://github.com/llvm/llvm-project/issues/103466)",""
+"[LWG2672](https://wg21.link/LWG2672)","Should `is_empty` use error_code in its specification?","2016-11 (Issaquah)","{{Complete}}","","[#103467](https://github.com/llvm/llvm-project/issues/103467)",""
+"[LWG2678](https://wg21.link/LWG2678)","std::filesystem enum classes overspecified","2016-11 (Issaquah)","{{Complete}}","","[#103468](https://github.com/llvm/llvm-project/issues/103468)",""
+"[LWG2679](https://wg21.link/LWG2679)","Inconsistent Use of Effects and Equivalent To","2016-11 (Issaquah)","{{Complete}}","","[#103469](https://github.com/llvm/llvm-project/issues/103469)",""
+"[LWG2680](https://wg21.link/LWG2680)","Add ""Equivalent to"" to filesystem","2016-11 (Issaquah)","{{Complete}}","","[#103470](https://github.com/llvm/llvm-project/issues/103470)",""
+"[LWG2681](https://wg21.link/LWG2681)","filesystem::copy() cannot copy symlinks","2016-11 (Issaquah)","{{Complete}}","","[#103472](https://github.com/llvm/llvm-project/issues/103472)",""
+"[LWG2686](https://wg21.link/LWG2686)","Why is std::hash specialized for error_code, but not error_condition?","2016-11 (Issaquah)","{{Complete}}","","[#103505](https://github.com/llvm/llvm-project/issues/103505)",""
+"[LWG2694](https://wg21.link/LWG2694)","Application of LWG 436 accidentally deleted definition of ""facet""","2016-11 (Issaquah)","{{Complete}}","","[#103506](https://github.com/llvm/llvm-project/issues/103506)",""
+"[LWG2696](https://wg21.link/LWG2696)","Interaction between make_shared and enable_shared_from_this is underspecified","2016-11 (Issaquah)","{{NothingToDo}}","","[#103507](https://github.com/llvm/llvm-project/issues/103507)",""
+"[LWG2699](https://wg21.link/LWG2699)","Missing restriction in [numeric.requirements]","2016-11 (Issaquah)","{{Complete}}","","[#103508](https://github.com/llvm/llvm-project/issues/103508)",""
+"[LWG2712](https://wg21.link/LWG2712)","copy_file(from, to, ...) has a number of unspecified error conditions","2016-11 (Issaquah)","{{Complete}}","","[#103509](https://github.com/llvm/llvm-project/issues/103509)",""
+"[LWG2722](https://wg21.link/LWG2722)","equivalent incorrectly specifies throws clause","2016-11 (Issaquah)","{{Complete}}","","[#103510](https://github.com/llvm/llvm-project/issues/103510)",""
+"[LWG2729](https://wg21.link/LWG2729)","Missing SFINAE on std::pair::operator=","2016-11 (Issaquah)","{{Complete}}","","[#103512](https://github.com/llvm/llvm-project/issues/103512)",""
+"[LWG2732](https://wg21.link/LWG2732)","Questionable specification of path::operator/= and path::append","2016-11 (Issaquah)","{{Complete}}","","[#103513](https://github.com/llvm/llvm-project/issues/103513)",""
+"[LWG2733](https://wg21.link/LWG2733)","[fund.ts.v2] gcd / lcm and bool","2016-11 (Issaquah)","{{Complete}}","","[#103514](https://github.com/llvm/llvm-project/issues/103514)",""
+"[LWG2735](https://wg21.link/LWG2735)","std::abs(short), std::abs(signed char) and others should return int instead of double in order to be compatible with C++98 and C","2016-11 (Issaquah)","{{Complete}}","","[#103515](https://github.com/llvm/llvm-project/issues/103515)",""
+"[LWG2736](https://wg21.link/LWG2736)","nullopt_t insufficiently constrained","2016-11 (Issaquah)","{{Complete}}","","[#103516](https://github.com/llvm/llvm-project/issues/103516)",""
+"[LWG2738](https://wg21.link/LWG2738)","`is_constructible` with void types","2016-11 (Issaquah)","{{Complete}}","","[#103517](https://github.com/llvm/llvm-project/issues/103517)",""
+"[LWG2739](https://wg21.link/LWG2739)","Issue with time_point non-member subtraction with an unsigned duration","2016-11 (Issaquah)","{{Complete}}","","[#103518](https://github.com/llvm/llvm-project/issues/103518)",""
+"[LWG2740](https://wg21.link/LWG2740)","constexpr optional\<T\>::operator-\>","2016-11 (Issaquah)","{{Complete}}","","[#103520](https://github.com/llvm/llvm-project/issues/103520)",""
+"[LWG2742](https://wg21.link/LWG2742)","Inconsistent string interface taking string_view","2016-11 (Issaquah)","{{Complete}}","","[#103521](https://github.com/llvm/llvm-project/issues/103521)",""
+"[LWG2744](https://wg21.link/LWG2744)","any's in_place constructors","2016-11 (Issaquah)","{{Complete}}","","[#103522](https://github.com/llvm/llvm-project/issues/103522)",""
+"[LWG2745](https://wg21.link/LWG2745)","[fund.ts.v2] Implementability of LWG 2451","2016-11 (Issaquah)","{{Complete}}","","[#103523](https://github.com/llvm/llvm-project/issues/103523)",""
+"[LWG2747](https://wg21.link/LWG2747)","Possibly redundant std::move in [alg.foreach]","2016-11 (Issaquah)","{{Complete}}","","[#103524](https://github.com/llvm/llvm-project/issues/103524)",""
+"[LWG2748](https://wg21.link/LWG2748)","swappable traits for optionals","2016-11 (Issaquah)","{{Complete}}","","[#103525](https://github.com/llvm/llvm-project/issues/103525)",""
+"[LWG2749](https://wg21.link/LWG2749)","swappable traits for variants","2016-11 (Issaquah)","{{Complete}}","","[#103526](https://github.com/llvm/llvm-project/issues/103526)",""
+"[LWG2750](https://wg21.link/LWG2750)","[fund.ts.v2] LWG 2451 conversion constructor constraint","2016-11 (Issaquah)","{{NothingToDo}}","","[#103527](https://github.com/llvm/llvm-project/issues/103527)",""
+"[LWG2752](https://wg21.link/LWG2752)","""Throws:"" clauses of async and packaged_task are unimplementable","2016-11 (Issaquah)","{{NothingToDo}}","","[#103528](https://github.com/llvm/llvm-project/issues/103528)",""
+"[LWG2755](https://wg21.link/LWG2755)","[string.view.io] uses non-existent basic_string_view::to_string function","2016-11 (Issaquah)","{{Complete}}","","[#103531](https://github.com/llvm/llvm-project/issues/103531)",""
+"[LWG2756](https://wg21.link/LWG2756)","C++ WP optional\<T\> should 'forward' T's implicit conversions","2016-11 (Issaquah)","{{Complete}}","","[#103532](https://github.com/llvm/llvm-project/issues/103532)",""
+"[LWG2758](https://wg21.link/LWG2758)","std::string{}.assign(""ABCDE"", 0, 1) is ambiguous","2016-11 (Issaquah)","{{Complete}}","","[#103533](https://github.com/llvm/llvm-project/issues/103533)",""
+"[LWG2759](https://wg21.link/LWG2759)","gcd / lcm and bool for the WP","2016-11 (Issaquah)","{{Complete}}","","[#103534](https://github.com/llvm/llvm-project/issues/103534)",""
+"[LWG2760](https://wg21.link/LWG2760)","non-const basic_string::data should not invalidate iterators","2016-11 (Issaquah)","{{Complete}}","","[#103535](https://github.com/llvm/llvm-project/issues/103535)",""
+"[LWG2765](https://wg21.link/LWG2765)","Did LWG 1123 go too far?","2016-11 (Issaquah)","{{Complete}}","","[#103536](https://github.com/llvm/llvm-project/issues/103536)",""
+"[LWG2767](https://wg21.link/LWG2767)","not_fn call_wrapper can form invalid types","2016-11 (Issaquah)","{{Complete}}","","[#103537](https://github.com/llvm/llvm-project/issues/103537)",""
+"[LWG2770](https://wg21.link/LWG2770)","`tuple_size<const T>` specialization is not SFINAE compatible and breaks decomposition declarations","2016-11 (Issaquah)","{{Complete}}","21","[#148254](https://github.com/llvm/llvm-project/issues/148254)",""
+"[LWG2771](https://wg21.link/LWG2771)","Broken Effects of some basic_string::compare functions in terms of basic_string_view","2016-11 (Issaquah)","{{Complete}}","","[#103539](https://github.com/llvm/llvm-project/issues/103539)",""
+"[LWG2773](https://wg21.link/LWG2773)","Making std::ignore constexpr","2016-11 (Issaquah)","{{Complete}}","","[#103541](https://github.com/llvm/llvm-project/issues/103541)",""
+"[LWG2777](https://wg21.link/LWG2777)","basic_string_view::copy should use char_traits::copy","2016-11 (Issaquah)","{{Complete}}","","[#103542](https://github.com/llvm/llvm-project/issues/103542)",""
+"[LWG2778](https://wg21.link/LWG2778)","basic_string_view is missing constexpr","2016-11 (Issaquah)","{{Complete}}","","[#103543](https://github.com/llvm/llvm-project/issues/103543)",""
"","","","","","",""
-"`LWG2260 <https://wg21.link/LWG2260>`__","Missing requirement for Allocator::pointer","2017-02 (Kona)","|Complete|","","`#103544 <https://github.com/llvm/llvm-project/issues/103544>`__",""
-"`LWG2676 <https://wg21.link/LWG2676>`__","Provide filesystem::path overloads for File-based streams","2017-02 (Kona)","|Complete|","","`#103545 <https://github.com/llvm/llvm-project/issues/103545>`__",""
-"`LWG2768 <https://wg21.link/LWG2768>`__","any_cast and move semantics","2017-02 (Kona)","|Complete|","","`#103546 <https://github.com/llvm/llvm-project/issues/103546>`__",""
-"`LWG2769 <https://wg21.link/LWG2769>`__","Redundant const in the return type of any_cast(const any&)","2017-02 (Kona)","|Complete|","","`#103538 <https://github.com/llvm/llvm-project/issues/103538>`__",""
-"`LWG2781 <https://wg21.link/LWG2781>`__","Contradictory requirements for std::function and std::reference_wrapper","2017-02 (Kona)","|Complete|","","`#103548 <https://github.com/llvm/llvm-project/issues/103548>`__",""
-"`LWG2782 <https://wg21.link/LWG2782>`__","scoped_allocator_adaptor constructors must be constrained","2017-02 (Kona)","|Complete|","","`#103549 <https://github.com/llvm/llvm-project/issues/103549>`__",""
-"`LWG2784 <https://wg21.link/LWG2784>`__","Resolution to LWG 2484 is missing ""otherwise, no effects"" and is hard to parse","2017-02 (Kona)","|Complete|","","`#103550 <https://github.com/llvm/llvm-project/issues/103550>`__",""
-"`LWG2785 <https://wg21.link/LWG2785>`__","quoted should work with basic_string_view","2017-02 (Kona)","|Complete|","","`#103553 <https://github.com/llvm/llvm-project/issues/103553>`__",""
-"`LWG2786 <https://wg21.link/LWG2786>`__","Annex C should mention shared_ptr changes for array support","2017-02 (Kona)","|Complete|","","`#103554 <https://github.com/llvm/llvm-project/issues/103554>`__",""
-"`LWG2787 <https://wg21.link/LWG2787>`__","|sect|\ [file_status.cons] doesn't match class definition","2017-02 (Kona)","|Complete|","","`#103555 <https://github.com/llvm/llvm-project/issues/103555>`__",""
-"`LWG2788 <https://wg21.link/LWG2788>`__","basic_string range mutators unintentionally require a default constructible allocator","2017-02 (Kona)","|Complete|","","`#103556 <https://github.com/llvm/llvm-project/issues/103556>`__",""
-"`LWG2789 <https://wg21.link/LWG2789>`__","Equivalence of contained objects","2017-02 (Kona)","|Complete|","","`#103557 <https://github.com/llvm/llvm-project/issues/103557>`__",""
-"`LWG2790 <https://wg21.link/LWG2790>`__","Missing specification of istreambuf_iterator::operator->","2017-02 (Kona)","|Complete|","","`#103558 <https://github.com/llvm/llvm-project/issues/103558>`__",""
-"`LWG2794 <https://wg21.link/LWG2794>`__","Missing requirements for allocator pointers","2017-02 (Kona)","|Nothing To Do|","","`#103559 <https://github.com/llvm/llvm-project/issues/103559>`__",""
-"`LWG2795 <https://wg21.link/LWG2795>`__","|sect|\ [global.functions] provides incorrect example of ADL use","2017-02 (Kona)","|Complete|","","`#103560 <https://github.com/llvm/llvm-project/issues/103560>`__",""
-"`LWG2796 <https://wg21.link/LWG2796>`__","tuple should be a literal type","2017-02 (Kona)","|Complete|","","`#103561 <https://github.com/llvm/llvm-project/issues/103561>`__",""
-"`LWG2801 <https://wg21.link/LWG2801>`__","Default-constructibility of unique_ptr","2017-02 (Kona)","|Complete|","","`#103562 <https://github.com/llvm/llvm-project/issues/103562>`__",""
-"`LWG2802 <https://wg21.link/LWG2802>`__","shared_ptr constructor requirements for a deleter","2017-02 (Kona)","|Complete|","","`#103563 <https://github.com/llvm/llvm-project/issues/103563>`__",""
-"`LWG2804 <https://wg21.link/LWG2804>`__","Unconditional constexpr default constructor for istream_iterator","2017-02 (Kona)","|Complete|","","`#103565 <https://github.com/llvm/llvm-project/issues/103565>`__",""
-"`LWG2806 <https://wg21.link/LWG2806>`__","Base class of bad_optional_access","2017-02 (Kona)","|Complete|","","`#103566 <https://github.com/llvm/llvm-project/issues/103566>`__",""
-"`LWG2807 <https://wg21.link/LWG2807>`__","std::invoke should use ``std::is_nothrow_callable``\ ","2017-02 (Kona)","|Complete|","","`#103567 <https://github.com/llvm/llvm-project/issues/103567>`__",""
-"`LWG2812 <https://wg21.link/LWG2812>`__","Range access is available with <string_view>","2017-02 (Kona)","|Complete|","","`#103568 <https://github.com/llvm/llvm-project/issues/103568>`__",""
-"`LWG2824 <https://wg21.link/LWG2824>`__","list::sort should say that the order of elements is unspecified if an exception is thrown","2017-02 (Kona)","|Complete|","","`#103569 <https://github.com/llvm/llvm-project/issues/103569>`__",""
-"`LWG2826 <https://wg21.link/LWG2826>`__","string_view iterators use old wording","2017-02 (Kona)","|Complete|","","`#103570 <https://github.com/llvm/llvm-project/issues/103570>`__",""
-"`LWG2834 <https://wg21.link/LWG2834>`__","Resolution LWG 2223 is missing wording about end iterators","2017-02 (Kona)","|Complete|","","`#103571 <https://github.com/llvm/llvm-project/issues/103571>`__",""
-"`LWG2835 <https://wg21.link/LWG2835>`__","LWG 2536 seems to misspecify <tgmath.h>","2017-02 (Kona)","|Complete|","","`#103572 <https://github.com/llvm/llvm-project/issues/103572>`__",""
-"`LWG2837 <https://wg21.link/LWG2837>`__","gcd and lcm should support a wider range of input values","2017-02 (Kona)","|Complete|","","`#103573 <https://github.com/llvm/llvm-project/issues/103573>`__",""
-"`LWG2838 <https://wg21.link/LWG2838>`__","is_literal_type specification needs a little cleanup","2017-02 (Kona)","|Complete|","","`#103574 <https://github.com/llvm/llvm-project/issues/103574>`__",""
-"`LWG2842 <https://wg21.link/LWG2842>`__","in_place_t check for optional::optional(U&&) should decay U","2017-02 (Kona)","|Complete|","","`#103575 <https://github.com/llvm/llvm-project/issues/103575>`__",""
-"`LWG2850 <https://wg21.link/LWG2850>`__","std::function move constructor does unnecessary work","2017-02 (Kona)","|Complete|","","`#103576 <https://github.com/llvm/llvm-project/issues/103576>`__",""
-"`LWG2853 <https://wg21.link/LWG2853>`__","Possible inconsistency in specification of erase in [vector.modifiers]","2017-02 (Kona)","|Complete|","","`#103577 <https://github.com/llvm/llvm-project/issues/103577>`__",""
-"`LWG2855 <https://wg21.link/LWG2855>`__","std::throw_with_nested(""string_literal"")","2017-02 (Kona)","|Complete|","","`#103578 <https://github.com/llvm/llvm-project/issues/103578>`__",""
-"`LWG2857 <https://wg21.link/LWG2857>`__","{variant,optional,any}::emplace should return the constructed value","2017-02 (Kona)","|Complete|","","`#103579 <https://github.com/llvm/llvm-project/issues/103579>`__",""
-"`LWG2861 <https://wg21.link/LWG2861>`__","basic_string should require that charT match traits::char_type","2017-02 (Kona)","|Complete|","","`#103580 <https://github.com/llvm/llvm-project/issues/103580>`__",""
-"`LWG2866 <https://wg21.link/LWG2866>`__","Incorrect derived classes constraints","2017-02 (Kona)","|Nothing To Do|","","`#103581 <https://github.com/llvm/llvm-project/issues/103581>`__",""
-"`LWG2868 <https://wg21.link/LWG2868>`__","Missing specification of bad_any_cast::what()","2017-02 (Kona)","|Complete|","","`#103582 <https://github.com/llvm/llvm-project/issues/103582>`__",""
-"`LWG2872 <https://wg21.link/LWG2872>`__","Add definition for direct-non-list-initialization","2017-02 (Kona)","|Complete|","","`#103583 <https://github.com/llvm/llvm-project/issues/103583>`__",""
-"`LWG2873 <https://wg21.link/LWG2873>`__","Add noexcept to several shared_ptr related functions","2017-02 (Kona)","|Complete|","","`#103584 <https://github.com/llvm/llvm-project/issues/103584>`__",""
-"`LWG2874 <https://wg21.link/LWG2874>`__","Constructor ``shared_ptr::shared_ptr(Y*)``\ should be constrained","2017-02 (Kona)","|Complete|","13","`#103585 <https://github.com/llvm/llvm-project/issues/103585>`__",""
-"`LWG2875 <https://wg21.link/LWG2875>`__","shared_ptr::shared_ptr(Y\*, D, [|hellip|\ ]) constructors should be constrained","2017-02 (Kona)","|Complete|","","`#103586 <https://github.com/llvm/llvm-project/issues/103586>`__",""
-"`LWG2876 <https://wg21.link/LWG2876>`__","``shared_ptr::shared_ptr(const weak_ptr<Y>&)``\ constructor should be constrained","2017-02 (Kona)","|Complete|","14","`#103587 <https://github.com/llvm/llvm-project/issues/103587>`__",""
-"`LWG2878 <https://wg21.link/LWG2878>`__","Missing DefaultConstructible requirement for istream_iterator default constructor","2017-02 (Kona)","|Complete|","","`#103588 <https://github.com/llvm/llvm-project/issues/103588>`__",""
-"`LWG2890 <https://wg21.link/LWG2890>`__","The definition of 'object state' applies only to class types","2017-02 (Kona)","|Complete|","","`#103589 <https://github.com/llvm/llvm-project/issues/103589>`__",""
-"`LWG2900 <https://wg21.link/LWG2900>`__","The copy and move constructors of optional are not constexpr","2017-02 (Kona)","|Complete|","","`#103591 <https://github.com/llvm/llvm-project/issues/103591>`__",""
-"`LWG2903 <https://wg21.link/LWG2903>`__","The form of initialization for the emplace-constructors is not specified","2017-02 (Kona)","|Complete|","","`#103593 <https://github.com/llvm/llvm-project/issues/103593>`__",""
-"`LWG2904 <https://wg21.link/LWG2904>`__","Make variant move-assignment more exception safe","2017-02 (Kona)","|Complete|","","`#103594 <https://github.com/llvm/llvm-project/issues/103594>`__",""
-"`LWG2905 <https://wg21.link/LWG2905>`__","is_constructible_v<unique_ptr<P, D>, P, D const &> should be false when D is not copy constructible","2017-02 (Kona)","|Complete|","","`#103595 <https://github.com/llvm/llvm-project/issues/103595>`__",""
-"`LWG2908 <https://wg21.link/LWG2908>`__","The less-than operator for shared pointers could do more","2017-02 (Kona)","|Complete|","","`#103596 <https://github.com/llvm/llvm-project/issues/103596>`__",""
-"`LWG2911 <https://wg21.link/LWG2911>`__","An is_aggregate type trait is needed","2017-02 (Kona)","|Complete|","","`#103597 <https://github.com/llvm/llvm-project/issues/103597>`__",""
-"`LWG2921 <https://wg21.link/LWG2921>`__","packaged_task and type-erased allocators","2017-02 (Kona)","|Complete|","20","`#103598 <https://github.com/llvm/llvm-project/issues/103598>`__","Originally implemented in LLVM 6 but reverted later. Old documentation incorrectly said it was implemented."
-"`LWG2934 <https://wg21.link/LWG2934>`__","optional<const T> doesn't compare with T","2017-02 (Kona)","|Complete|","","`#103599 <https://github.com/llvm/llvm-project/issues/103599>`__",""
+"[LWG2260](https://wg21.link/LWG2260)","Missing requirement for Allocator::pointer","2017-02 (Kona)","{{Complete}}","","[#103544](https://github.com/llvm/llvm-project/issues/103544)",""
+"[LWG2676](https://wg21.link/LWG2676)","Provide filesystem::path overloads for File-based streams","2017-02 (Kona)","{{Complete}}","","[#103545](https://github.com/llvm/llvm-project/issues/103545)",""
+"[LWG2768](https://wg21.link/LWG2768)","any_cast and move semantics","2017-02 (Kona)","{{Complete}}","","[#103546](https://github.com/llvm/llvm-project/issues/103546)",""
+"[LWG2769](https://wg21.link/LWG2769)","Redundant const in the return type of any_cast(const any&)","2017-02 (Kona)","{{Complete}}","","[#103538](https://github.com/llvm/llvm-project/issues/103538)",""
+"[LWG2781](https://wg21.link/LWG2781)","Contradictory requirements for std::function and std::reference_wrapper","2017-02 (Kona)","{{Complete}}","","[#103548](https://github.com/llvm/llvm-project/issues/103548)",""
+"[LWG2782](https://wg21.link/LWG2782)","scoped_allocator_adaptor constructors must be constrained","2017-02 (Kona)","{{Complete}}","","[#103549](https://github.com/llvm/llvm-project/issues/103549)",""
+"[LWG2784](https://wg21.link/LWG2784)","Resolution to LWG 2484 is missing ""otherwise, no effects"" and is hard to parse","2017-02 (Kona)","{{Complete}}","","[#103550](https://github.com/llvm/llvm-project/issues/103550)",""
+"[LWG2785](https://wg21.link/LWG2785)","quoted should work with basic_string_view","2017-02 (Kona)","{{Complete}}","","[#103553](https://github.com/llvm/llvm-project/issues/103553)",""
+"[LWG2786](https://wg21.link/LWG2786)","Annex C should mention shared_ptr changes for array support","2017-02 (Kona)","{{Complete}}","","[#103554](https://github.com/llvm/llvm-project/issues/103554)",""
+"[LWG2787](https://wg21.link/LWG2787)","§[file_status.cons] doesn't match class definition","2017-02 (Kona)","{{Complete}}","","[#103555](https://github.com/llvm/llvm-project/issues/103555)",""
+"[LWG2788](https://wg21.link/LWG2788)","basic_string range mutators unintentionally require a default constructible allocator","2017-02 (Kona)","{{Complete}}","","[#103556](https://github.com/llvm/llvm-project/issues/103556)",""
+"[LWG2789](https://wg21.link/LWG2789)","Equivalence of contained objects","2017-02 (Kona)","{{Complete}}","","[#103557](https://github.com/llvm/llvm-project/issues/103557)",""
+"[LWG2790](https://wg21.link/LWG2790)","Missing specification of istreambuf_iterator::operator-\>","2017-02 (Kona)","{{Complete}}","","[#103558](https://github.com/llvm/llvm-project/issues/103558)",""
+"[LWG2794](https://wg21.link/LWG2794)","Missing requirements for allocator pointers","2017-02 (Kona)","{{NothingToDo}}","","[#103559](https://github.com/llvm/llvm-project/issues/103559)",""
+"[LWG2795](https://wg21.link/LWG2795)","§[global.functions] provides incorrect example of ADL use","2017-02 (Kona)","{{Complete}}","","[#103560](https://github.com/llvm/llvm-project/issues/103560)",""
+"[LWG2796](https://wg21.link/LWG2796)","tuple should be a literal type","2017-02 (Kona)","{{Complete}}","","[#103561](https://github.com/llvm/llvm-project/issues/103561)",""
+"[LWG2801](https://wg21.link/LWG2801)","Default-constructibility of unique_ptr","2017-02 (Kona)","{{Complete}}","","[#103562](https://github.com/llvm/llvm-project/issues/103562)",""
+"[LWG2802](https://wg21.link/LWG2802)","shared_ptr constructor requirements for a deleter","2017-02 (Kona)","{{Complete}}","","[#103563](https://github.com/llvm/llvm-project/issues/103563)",""
+"[LWG2804](https://wg21.link/LWG2804)","Unconditional constexpr default constructor for istream_iterator","2017-02 (Kona)","{{Complete}}","","[#103565](https://github.com/llvm/llvm-project/issues/103565)",""
+"[LWG2806](https://wg21.link/LWG2806)","Base class of bad_optional_access","2017-02 (Kona)","{{Complete}}","","[#103566](https://github.com/llvm/llvm-project/issues/103566)",""
+"[LWG2807](https://wg21.link/LWG2807)","std::invoke should use `std::is_nothrow_callable` ","2017-02 (Kona)","{{Complete}}","","[#103567](https://github.com/llvm/llvm-project/issues/103567)",""
+"[LWG2812](https://wg21.link/LWG2812)","Range access is available with \<string_view\>","2017-02 (Kona)","{{Complete}}","","[#103568](https://github.com/llvm/llvm-project/issues/103568)",""
+"[LWG2824](https://wg21.link/LWG2824)","list::sort should say that the order of elements is unspecified if an exception is thrown","2017-02 (Kona)","{{Complete}}","","[#103569](https://github.com/llvm/llvm-project/issues/103569)",""
+"[LWG2826](https://wg21.link/LWG2826)","string_view iterators use old wording","2017-02 (Kona)","{{Complete}}","","[#103570](https://github.com/llvm/llvm-project/issues/103570)",""
+"[LWG2834](https://wg21.link/LWG2834)","Resolution LWG 2223 is missing wording about end iterators","2017-02 (Kona)","{{Complete}}","","[#103571](https://github.com/llvm/llvm-project/issues/103571)",""
+"[LWG2835](https://wg21.link/LWG2835)","LWG 2536 seems to misspecify \<tgmath.h\>","2017-02 (Kona)","{{Complete}}","","[#103572](https://github.com/llvm/llvm-project/issues/103572)",""
+"[LWG2837](https://wg21.link/LWG2837)","gcd and lcm should support a wider range of input values","2017-02 (Kona)","{{Complete}}","","[#103573](https://github.com/llvm/llvm-project/issues/103573)",""
+"[LWG2838](https://wg21.link/LWG2838)","is_literal_type specification needs a little cleanup","2017-02 (Kona)","{{Complete}}","","[#103574](https://github.com/llvm/llvm-project/issues/103574)",""
+"[LWG2842](https://wg21.link/LWG2842)","in_place_t check for optional::optional(U&&) should decay U","2017-02 (Kona)","{{Complete}}","","[#103575](https://github.com/llvm/llvm-project/issues/103575)",""
+"[LWG2850](https://wg21.link/LWG2850)","std::function move constructor does unnecessary work","2017-02 (Kona)","{{Complete}}","","[#103576](https://github.com/llvm/llvm-project/issues/103576)",""
+"[LWG2853](https://wg21.link/LWG2853)","Possible inconsistency in specification of erase in [vector.modifiers]","2017-02 (Kona)","{{Complete}}","","[#103577](https://github.com/llvm/llvm-project/issues/103577)",""
+"[LWG2855](https://wg21.link/LWG2855)","std::throw_with_nested(""string_literal"")","2017-02 (Kona)","{{Complete}}","","[#103578](https://github.com/llvm/llvm-project/issues/103578)",""
+"[LWG2857](https://wg21.link/LWG2857)","{variant,optional,any}::emplace should return the constructed value","2017-02 (Kona)","{{Complete}}","","[#103579](https://github.com/llvm/llvm-project/issues/103579)",""
+"[LWG2861](https://wg21.link/LWG2861)","basic_string should require that charT match traits::char_type","2017-02 (Kona)","{{Complete}}","","[#103580](https://github.com/llvm/llvm-project/issues/103580)",""
+"[LWG2866](https://wg21.link/LWG2866)","Incorrect derived classes constraints","2017-02 (Kona)","{{NothingToDo}}","","[#103581](https://github.com/llvm/llvm-project/issues/103581)",""
+"[LWG2868](https://wg21.link/LWG2868)","Missing specification of bad_any_cast::what()","2017-02 (Kona)","{{Complete}}","","[#103582](https://github.com/llvm/llvm-project/issues/103582)",""
+"[LWG2872](https://wg21.link/LWG2872)","Add definition for direct-non-list-initialization","2017-02 (Kona)","{{Complete}}","","[#103583](https://github.com/llvm/llvm-project/issues/103583)",""
+"[LWG2873](https://wg21.link/LWG2873)","Add noexcept to several shared_ptr related functions","2017-02 (Kona)","{{Complete}}","","[#103584](https://github.com/llvm/llvm-project/issues/103584)",""
+"[LWG2874](https://wg21.link/LWG2874)","Constructor `shared_ptr::shared_ptr(Y*)` should be constrained","2017-02 (Kona)","{{Complete}}","13","[#103585](https://github.com/llvm/llvm-project/issues/103585)",""
+"[LWG2875](https://wg21.link/LWG2875)","shared_ptr::shared_ptr(Y\*, D, […]) constructors should be constrained","2017-02 (Kona)","{{Complete}}","","[#103586](https://github.com/llvm/llvm-project/issues/103586)",""
+"[LWG2876](https://wg21.link/LWG2876)","`shared_ptr::shared_ptr(const weak_ptr<Y>&)` constructor should be constrained","2017-02 (Kona)","{{Complete}}","14","[#103587](https://github.com/llvm/llvm-project/issues/103587)",""
+"[LWG2878](https://wg21.link/LWG2878)","Missing DefaultConstructible requirement for istream_iterator default constructor","2017-02 (Kona)","{{Complete}}","","[#103588](https://github.com/llvm/llvm-project/issues/103588)",""
+"[LWG2890](https://wg21.link/LWG2890)","The definition of 'object state' applies only to class types","2017-02 (Kona)","{{Complete}}","","[#103589](https://github.com/llvm/llvm-project/issues/103589)",""
+"[LWG2900](https://wg21.link/LWG2900)","The copy and move constructors of optional are not constexpr","2017-02 (Kona)","{{Complete}}","","[#103591](https://github.com/llvm/llvm-project/issues/103591)",""
+"[LWG2903](https://wg21.link/LWG2903)","The form of initialization for the emplace-constructors is not specified","2017-02 (Kona)","{{Complete}}","","[#103593](https://github.com/llvm/llvm-project/issues/103593)",""
+"[LWG2904](https://wg21.link/LWG2904)","Make variant move-assignment more exception safe","2017-02 (Kona)","{{Complete}}","","[#103594](https://github.com/llvm/llvm-project/issues/103594)",""
+"[LWG2905](https://wg21.link/LWG2905)","is_constructible_v\<unique_ptr\<P, D\>, P, D const &\> should be false when D is not copy constructible","2017-02 (Kona)","{{Complete}}","","[#103595](https://github.com/llvm/llvm-project/issues/103595)",""
+"[LWG2908](https://wg21.link/LWG2908)","The less-than operator for shared pointers could do more","2017-02 (Kona)","{{Complete}}","","[#103596](https://github.com/llvm/llvm-project/issues/103596)",""
+"[LWG2911](https://wg21.link/LWG2911)","An is_aggregate type trait is needed","2017-02 (Kona)","{{Complete}}","","[#103597](https://github.com/llvm/llvm-project/issues/103597)",""
+"[LWG2921](https://wg21.link/LWG2921)","packaged_task and type-erased allocators","2017-02 (Kona)","{{Complete}}","20","[#103598](https://github.com/llvm/llvm-project/issues/103598)","Originally implemented in LLVM 6 but reverted later. Old documentation incorrectly said it was implemented."
+"[LWG2934](https://wg21.link/LWG2934)","optional\<const T\> doesn't compare with T","2017-02 (Kona)","{{Complete}}","","[#103599](https://github.com/llvm/llvm-project/issues/103599)",""
"","","","","","",""
-"`LWG2901 <https://wg21.link/LWG2901>`__","Variants cannot properly support allocators","2017-07 (Toronto)","|Complete|","","`#103600 <https://github.com/llvm/llvm-project/issues/103600>`__",""
-"`LWG2955 <https://wg21.link/LWG2955>`__","``to_chars / from_chars``\ depend on ``std::string``\ ","2017-07 (Toronto)","|Nothing To Do|","","`#103601 <https://github.com/llvm/llvm-project/issues/103601>`__","Resolved by `P0682R1 <https://wg21.link/P0682R1>`__"
-"`LWG2956 <https://wg21.link/LWG2956>`__","``filesystem::canonical()``\ still defined in terms of ``absolute(p, base)``\ ","2017-07 (Toronto)","|Complete|","","`#103602 <https://github.com/llvm/llvm-project/issues/103602>`__",""
+"[LWG2901](https://wg21.link/LWG2901)","Variants cannot properly support allocators","2017-07 (Toronto)","{{Complete}}","","[#103600](https://github.com/llvm/llvm-project/issues/103600)",""
+"[LWG2955](https://wg21.link/LWG2955)","`to_chars / from_chars` depend on `std::string` ","2017-07 (Toronto)","{{NothingToDo}}","","[#103601](https://github.com/llvm/llvm-project/issues/103601)","Resolved by [P0682R1](https://wg21.link/P0682R1)"
+"[LWG2956](https://wg21.link/LWG2956)","`filesystem::canonical()` still defined in terms of `absolute(p, base)` ","2017-07 (Toronto)","{{Complete}}","","[#103602](https://github.com/llvm/llvm-project/issues/103602)",""
diff --git a/libcxx/docs/Status/Cxx17Papers.csv b/libcxx/docs/Status/Cxx17Papers.csv
index 378071f8b60a3..368ad2b41e36f 100644
--- a/libcxx/docs/Status/Cxx17Papers.csv
+++ b/libcxx/docs/Status/Cxx17Papers.csv
@@ -1,113 +1,113 @@
"Paper #","Paper Name","Meeting","Status","First released version","GitHub issue","Notes"
-"`N3911 <https://wg21.link/N3911>`__","TransformationTrait Alias ``void_t``\ .","2014-11 (Urbana)","|Complete|","3.6","`#103603 <https://github.com/llvm/llvm-project/issues/103603>`__",""
-"`N4089 <https://wg21.link/N4089>`__","Safe conversions in ``unique_ptr<T[]>``\ .","2014-11 (Urbana)","|Complete|","5","`#99936 <https://github.com/llvm/llvm-project/issues/99936>`__",""
-"`N4169 <https://wg21.link/N4169>`__","A proposal to add invoke function template","2014-11 (Urbana)","|Complete|","3.7","`#103604 <https://github.com/llvm/llvm-project/issues/103604>`__",""
-"`N4190 <https://wg21.link/N4190>`__","Removing auto_ptr, random_shuffle(), And Old <functional> Stuff.","2014-11 (Urbana)","|Complete|","15","`#103605 <https://github.com/llvm/llvm-project/issues/103605>`__",""
-"`N4258 <https://wg21.link/N4258>`__","Cleaning-up noexcept in the Library.","2014-11 (Urbana)","|Complete|","21","`#99937 <https://github.com/llvm/llvm-project/issues/99937>`__",""
-"`N4259 <https://wg21.link/N4259>`__","Wording for std::uncaught_exceptions","2014-11 (Urbana)","|Complete|","3.7","`#103606 <https://github.com/llvm/llvm-project/issues/103606>`__","``std::uncaught_exception`` is deprecated since LLVM 20"
-"`N4277 <https://wg21.link/N4277>`__","TriviallyCopyable ``reference_wrapper``\ .","2014-11 (Urbana)","|Complete|","3.2","`#103608 <https://github.com/llvm/llvm-project/issues/103608>`__",""
-"`N4279 <https://wg21.link/N4279>`__","Improved insertion interface for unique-key maps.","2014-11 (Urbana)","|Complete|","3.7","`#103609 <https://github.com/llvm/llvm-project/issues/103609>`__",""
-"`N4280 <https://wg21.link/N4280>`__","Non-member size() and more","2014-11 (Urbana)","|Complete|","3.6","`#103610 <https://github.com/llvm/llvm-project/issues/103610>`__",""
-"`N4284 <https://wg21.link/N4284>`__","Contiguous Iterators.","2014-11 (Urbana)","|Complete|","3.6","`#103611 <https://github.com/llvm/llvm-project/issues/103611>`__",""
-"`N4285 <https://wg21.link/N4285>`__","Cleanup for exception-specification and throw-expression.","2014-11 (Urbana)","|Complete|","4","`#103612 <https://github.com/llvm/llvm-project/issues/103612>`__",""
+"[N3911](https://wg21.link/N3911)","TransformationTrait Alias `void_t` .","2014-11 (Urbana)","{{Complete}}","3.6","[#103603](https://github.com/llvm/llvm-project/issues/103603)",""
+"[N4089](https://wg21.link/N4089)","Safe conversions in `unique_ptr<T[]>` .","2014-11 (Urbana)","{{Complete}}","5","[#99936](https://github.com/llvm/llvm-project/issues/99936)",""
+"[N4169](https://wg21.link/N4169)","A proposal to add invoke function template","2014-11 (Urbana)","{{Complete}}","3.7","[#103604](https://github.com/llvm/llvm-project/issues/103604)",""
+"[N4190](https://wg21.link/N4190)","Removing auto_ptr, random_shuffle(), And Old \<functional\> Stuff.","2014-11 (Urbana)","{{Complete}}","15","[#103605](https://github.com/llvm/llvm-project/issues/103605)",""
+"[N4258](https://wg21.link/N4258)","Cleaning-up noexcept in the Library.","2014-11 (Urbana)","{{Complete}}","21","[#99937](https://github.com/llvm/llvm-project/issues/99937)",""
+"[N4259](https://wg21.link/N4259)","Wording for std::uncaught_exceptions","2014-11 (Urbana)","{{Complete}}","3.7","[#103606](https://github.com/llvm/llvm-project/issues/103606)","`std::uncaught_exception` is deprecated since LLVM 20"
+"[N4277](https://wg21.link/N4277)","TriviallyCopyable `reference_wrapper` .","2014-11 (Urbana)","{{Complete}}","3.2","[#103608](https://github.com/llvm/llvm-project/issues/103608)",""
+"[N4279](https://wg21.link/N4279)","Improved insertion interface for unique-key maps.","2014-11 (Urbana)","{{Complete}}","3.7","[#103609](https://github.com/llvm/llvm-project/issues/103609)",""
+"[N4280](https://wg21.link/N4280)","Non-member size() and more","2014-11 (Urbana)","{{Complete}}","3.6","[#103610](https://github.com/llvm/llvm-project/issues/103610)",""
+"[N4284](https://wg21.link/N4284)","Contiguous Iterators.","2014-11 (Urbana)","{{Complete}}","3.6","[#103611](https://github.com/llvm/llvm-project/issues/103611)",""
+"[N4285](https://wg21.link/N4285)","Cleanup for exception-specification and throw-expression.","2014-11 (Urbana)","{{Complete}}","4","[#103612](https://github.com/llvm/llvm-project/issues/103612)",""
"","","","","","",""
-"`N4387 <https://wg21.link/N4387>`__","improving pair and tuple","2015-05 (Lenexa)","|Complete|","4","`#103613 <https://github.com/llvm/llvm-project/issues/103613>`__",""
-"`N4389 <https://wg21.link/N4389>`__","bool_constant","2015-05 (Lenexa)","|Complete|","3.7","`#103614 <https://github.com/llvm/llvm-project/issues/103614>`__",""
-"`N4508 <https://wg21.link/N4508>`__","shared_mutex for C++17","2015-05 (Lenexa)","|Complete|","3.7","`#103615 <https://github.com/llvm/llvm-project/issues/103615>`__",""
-"`N4366 <https://wg21.link/N4366>`__","LWG 2228 missing SFINAE rule","2015-05 (Lenexa)","|Complete|","3.1","`#103616 <https://github.com/llvm/llvm-project/issues/103616>`__",""
-"`N4510 <https://wg21.link/N4510>`__","Minimal incomplete type support for standard containers, revision 4","2015-05 (Lenexa)","|Complete|","3.6","`#103617 <https://github.com/llvm/llvm-project/issues/103617>`__",""
+"[N4387](https://wg21.link/N4387)","improving pair and tuple","2015-05 (Lenexa)","{{Complete}}","4","[#103613](https://github.com/llvm/llvm-project/issues/103613)",""
+"[N4389](https://wg21.link/N4389)","bool_constant","2015-05 (Lenexa)","{{Complete}}","3.7","[#103614](https://github.com/llvm/llvm-project/issues/103614)",""
+"[N4508](https://wg21.link/N4508)","shared_mutex for C++17","2015-05 (Lenexa)","{{Complete}}","3.7","[#103615](https://github.com/llvm/llvm-project/issues/103615)",""
+"[N4366](https://wg21.link/N4366)","LWG 2228 missing SFINAE rule","2015-05 (Lenexa)","{{Complete}}","3.1","[#103616](https://github.com/llvm/llvm-project/issues/103616)",""
+"[N4510](https://wg21.link/N4510)","Minimal incomplete type support for standard containers, revision 4","2015-05 (Lenexa)","{{Complete}}","3.6","[#103617](https://github.com/llvm/llvm-project/issues/103617)",""
"","","","","","",""
-"`P0004R1 <https://wg21.link/P0004R1>`__","Remove Deprecated iostreams aliases.","2015-10 (Kona)","|Complete|","3.8","`#103618 <https://github.com/llvm/llvm-project/issues/103618>`__",""
-"`P0006R0 <https://wg21.link/P0006R0>`__","Adopt Type Traits Variable Templates for C++17.","2015-10 (Kona)","|Complete|","3.8","`#103619 <https://github.com/llvm/llvm-project/issues/103619>`__",""
-"`P0092R1 <https://wg21.link/P0092R1>`__","Polishing <chrono>","2015-10 (Kona)","|Complete|","3.8","`#103620 <https://github.com/llvm/llvm-project/issues/103620>`__",""
-"`P0007R1 <https://wg21.link/P0007R1>`__","Constant View: A proposal for a ``std::as_const``\ helper function template.","2015-10 (Kona)","|Complete|","3.8","`#103621 <https://github.com/llvm/llvm-project/issues/103621>`__",""
-"`P0156R0 <https://wg21.link/P0156R0>`__","Variadic lock_guard(rev 3).","2015-10 (Kona)","|Nothing To Do|","","`#103622 <https://github.com/llvm/llvm-project/issues/103622>`__","Pulled at the 2017-01 meeting in Kona"
-"`P0074R0 <https://wg21.link/P0074R0>`__","Making ``std::owner_less``\ more flexible","2015-10 (Kona)","|Complete|","3.8","`#103623 <https://github.com/llvm/llvm-project/issues/103623>`__",""
-"`P0013R1 <https://wg21.link/P0013R1>`__","Logical type traits rev 2","2015-10 (Kona)","|Complete|","3.8","`#103624 <https://github.com/llvm/llvm-project/issues/103624>`__",""
+"[P0004R1](https://wg21.link/P0004R1)","Remove Deprecated iostreams aliases.","2015-10 (Kona)","{{Complete}}","3.8","[#103618](https://github.com/llvm/llvm-project/issues/103618)",""
+"[P0006R0](https://wg21.link/P0006R0)","Adopt Type Traits Variable Templates for C++17.","2015-10 (Kona)","{{Complete}}","3.8","[#103619](https://github.com/llvm/llvm-project/issues/103619)",""
+"[P0092R1](https://wg21.link/P0092R1)","Polishing \<chrono\>","2015-10 (Kona)","{{Complete}}","3.8","[#103620](https://github.com/llvm/llvm-project/issues/103620)",""
+"[P0007R1](https://wg21.link/P0007R1)","Constant View: A proposal for a `std::as_const` helper function template.","2015-10 (Kona)","{{Complete}}","3.8","[#103621](https://github.com/llvm/llvm-project/issues/103621)",""
+"[P0156R0](https://wg21.link/P0156R0)","Variadic lock_guard(rev 3).","2015-10 (Kona)","{{NothingToDo}}","","[#103622](https://github.com/llvm/llvm-project/issues/103622)","Pulled at the 2017-01 meeting in Kona"
+"[P0074R0](https://wg21.link/P0074R0)","Making `std::owner_less` more flexible","2015-10 (Kona)","{{Complete}}","3.8","[#103623](https://github.com/llvm/llvm-project/issues/103623)",""
+"[P0013R1](https://wg21.link/P0013R1)","Logical type traits rev 2","2015-10 (Kona)","{{Complete}}","3.8","[#103624](https://github.com/llvm/llvm-project/issues/103624)",""
"","","","","","",""
-"`P0024R2 <https://wg21.link/P0024R2>`__","The Parallelism TS Should be Standardized","2016-02 (Jacksonville)","|In Progress|","","`#99938 <https://github.com/llvm/llvm-project/issues/99938>`__","Progress is tracked `here <https://github.com/llvm/llvm-project/issues/99938>`__"
-"`P0226R1 <https://wg21.link/P0226R1>`__","Mathematical Special Functions for C++17","2016-02 (Jacksonville)","|In Progress|","","`#99939 <https://github.com/llvm/llvm-project/issues/99939>`__","Progress is tracked `here <https://github.com/llvm/llvm-project/issues/99939>`__"
-"`P0220R1 <https://wg21.link/P0220R1>`__","Adopt Library Fundamentals V1 TS Components for C++17","2016-02 (Jacksonville)","|Complete|","16","`#103625 <https://github.com/llvm/llvm-project/issues/103625>`__",""
-"`P0218R1 <https://wg21.link/P0218R1>`__","Adopt the File System TS for C++17","2016-02 (Jacksonville)","|Complete|","7","`#103626 <https://github.com/llvm/llvm-project/issues/103626>`__",""
-"`P0033R1 <https://wg21.link/P0033R1>`__","Re-enabling shared_from_this","2016-02 (Jacksonville)","|Complete|","3.9","`#103627 <https://github.com/llvm/llvm-project/issues/103627>`__",""
-"`P0005R4 <https://wg21.link/P0005R4>`__","Adopt not_fn from Library Fundamentals 2 for C++17","2016-02 (Jacksonville)","|Complete|","3.9","`#103629 <https://github.com/llvm/llvm-project/issues/103629>`__",""
-"`P0152R1 <https://wg21.link/P0152R1>`__","constexpr ``atomic::is_always_lock_free``\ ","2016-02 (Jacksonville)","|Complete|","3.9","`#103630 <https://github.com/llvm/llvm-project/issues/103630>`__",""
-"`P0185R1 <https://wg21.link/P0185R1>`__","Adding [nothrow-]swappable traits","2016-02 (Jacksonville)","|Complete|","3.9","`#103631 <https://github.com/llvm/llvm-project/issues/103631>`__",""
-"`P0253R1 <https://wg21.link/P0253R1>`__","Fixing a design mistake in the searchers interface","2016-02 (Jacksonville)","|Complete|","3.9","`#103632 <https://github.com/llvm/llvm-project/issues/103632>`__",""
-"`P0025R0 <https://wg21.link/P0025R0>`__","An algorithm to ""clamp"" a value between a pair of boundary values","2016-02 (Jacksonville)","|Complete|","3.9","`#103633 <https://github.com/llvm/llvm-project/issues/103633>`__",""
-"`P0154R1 <https://wg21.link/P0154R1>`__","constexpr std::hardware_{constructive,destructive}_interference_size","2016-02 (Jacksonville)","|Complete|","19","`#103634 <https://github.com/llvm/llvm-project/issues/103634>`__","The required macros are only implemented as of LLVM 19."
-"`P0030R1 <https://wg21.link/P0030R1>`__","Proposal to Introduce a 3-Argument Overload to std::hypot","2016-02 (Jacksonville)","|Complete|","3.9","`#103635 <https://github.com/llvm/llvm-project/issues/103635>`__",""
-"`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","`#103636 <https://github.com/llvm/llvm-project/issues/103636>`__",""
-"`P0272R1 <https://wg21.link/P0272R1>`__","Give ``std::string``\ a non-const ``.data()``\ member function","2016-02 (Jacksonville)","|Complete|","3.9","`#103637 <https://github.com/llvm/llvm-project/issues/103637>`__",""
-"`P0077R2 <https://wg21.link/P0077R2>`__","``is_callable``\ , the missing INVOKE related trait","2016-02 (Jacksonville)","|Complete|","3.9","`#103638 <https://github.com/llvm/llvm-project/issues/103638>`__",""
+"[P0024R2](https://wg21.link/P0024R2)","The Parallelism TS Should be Standardized","2016-02 (Jacksonville)","{{InProgress}}","","[#99938](https://github.com/llvm/llvm-project/issues/99938)","Progress is tracked [here](https://github.com/llvm/llvm-project/issues/99938)"
+"[P0226R1](https://wg21.link/P0226R1)","Mathematical Special Functions for C++17","2016-02 (Jacksonville)","{{InProgress}}","","[#99939](https://github.com/llvm/llvm-project/issues/99939)","Progress is tracked [here](https://github.com/llvm/llvm-project/issues/99939)"
+"[P0220R1](https://wg21.link/P0220R1)","Adopt Library Fundamentals V1 TS Components for C++17","2016-02 (Jacksonville)","{{Complete}}","16","[#103625](https://github.com/llvm/llvm-project/issues/103625)",""
+"[P0218R1](https://wg21.link/P0218R1)","Adopt the File System TS for C++17","2016-02 (Jacksonville)","{{Complete}}","7","[#103626](https://github.com/llvm/llvm-project/issues/103626)",""
+"[P0033R1](https://wg21.link/P0033R1)","Re-enabling shared_from_this","2016-02 (Jacksonville)","{{Complete}}","3.9","[#103627](https://github.com/llvm/llvm-project/issues/103627)",""
+"[P0005R4](https://wg21.link/P0005R4)","Adopt not_fn from Library Fundamentals 2 for C++17","2016-02 (Jacksonville)","{{Complete}}","3.9","[#103629](https://github.com/llvm/llvm-project/issues/103629)",""
+"[P0152R1](https://wg21.link/P0152R1)","constexpr `atomic::is_always_lock_free` ","2016-02 (Jacksonville)","{{Complete}}","3.9","[#103630](https://github.com/llvm/llvm-project/issues/103630)",""
+"[P0185R1](https://wg21.link/P0185R1)","Adding [nothrow-]swappable traits","2016-02 (Jacksonville)","{{Complete}}","3.9","[#103631](https://github.com/llvm/llvm-project/issues/103631)",""
+"[P0253R1](https://wg21.link/P0253R1)","Fixing a design mistake in the searchers interface","2016-02 (Jacksonville)","{{Complete}}","3.9","[#103632](https://github.com/llvm/llvm-project/issues/103632)",""
+"[P0025R0](https://wg21.link/P0025R0)","An algorithm to ""clamp"" a value between a pair of boundary values","2016-02 (Jacksonville)","{{Complete}}","3.9","[#103633](https://github.com/llvm/llvm-project/issues/103633)",""
+"[P0154R1](https://wg21.link/P0154R1)","constexpr std::hardware_{constructive,destructive}_interference_size","2016-02 (Jacksonville)","{{Complete}}","19","[#103634](https://github.com/llvm/llvm-project/issues/103634)","The required macros are only implemented as of LLVM 19."
+"[P0030R1](https://wg21.link/P0030R1)","Proposal to Introduce a 3-Argument Overload to std::hypot","2016-02 (Jacksonville)","{{Complete}}","3.9","[#103635](https://github.com/llvm/llvm-project/issues/103635)",""
+"[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","[#103636](https://github.com/llvm/llvm-project/issues/103636)",""
+"[P0272R1](https://wg21.link/P0272R1)","Give `std::string` a non-const `.data()` member function","2016-02 (Jacksonville)","{{Complete}}","3.9","[#103637](https://github.com/llvm/llvm-project/issues/103637)",""
+"[P0077R2](https://wg21.link/P0077R2)","`is_callable` , the missing INVOKE related trait","2016-02 (Jacksonville)","{{Complete}}","3.9","[#103638](https://github.com/llvm/llvm-project/issues/103638)",""
"","","","","","",""
-"`P0032R3 <https://wg21.link/P0032R3>`__","Homogeneous interface for variant, any and optional","2016-06 (Oulu)","|Complete|","4","`#103639 <https://github.com/llvm/llvm-project/issues/103639>`__",""
-"`P0040R3 <https://wg21.link/P0040R3>`__","Extending memory management tools","2016-06 (Oulu)","|Partial|","","`#103640 <https://github.com/llvm/llvm-project/issues/103640>`__","The serial overloads have been available since v4, but the ``ExecutionPolicy`` overloads have not been implemented."
-"`P0063R3 <https://wg21.link/P0063R3>`__","C++17 should refer to C11 instead of C99","2016-06 (Oulu)","|Complete|","7","`#103642 <https://github.com/llvm/llvm-project/issues/103642>`__",""
-"`P0067R3 <https://wg21.link/P0067R3>`__","Elementary string conversions","2016-06 (Oulu)","|Nothing To Do|","n/a","`#103643 <https://github.com/llvm/llvm-project/issues/103643>`__","Resolved by `P0067R5 <https://wg21.link/P0067R5>`__"
-"`P0083R3 <https://wg21.link/P0083R3>`__","Splicing Maps and Sets","2016-06 (Oulu)","|Complete|","8","`#103645 <https://github.com/llvm/llvm-project/issues/103645>`__",""
-"`P0084R2 <https://wg21.link/P0084R2>`__","Emplace Return Type","2016-06 (Oulu)","|Complete|","4","`#103646 <https://github.com/llvm/llvm-project/issues/103646>`__",""
-"`P0088R3 <https://wg21.link/P0088R3>`__","Variant: a type-safe union for C++17","2016-06 (Oulu)","|Complete|","4","`#103647 <https://github.com/llvm/llvm-project/issues/103647>`__",""
-"`P0137R1 <https://wg21.link/P0137R1>`__","Core Issue 1776: Replacement of class objects containing reference members","2016-06 (Oulu)","|Complete|","6","`#103648 <https://github.com/llvm/llvm-project/issues/103648>`__",""
-"`P0163R0 <https://wg21.link/P0163R0>`__","shared_ptr::weak_type","2016-06 (Oulu)","|Complete|","3.9","`#103649 <https://github.com/llvm/llvm-project/issues/103649>`__",""
-"`P0174R2 <https://wg21.link/P0174R2>`__","Deprecating Vestigial Library Parts in C++17","2016-06 (Oulu)","|Complete|","15","`#103650 <https://github.com/llvm/llvm-project/issues/103650>`__",""
-"`P0175R1 <https://wg21.link/P0175R1>`__","Synopses for the C library","2016-06 (Oulu)","|Nothing To Do|","n/a","`#99941 <https://github.com/llvm/llvm-project/issues/99941>`__",""
-"`P0180R2 <https://wg21.link/P0180R2>`__","Reserve a New Library Namespace for Future Standardization","2016-06 (Oulu)","|Nothing To Do|","n/a","`#103651 <https://github.com/llvm/llvm-project/issues/103651>`__",""
-"`P0181R1 <https://wg21.link/P0181R1>`__","Ordered by Default","2016-06 (Oulu)","|Nothing To Do|","n/a","`#103652 <https://github.com/llvm/llvm-project/issues/103652>`__","Pulled at the 2017-01 meeting in Kona"
-"`P0209R2 <https://wg21.link/P0209R2>`__","make_from_tuple: apply for construction","2016-06 (Oulu)","|Complete|","3.9","`#103653 <https://github.com/llvm/llvm-project/issues/103653>`__",""
-"`P0219R1 <https://wg21.link/P0219R1>`__","Relative Paths for Filesystem","2016-06 (Oulu)","|Complete|","7","`#103654 <https://github.com/llvm/llvm-project/issues/103654>`__",""
-"`P0254R2 <https://wg21.link/P0254R2>`__","Integrating std::string_view and std::string","2016-06 (Oulu)","|Complete|","4","`#103655 <https://github.com/llvm/llvm-project/issues/103655>`__",""
-"`P0258R2 <https://wg21.link/P0258R2>`__","has_unique_object_representations","2016-06 (Oulu)","|Complete|","6","`#103656 <https://github.com/llvm/llvm-project/issues/103656>`__",""
-"`P0295R0 <https://wg21.link/P0295R0>`__","Adopt Selected Library Fundamentals V2 Components for C++17","2016-06 (Oulu)","|Complete|","4","`#103657 <https://github.com/llvm/llvm-project/issues/103657>`__",""
-"`P0302R1 <https://wg21.link/P0302R1>`__","Removing Allocator Support in std::function","2016-06 (Oulu)","|Complete|","4","`#103658 <https://github.com/llvm/llvm-project/issues/103658>`__",""
-"`P0307R2 <https://wg21.link/P0307R2>`__","Making Optional Greater Equal Again","2016-06 (Oulu)","|Complete|","4","`#103659 <https://github.com/llvm/llvm-project/issues/103659>`__",""
-"`P0336R1 <https://wg21.link/P0336R1>`__","Better Names for Parallel Execution Policies in C++17","2016-06 (Oulu)","|Complete|","17","`#103660 <https://github.com/llvm/llvm-project/issues/103660>`__",""
-"`P0337R0 <https://wg21.link/P0337R0>`__","Delete ``operator=``\ for polymorphic_allocator","2016-06 (Oulu)","|Complete|","3.9","`#103661 <https://github.com/llvm/llvm-project/issues/103661>`__",""
-"`P0346R1 <https://wg21.link/P0346R1>`__","A <random> Nomenclature Tweak","2016-06 (Oulu)","|Complete|","3.9","`#103662 <https://github.com/llvm/llvm-project/issues/103662>`__",""
-"`P0358R1 <https://wg21.link/P0358R1>`__","Fixes for not_fn","2016-06 (Oulu)","|Complete|","3.9","`#103663 <https://github.com/llvm/llvm-project/issues/103663>`__",""
-"`P0371R1 <https://wg21.link/P0371R1>`__","Temporarily discourage memory_order_consume","2016-06 (Oulu)","|Nothing To Do|","n/a","`#103664 <https://github.com/llvm/llvm-project/issues/103664>`__",""
-"`P0392R0 <https://wg21.link/P0392R0>`__","Adapting string_view by filesystem paths","2016-06 (Oulu)","|Complete|","4","`#103665 <https://github.com/llvm/llvm-project/issues/103665>`__",""
-"`P0393R3 <https://wg21.link/P0393R3>`__","Making Variant Greater Equal","2016-06 (Oulu)","|Complete|","4","`#103666 <https://github.com/llvm/llvm-project/issues/103666>`__",""
-"`P0394R4 <https://wg21.link/P0394R4>`__","Hotel Parallelifornia: terminate() for Parallel Algorithms Exception Handling","2016-06 (Oulu)","|Complete|","17","`#103667 <https://github.com/llvm/llvm-project/issues/103667>`__",""
+"[P0032R3](https://wg21.link/P0032R3)","Homogeneous interface for variant, any and optional","2016-06 (Oulu)","{{Complete}}","4","[#103639](https://github.com/llvm/llvm-project/issues/103639)",""
+"[P0040R3](https://wg21.link/P0040R3)","Extending memory management tools","2016-06 (Oulu)","{{Partial}}","","[#103640](https://github.com/llvm/llvm-project/issues/103640)","The serial overloads have been available since v4, but the `ExecutionPolicy` overloads have not been implemented."
+"[P0063R3](https://wg21.link/P0063R3)","C++17 should refer to C11 instead of C99","2016-06 (Oulu)","{{Complete}}","7","[#103642](https://github.com/llvm/llvm-project/issues/103642)",""
+"[P0067R3](https://wg21.link/P0067R3)","Elementary string conversions","2016-06 (Oulu)","{{NothingToDo}}","n/a","[#103643](https://github.com/llvm/llvm-project/issues/103643)","Resolved by [P0067R5](https://wg21.link/P0067R5)"
+"[P0083R3](https://wg21.link/P0083R3)","Splicing Maps and Sets","2016-06 (Oulu)","{{Complete}}","8","[#103645](https://github.com/llvm/llvm-project/issues/103645)",""
+"[P0084R2](https://wg21.link/P0084R2)","Emplace Return Type","2016-06 (Oulu)","{{Complete}}","4","[#103646](https://github.com/llvm/llvm-project/issues/103646)",""
+"[P0088R3](https://wg21.link/P0088R3)","Variant: a type-safe union for C++17","2016-06 (Oulu)","{{Complete}}","4","[#103647](https://github.com/llvm/llvm-project/issues/103647)",""
+"[P0137R1](https://wg21.link/P0137R1)","Core Issue 1776: Replacement of class objects containing reference members","2016-06 (Oulu)","{{Complete}}","6","[#103648](https://github.com/llvm/llvm-project/issues/103648)",""
+"[P0163R0](https://wg21.link/P0163R0)","shared_ptr::weak_type","2016-06 (Oulu)","{{Complete}}","3.9","[#103649](https://github.com/llvm/llvm-project/issues/103649)",""
+"[P0174R2](https://wg21.link/P0174R2)","Deprecating Vestigial Library Parts in C++17","2016-06 (Oulu)","{{Complete}}","15","[#103650](https://github.com/llvm/llvm-project/issues/103650)",""
+"[P0175R1](https://wg21.link/P0175R1)","Synopses for the C library","2016-06 (Oulu)","{{NothingToDo}}","n/a","[#99941](https://github.com/llvm/llvm-project/issues/99941)",""
+"[P0180R2](https://wg21.link/P0180R2)","Reserve a New Library Namespace for Future Standardization","2016-06 (Oulu)","{{NothingToDo}}","n/a","[#103651](https://github.com/llvm/llvm-project/issues/103651)",""
+"[P0181R1](https://wg21.link/P0181R1)","Ordered by Default","2016-06 (Oulu)","{{NothingToDo}}","n/a","[#103652](https://github.com/llvm/llvm-project/issues/103652)","Pulled at the 2017-01 meeting in Kona"
+"[P0209R2](https://wg21.link/P0209R2)","make_from_tuple: apply for construction","2016-06 (Oulu)","{{Complete}}","3.9","[#103653](https://github.com/llvm/llvm-project/issues/103653)",""
+"[P0219R1](https://wg21.link/P0219R1)","Relative Paths for Filesystem","2016-06 (Oulu)","{{Complete}}","7","[#103654](https://github.com/llvm/llvm-project/issues/103654)",""
+"[P0254R2](https://wg21.link/P0254R2)","Integrating std::string_view and std::string","2016-06 (Oulu)","{{Complete}}","4","[#103655](https://github.com/llvm/llvm-project/issues/103655)",""
+"[P0258R2](https://wg21.link/P0258R2)","has_unique_object_representations","2016-06 (Oulu)","{{Complete}}","6","[#103656](https://github.com/llvm/llvm-project/issues/103656)",""
+"[P0295R0](https://wg21.link/P0295R0)","Adopt Selected Library Fundamentals V2 Components for C++17","2016-06 (Oulu)","{{Complete}}","4","[#103657](https://github.com/llvm/llvm-project/issues/103657)",""
+"[P0302R1](https://wg21.link/P0302R1)","Removing Allocator Support in std::function","2016-06 (Oulu)","{{Complete}}","4","[#103658](https://github.com/llvm/llvm-project/issues/103658)",""
+"[P0307R2](https://wg21.link/P0307R2)","Making Optional Greater Equal Again","2016-06 (Oulu)","{{Complete}}","4","[#103659](https://github.com/llvm/llvm-project/issues/103659)",""
+"[P0336R1](https://wg21.link/P0336R1)","Better Names for Parallel Execution Policies in C++17","2016-06 (Oulu)","{{Complete}}","17","[#103660](https://github.com/llvm/llvm-project/issues/103660)",""
+"[P0337R0](https://wg21.link/P0337R0)","Delete `operator=` for polymorphic_allocator","2016-06 (Oulu)","{{Complete}}","3.9","[#103661](https://github.com/llvm/llvm-project/issues/103661)",""
+"[P0346R1](https://wg21.link/P0346R1)","A \<random\> Nomenclature Tweak","2016-06 (Oulu)","{{Complete}}","3.9","[#103662](https://github.com/llvm/llvm-project/issues/103662)",""
+"[P0358R1](https://wg21.link/P0358R1)","Fixes for not_fn","2016-06 (Oulu)","{{Complete}}","3.9","[#103663](https://github.com/llvm/llvm-project/issues/103663)",""
+"[P0371R1](https://wg21.link/P0371R1)","Temporarily discourage memory_order_consume","2016-06 (Oulu)","{{NothingToDo}}","n/a","[#103664](https://github.com/llvm/llvm-project/issues/103664)",""
+"[P0392R0](https://wg21.link/P0392R0)","Adapting string_view by filesystem paths","2016-06 (Oulu)","{{Complete}}","4","[#103665](https://github.com/llvm/llvm-project/issues/103665)",""
+"[P0393R3](https://wg21.link/P0393R3)","Making Variant Greater Equal","2016-06 (Oulu)","{{Complete}}","4","[#103666](https://github.com/llvm/llvm-project/issues/103666)",""
+"[P0394R4](https://wg21.link/P0394R4)","Hotel Parallelifornia: terminate() for Parallel Algorithms Exception Handling","2016-06 (Oulu)","{{Complete}}","17","[#103667](https://github.com/llvm/llvm-project/issues/103667)",""
"","","","","","",""
-"`P0003R5 <https://wg21.link/P0003R5>`__","Removing Deprecated Exception Specifications from C++17","2016-11 (Issaquah)","|Complete|","5","`#103668 <https://github.com/llvm/llvm-project/issues/103668>`__",""
-"`P0067R5 <https://wg21.link/P0067R5>`__","Elementary string conversions, revision 5","2016-11 (Issaquah)","|Partial|","","`#99940 <https://github.com/llvm/llvm-project/issues/99940>`__","For integer types, ``std::(to|from)_chars`` has been available since v7; for ``float`` and ``double``, ``std::to_chars`` since v14 and ``std::from_chars`` since v20. Support is complete except for ``long double``."
-"`P0403R1 <https://wg21.link/P0403R1>`__","Literal suffixes for ``basic_string_view``\ ","2016-11 (Issaquah)","|Complete|","4","`#103669 <https://github.com/llvm/llvm-project/issues/103669>`__",""
-"`P0414R2 <https://wg21.link/P0414R2>`__","Merging shared_ptr changes from Library Fundamentals to C++17","2016-11 (Issaquah)","|Complete|","11","`#103670 <https://github.com/llvm/llvm-project/issues/103670>`__",""
-"`P0418R2 <https://wg21.link/P0418R2>`__","Fail or succeed: there is no atomic lattice","2016-11 (Issaquah)","","","`#99942 <https://github.com/llvm/llvm-project/issues/99942>`__",""
-"`P0426R1 <https://wg21.link/P0426R1>`__","Constexpr for ``std::char_traits``\ ","2016-11 (Issaquah)","|Complete|","4","`#103671 <https://github.com/llvm/llvm-project/issues/103671>`__",""
-"`P0435R1 <https://wg21.link/P0435R1>`__","Resolving LWG Issues re ``common_type``\ ","2016-11 (Issaquah)","|Complete|","4","`#103672 <https://github.com/llvm/llvm-project/issues/103672>`__",""
-"`P0502R0 <https://wg21.link/P0502R0>`__","Throwing out of a parallel algorithm terminates - but how?","2016-11 (Issaquah)","","","`#99943 <https://github.com/llvm/llvm-project/issues/99943>`__",""
-"`P0503R0 <https://wg21.link/P0503R0>`__","Correcting library usage of ""literal type""","2016-11 (Issaquah)","|Complete|","4","`#103673 <https://github.com/llvm/llvm-project/issues/103673>`__",""
-"`P0504R0 <https://wg21.link/P0504R0>`__","Revisiting in-place tag types for any/optional/variant","2016-11 (Issaquah)","|Complete|","4","`#103674 <https://github.com/llvm/llvm-project/issues/103674>`__",""
-"`P0505R0 <https://wg21.link/P0505R0>`__","Wording for GB 50 - constexpr for chrono","2016-11 (Issaquah)","|Complete|","4","`#103675 <https://github.com/llvm/llvm-project/issues/103675>`__",""
-"`P0508R0 <https://wg21.link/P0508R0>`__","Wording for GB 58 - structured bindings for node_handles","2016-11 (Issaquah)","|Complete|","7","`#99944 <https://github.com/llvm/llvm-project/issues/99944>`__",""
-"`P0509R1 <https://wg21.link/P0509R1>`__","Updating ""Restrictions on exception handling""","2016-11 (Issaquah)","|Nothing To Do|","n/a","`#103676 <https://github.com/llvm/llvm-project/issues/103676>`__",""
-"`P0510R0 <https://wg21.link/P0510R0>`__","Disallowing references, incomplete types, arrays, and empty variants","2016-11 (Issaquah)","|Complete|","4","`#103677 <https://github.com/llvm/llvm-project/issues/103677>`__",""
-"`P0513R0 <https://wg21.link/P0513R0>`__","Poisoning the Hash","2016-11 (Issaquah)","|Complete|","5","`#103678 <https://github.com/llvm/llvm-project/issues/103678>`__","Implemented as a DR against C++11 since LLVM 22."
-"`P0516R0 <https://wg21.link/P0516R0>`__","Clarify That shared_future's Copy Operations have Wide Contracts","2016-11 (Issaquah)","|Complete|","4","`#103679 <https://github.com/llvm/llvm-project/issues/103679>`__",""
-"`P0517R0 <https://wg21.link/P0517R0>`__","Make future_error Constructible","2016-11 (Issaquah)","|Complete|","4","`#103680 <https://github.com/llvm/llvm-project/issues/103680>`__",""
-"`P0521R0 <https://wg21.link/P0521R0>`__","Proposed Resolution for CA 14 (shared_ptr use_count/unique)","2016-11 (Issaquah)","|Complete|","18","`#103681 <https://github.com/llvm/llvm-project/issues/103681>`__",""
+"[P0003R5](https://wg21.link/P0003R5)","Removing Deprecated Exception Specifications from C++17","2016-11 (Issaquah)","{{Complete}}","5","[#103668](https://github.com/llvm/llvm-project/issues/103668)",""
+"[P0067R5](https://wg21.link/P0067R5)","Elementary string conversions, revision 5","2016-11 (Issaquah)","{{Partial}}","","[#99940](https://github.com/llvm/llvm-project/issues/99940)","For integer types, `std::(to|from)_chars` has been available since v7; for `float` and `double`, `std::to_chars` since v14 and `std::from_chars` since v20. Support is complete except for `long double`."
+"[P0403R1](https://wg21.link/P0403R1)","Literal suffixes for `basic_string_view` ","2016-11 (Issaquah)","{{Complete}}","4","[#103669](https://github.com/llvm/llvm-project/issues/103669)",""
+"[P0414R2](https://wg21.link/P0414R2)","Merging shared_ptr changes from Library Fundamentals to C++17","2016-11 (Issaquah)","{{Complete}}","11","[#103670](https://github.com/llvm/llvm-project/issues/103670)",""
+"[P0418R2](https://wg21.link/P0418R2)","Fail or succeed: there is no atomic lattice","2016-11 (Issaquah)","","","[#99942](https://github.com/llvm/llvm-project/issues/99942)",""
+"[P0426R1](https://wg21.link/P0426R1)","Constexpr for `std::char_traits` ","2016-11 (Issaquah)","{{Complete}}","4","[#103671](https://github.com/llvm/llvm-project/issues/103671)",""
+"[P0435R1](https://wg21.link/P0435R1)","Resolving LWG Issues re `common_type` ","2016-11 (Issaquah)","{{Complete}}","4","[#103672](https://github.com/llvm/llvm-project/issues/103672)",""
+"[P0502R0](https://wg21.link/P0502R0)","Throwing out of a parallel algorithm terminates - but how?","2016-11 (Issaquah)","","","[#99943](https://github.com/llvm/llvm-project/issues/99943)",""
+"[P0503R0](https://wg21.link/P0503R0)","Correcting library usage of ""literal type""","2016-11 (Issaquah)","{{Complete}}","4","[#103673](https://github.com/llvm/llvm-project/issues/103673)",""
+"[P0504R0](https://wg21.link/P0504R0)","Revisiting in-place tag types for any/optional/variant","2016-11 (Issaquah)","{{Complete}}","4","[#103674](https://github.com/llvm/llvm-project/issues/103674)",""
+"[P0505R0](https://wg21.link/P0505R0)","Wording for GB 50 - constexpr for chrono","2016-11 (Issaquah)","{{Complete}}","4","[#103675](https://github.com/llvm/llvm-project/issues/103675)",""
+"[P0508R0](https://wg21.link/P0508R0)","Wording for GB 58 - structured bindings for node_handles","2016-11 (Issaquah)","{{Complete}}","7","[#99944](https://github.com/llvm/llvm-project/issues/99944)",""
+"[P0509R1](https://wg21.link/P0509R1)","Updating ""Restrictions on exception handling""","2016-11 (Issaquah)","{{NothingToDo}}","n/a","[#103676](https://github.com/llvm/llvm-project/issues/103676)",""
+"[P0510R0](https://wg21.link/P0510R0)","Disallowing references, incomplete types, arrays, and empty variants","2016-11 (Issaquah)","{{Complete}}","4","[#103677](https://github.com/llvm/llvm-project/issues/103677)",""
+"[P0513R0](https://wg21.link/P0513R0)","Poisoning the Hash","2016-11 (Issaquah)","{{Complete}}","5","[#103678](https://github.com/llvm/llvm-project/issues/103678)","Implemented as a DR against C++11 since LLVM 22."
+"[P0516R0](https://wg21.link/P0516R0)","Clarify That shared_future's Copy Operations have Wide Contracts","2016-11 (Issaquah)","{{Complete}}","4","[#103679](https://github.com/llvm/llvm-project/issues/103679)",""
+"[P0517R0](https://wg21.link/P0517R0)","Make future_error Constructible","2016-11 (Issaquah)","{{Complete}}","4","[#103680](https://github.com/llvm/llvm-project/issues/103680)",""
+"[P0521R0](https://wg21.link/P0521R0)","Proposed Resolution for CA 14 (shared_ptr use_count/unique)","2016-11 (Issaquah)","{{Complete}}","18","[#103681](https://github.com/llvm/llvm-project/issues/103681)",""
"","","","","","",""
-"`P0156R2 <https://wg21.link/P0156R2>`__","Variadic Lock guard(rev 5)","2017-02 (Kona)","|Complete|","5","`#103682 <https://github.com/llvm/llvm-project/issues/103682>`__",""
-"`P0270R3 <https://wg21.link/P0270R3>`__","Removing C dependencies from signal handler wording","2017-02 (Kona)","|Nothing To Do|","","`#99946 <https://github.com/llvm/llvm-project/issues/99946>`__",""
-"`P0298R3 <https://wg21.link/P0298R3>`__","A byte type definition","2017-02 (Kona)","|Complete|","5","`#103683 <https://github.com/llvm/llvm-project/issues/103683>`__",""
-"`P0317R1 <https://wg21.link/P0317R1>`__","Directory Entry Caching for Filesystem","2017-02 (Kona)","|Complete|","7","`#103684 <https://github.com/llvm/llvm-project/issues/103684>`__",""
-"`P0430R2 <https://wg21.link/P0430R2>`__","File system library on non-POSIX-like operating systems","2017-02 (Kona)","|Complete|","7","`#103685 <https://github.com/llvm/llvm-project/issues/103685>`__",""
-"`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","`#103686 <https://github.com/llvm/llvm-project/issues/103686>`__",""
-"`P0452R1 <https://wg21.link/P0452R1>`__","Unifying <numeric> Parallel Algorithms","2017-02 (Kona)","|Partial|","","`#99948 <https://github.com/llvm/llvm-project/issues/99948>`__","The changes to ``std::transform_inclusive_scan`` and ``std::transform_exclusive_scan`` have not yet been implemented."
-"`P0467R2 <https://wg21.link/P0467R2>`__","Iterator Concerns for Parallel Algorithms","2017-02 (Kona)","|Partial|","","`#99949 <https://github.com/llvm/llvm-project/issues/99949>`__",""
-"`P0492R2 <https://wg21.link/P0492R2>`__","Proposed Resolution of C++17 National Body Comments for Filesystems","2017-02 (Kona)","|Complete|","7","`#103687 <https://github.com/llvm/llvm-project/issues/103687>`__",""
-"`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|","","`#103689 <https://github.com/llvm/llvm-project/issues/103689>`__",""
-"`P0523R1 <https://wg21.link/P0523R1>`__","Wording for CH 10: Complexity of parallel algorithms","2017-02 (Kona)","|Nothing To Do|","","`#103690 <https://github.com/llvm/llvm-project/issues/103690>`__",""
-"`P0548R1 <https://wg21.link/P0548R1>`__","common_type and duration","2017-02 (Kona)","|Complete|","5","`#103691 <https://github.com/llvm/llvm-project/issues/103691>`__",""
-"`P0558R1 <https://wg21.link/P0558R1>`__","Resolving atomic<T> named base class inconsistencies","2017-02 (Kona)","|Complete|","","`#103693 <https://github.com/llvm/llvm-project/issues/103693>`__",""
-"`P0574R1 <https://wg21.link/P0574R1>`__","Algorithm Complexity Constraints and Parallel Overloads","2017-02 (Kona)","|Nothing To Do|","","`#103694 <https://github.com/llvm/llvm-project/issues/103694>`__",""
-"`P0599R1 <https://wg21.link/P0599R1>`__","noexcept for hash functions","2017-02 (Kona)","|Complete|","5","`#103695 <https://github.com/llvm/llvm-project/issues/103695>`__",""
-"`P0604R0 <https://wg21.link/P0604R0>`__","Resolving GB 55, US 84, US 85, US 86","2017-02 (Kona)","|Complete|","","`#103696 <https://github.com/llvm/llvm-project/issues/103696>`__",""
-"`P0607R0 <https://wg21.link/P0607R0>`__","Inline Variables for the Standard Library","2017-02 (Kona)","|In Progress|","6","`#99951 <https://github.com/llvm/llvm-project/issues/99951>`__","The parts of P0607 that are not done are the ``<regex>`` bits"
-"`P0618R0 <https://wg21.link/P0618R0>`__","Deprecating <codecvt>","2017-02 (Kona)","|Complete|","15","`#103697 <https://github.com/llvm/llvm-project/issues/103697>`__",""
-"`P0623R0 <https://wg21.link/P0623R0>`__","Final C++17 Parallel Algorithms Fixes","2017-02 (Kona)","|Nothing To Do|","","`#103698 <https://github.com/llvm/llvm-project/issues/103698>`__",""
+"[P0156R2](https://wg21.link/P0156R2)","Variadic Lock guard(rev 5)","2017-02 (Kona)","{{Complete}}","5","[#103682](https://github.com/llvm/llvm-project/issues/103682)",""
+"[P0270R3](https://wg21.link/P0270R3)","Removing C dependencies from signal handler wording","2017-02 (Kona)","{{NothingToDo}}","","[#99946](https://github.com/llvm/llvm-project/issues/99946)",""
+"[P0298R3](https://wg21.link/P0298R3)","A byte type definition","2017-02 (Kona)","{{Complete}}","5","[#103683](https://github.com/llvm/llvm-project/issues/103683)",""
+"[P0317R1](https://wg21.link/P0317R1)","Directory Entry Caching for Filesystem","2017-02 (Kona)","{{Complete}}","7","[#103684](https://github.com/llvm/llvm-project/issues/103684)",""
+"[P0430R2](https://wg21.link/P0430R2)","File system library on non-POSIX-like operating systems","2017-02 (Kona)","{{Complete}}","7","[#103685](https://github.com/llvm/llvm-project/issues/103685)",""
+"[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","[#103686](https://github.com/llvm/llvm-project/issues/103686)",""
+"[P0452R1](https://wg21.link/P0452R1)","Unifying \<numeric\> Parallel Algorithms","2017-02 (Kona)","{{Partial}}","","[#99948](https://github.com/llvm/llvm-project/issues/99948)","The changes to `std::transform_inclusive_scan` and `std::transform_exclusive_scan` have not yet been implemented."
+"[P0467R2](https://wg21.link/P0467R2)","Iterator Concerns for Parallel Algorithms","2017-02 (Kona)","{{Partial}}","","[#99949](https://github.com/llvm/llvm-project/issues/99949)",""
+"[P0492R2](https://wg21.link/P0492R2)","Proposed Resolution of C++17 National Body Comments for Filesystems","2017-02 (Kona)","{{Complete}}","7","[#103687](https://github.com/llvm/llvm-project/issues/103687)",""
+"[P0518R1](https://wg21.link/P0518R1)","Allowing copies as arguments to function objects given to parallel algorithms in response to CH11","2017-02 (Kona)","{{NothingToDo}}","","[#103689](https://github.com/llvm/llvm-project/issues/103689)",""
+"[P0523R1](https://wg21.link/P0523R1)","Wording for CH 10: Complexity of parallel algorithms","2017-02 (Kona)","{{NothingToDo}}","","[#103690](https://github.com/llvm/llvm-project/issues/103690)",""
+"[P0548R1](https://wg21.link/P0548R1)","common_type and duration","2017-02 (Kona)","{{Complete}}","5","[#103691](https://github.com/llvm/llvm-project/issues/103691)",""
+"[P0558R1](https://wg21.link/P0558R1)","Resolving atomic\<T\> named base class inconsistencies","2017-02 (Kona)","{{Complete}}","","[#103693](https://github.com/llvm/llvm-project/issues/103693)",""
+"[P0574R1](https://wg21.link/P0574R1)","Algorithm Complexity Constraints and Parallel Overloads","2017-02 (Kona)","{{NothingToDo}}","","[#103694](https://github.com/llvm/llvm-project/issues/103694)",""
+"[P0599R1](https://wg21.link/P0599R1)","noexcept for hash functions","2017-02 (Kona)","{{Complete}}","5","[#103695](https://github.com/llvm/llvm-project/issues/103695)",""
+"[P0604R0](https://wg21.link/P0604R0)","Resolving GB 55, US 84, US 85, US 86","2017-02 (Kona)","{{Complete}}","","[#103696](https://github.com/llvm/llvm-project/issues/103696)",""
+"[P0607R0](https://wg21.link/P0607R0)","Inline Variables for the Standard Library","2017-02 (Kona)","{{InProgress}}","6","[#99951](https://github.com/llvm/llvm-project/issues/99951)","The parts of P0607 that are not done are the `<regex>` bits"
+"[P0618R0](https://wg21.link/P0618R0)","Deprecating \<codecvt\>","2017-02 (Kona)","{{Complete}}","15","[#103697](https://github.com/llvm/llvm-project/issues/103697)",""
+"[P0623R0](https://wg21.link/P0623R0)","Final C++17 Parallel Algorithms Fixes","2017-02 (Kona)","{{NothingToDo}}","","[#103698](https://github.com/llvm/llvm-project/issues/103698)",""
"","","","","","",""
-"`P0682R1 <https://wg21.link/P0682R1>`__","Repairing elementary string conversions","2017-07 (Toronto)","","","`#99952 <https://github.com/llvm/llvm-project/issues/99952>`__",""
-"`P0739R0 <https://wg21.link/P0739R0>`__","Some improvements to class template argument deduction integration into the standard library","2017-07 (Toronto)","|Complete|","5","`#103699 <https://github.com/llvm/llvm-project/issues/103699>`__",""
+"[P0682R1](https://wg21.link/P0682R1)","Repairing elementary string conversions","2017-07 (Toronto)","","","[#99952](https://github.com/llvm/llvm-project/issues/99952)",""
+"[P0739R0](https://wg21.link/P0739R0)","Some improvements to class template argument deduction integration into the standard library","2017-07 (Toronto)","{{Complete}}","5","[#103699](https://github.com/llvm/llvm-project/issues/103699)",""
diff --git a/libcxx/docs/Status/Cxx20.md b/libcxx/docs/Status/Cxx20.md
index ddf2e81352a68..0721f1e841b55 100644
--- a/libcxx/docs/Status/Cxx20.md
+++ b/libcxx/docs/Status/Cxx20.md
@@ -2,13 +2,12 @@
# libc++ C++20 Status
-```{eval-rst}
-.. include:: ../Helpers/Styles.md
-```
+:::{include} ../Helpers/Styles.md
+:::
-```{contents}
+:::{contents}
:local: true
-```
+:::
## Overview
@@ -30,18 +29,24 @@ The groups that have contributed papers:
## Paper Status
```{eval-rst}
-.. csv-table::
- :file: Cxx20Papers.csv
- :header-rows: 1
- :widths: auto
+.. role:: notstarted
+.. role:: nothingtodo
+.. role:: inprogress
+.. role:: inreview
+.. role:: partial
+.. role:: complete
```
-## Library Working Group Issues Status
+:::{csv-table}
+:file: Cxx20Papers.csv
+:header-rows: 1
+:widths: auto
+:::
-```{eval-rst}
-.. csv-table::
- :file: Cxx20Issues.csv
- :header-rows: 1
- :widths: auto
-```
+## Library Working Group Issues Status
+:::{csv-table}
+:file: Cxx20Issues.csv
+:header-rows: 1
+:widths: auto
+:::
diff --git a/libcxx/docs/Status/Cxx20Issues.csv b/libcxx/docs/Status/Cxx20Issues.csv
index e4ff0f28b5d33..ec62fdb3a7456 100644
--- a/libcxx/docs/Status/Cxx20Issues.csv
+++ b/libcxx/docs/Status/Cxx20Issues.csv
@@ -1,302 +1,302 @@
"Issue #","Issue Name","Meeting","Status","First released version","GitHub issue","Notes"
-"`LWG2070 <https://wg21.link/LWG2070>`__","``allocate_shared``\ should use ``allocator_traits<A>::construct``\ ","2017-07 (Toronto)","|Nothing To Do|","","`#103733 <https://github.com/llvm/llvm-project/issues/103733>`__","Resolved by `P0674R1 <https://wg21.link/P0674R1>`__"
-"`LWG2444 <https://wg21.link/LWG2444>`__","Inconsistent complexity for ``std::sort_heap``\ ","2017-07 (Toronto)","|Nothing To Do|","","`#103734 <https://github.com/llvm/llvm-project/issues/103734>`__",""
-"`LWG2593 <https://wg21.link/LWG2593>`__","Moved-from state of Allocators","2017-07 (Toronto)","|Nothing To Do|","","`#100220 <https://github.com/llvm/llvm-project/issues/100220>`__",""
-"`LWG2597 <https://wg21.link/LWG2597>`__","``std::log``\ misspecified for complex numbers","2017-07 (Toronto)","","","`#100221 <https://github.com/llvm/llvm-project/issues/100221>`__",""
-"`LWG2783 <https://wg21.link/LWG2783>`__","``stack::emplace()``\ and ``queue::emplace()``\ should return ``decltype(auto)``\ ","2017-07 (Toronto)","|Complete|","","`#103735 <https://github.com/llvm/llvm-project/issues/103735>`__",""
-"`LWG2932 <https://wg21.link/LWG2932>`__","Constraints on parallel algorithm implementations are underspecified","2017-07 (Toronto)","","","`#100222 <https://github.com/llvm/llvm-project/issues/100222>`__",""
-"`LWG2937 <https://wg21.link/LWG2937>`__","Is ``equivalent(""existing_thing"", ""not_existing_thing"")``\ an error","2017-07 (Toronto)","|Complete|","","`#103736 <https://github.com/llvm/llvm-project/issues/103736>`__",""
-"`LWG2940 <https://wg21.link/LWG2940>`__","``result_of``\ specification also needs a little cleanup","2017-07 (Toronto)","|Nothing To Do|","","`#103737 <https://github.com/llvm/llvm-project/issues/103737>`__",""
-"`LWG2942 <https://wg21.link/LWG2942>`__","LWG 2873's resolution missed ``weak_ptr::owner_before``\ ","2017-07 (Toronto)","|Complete|","","`#103738 <https://github.com/llvm/llvm-project/issues/103738>`__",""
-"`LWG2954 <https://wg21.link/LWG2954>`__","Specialization of the convenience variable templates should be prohibited","2017-07 (Toronto)","|Complete|","","`#103739 <https://github.com/llvm/llvm-project/issues/103739>`__",""
-"`LWG2961 <https://wg21.link/LWG2961>`__","Bad postcondition for ``set_default_resource``\ ","2017-07 (Toronto)","|Complete|","16","`#103740 <https://github.com/llvm/llvm-project/issues/103740>`__",""
-"`LWG2966 <https://wg21.link/LWG2966>`__","Incomplete resolution of US 74","2017-07 (Toronto)","|Nothing To Do|","","`#103741 <https://github.com/llvm/llvm-project/issues/103741>`__",""
-"`LWG2974 <https://wg21.link/LWG2974>`__","Diagnose out of bounds ``tuple_element/variant_alternative``\ ","2017-07 (Toronto)","|Complete|","","`#103742 <https://github.com/llvm/llvm-project/issues/103742>`__",""
+"[LWG2070](https://wg21.link/LWG2070)","`allocate_shared` should use `allocator_traits<A>::construct` ","2017-07 (Toronto)","{{NothingToDo}}","","[#103733](https://github.com/llvm/llvm-project/issues/103733)","Resolved by [P0674R1](https://wg21.link/P0674R1)"
+"[LWG2444](https://wg21.link/LWG2444)","Inconsistent complexity for `std::sort_heap` ","2017-07 (Toronto)","{{NothingToDo}}","","[#103734](https://github.com/llvm/llvm-project/issues/103734)",""
+"[LWG2593](https://wg21.link/LWG2593)","Moved-from state of Allocators","2017-07 (Toronto)","{{NothingToDo}}","","[#100220](https://github.com/llvm/llvm-project/issues/100220)",""
+"[LWG2597](https://wg21.link/LWG2597)","`std::log` misspecified for complex numbers","2017-07 (Toronto)","","","[#100221](https://github.com/llvm/llvm-project/issues/100221)",""
+"[LWG2783](https://wg21.link/LWG2783)","`stack::emplace()` and `queue::emplace()` should return `decltype(auto)` ","2017-07 (Toronto)","{{Complete}}","","[#103735](https://github.com/llvm/llvm-project/issues/103735)",""
+"[LWG2932](https://wg21.link/LWG2932)","Constraints on parallel algorithm implementations are underspecified","2017-07 (Toronto)","","","[#100222](https://github.com/llvm/llvm-project/issues/100222)",""
+"[LWG2937](https://wg21.link/LWG2937)","Is `equivalent(""existing_thing"", ""not_existing_thing"")` an error","2017-07 (Toronto)","{{Complete}}","","[#103736](https://github.com/llvm/llvm-project/issues/103736)",""
+"[LWG2940](https://wg21.link/LWG2940)","`result_of` specification also needs a little cleanup","2017-07 (Toronto)","{{NothingToDo}}","","[#103737](https://github.com/llvm/llvm-project/issues/103737)",""
+"[LWG2942](https://wg21.link/LWG2942)","LWG 2873's resolution missed `weak_ptr::owner_before` ","2017-07 (Toronto)","{{Complete}}","","[#103738](https://github.com/llvm/llvm-project/issues/103738)",""
+"[LWG2954](https://wg21.link/LWG2954)","Specialization of the convenience variable templates should be prohibited","2017-07 (Toronto)","{{Complete}}","","[#103739](https://github.com/llvm/llvm-project/issues/103739)",""
+"[LWG2961](https://wg21.link/LWG2961)","Bad postcondition for `set_default_resource` ","2017-07 (Toronto)","{{Complete}}","16","[#103740](https://github.com/llvm/llvm-project/issues/103740)",""
+"[LWG2966](https://wg21.link/LWG2966)","Incomplete resolution of US 74","2017-07 (Toronto)","{{NothingToDo}}","","[#103741](https://github.com/llvm/llvm-project/issues/103741)",""
+"[LWG2974](https://wg21.link/LWG2974)","Diagnose out of bounds `tuple_element/variant_alternative` ","2017-07 (Toronto)","{{Complete}}","","[#103742](https://github.com/llvm/llvm-project/issues/103742)",""
"","","","","","",""
-"`LWG2779 <https://wg21.link/LWG2779>`__","[networking.ts] Relax requirements on buffer sequence iterators","2017-11 (Albuquerque)","|Nothing To Do|","","`#100223 <https://github.com/llvm/llvm-project/issues/100223>`__",""
-"`LWG2870 <https://wg21.link/LWG2870>`__","Default value of parameter theta of polar should be dependent","2017-11 (Albuquerque)","|Complete|","","`#103743 <https://github.com/llvm/llvm-project/issues/103743>`__",""
-"`LWG2935 <https://wg21.link/LWG2935>`__","What should create_directories do when p already exists but is not a directory?","2017-11 (Albuquerque)","|Nothing To Do|","","`#103744 <https://github.com/llvm/llvm-project/issues/103744>`__",""
-"`LWG2941 <https://wg21.link/LWG2941>`__","[thread.req.timing] wording should apply to both member and namespace-level functions","2017-11 (Albuquerque)","|Nothing To Do|","","`#103745 <https://github.com/llvm/llvm-project/issues/103745>`__",""
-"`LWG2944 <https://wg21.link/LWG2944>`__","LWG 2905 accidentally removed requirement that construction of the deleter doesn't throw an exception","2017-11 (Albuquerque)","|Nothing To Do|","","`#103746 <https://github.com/llvm/llvm-project/issues/103746>`__",""
-"`LWG2945 <https://wg21.link/LWG2945>`__","Order of template parameters in optional comparisons","2017-11 (Albuquerque)","|Complete|","","`#103747 <https://github.com/llvm/llvm-project/issues/103747>`__",""
-"`LWG2948 <https://wg21.link/LWG2948>`__","unique_ptr does not define operator<< for stream output","2017-11 (Albuquerque)","|Complete|","","`#103748 <https://github.com/llvm/llvm-project/issues/103748>`__",""
-"`LWG2950 <https://wg21.link/LWG2950>`__","std::byte operations are misspecified","2017-11 (Albuquerque)","|Complete|","","`#103749 <https://github.com/llvm/llvm-project/issues/103749>`__",""
-"`LWG2952 <https://wg21.link/LWG2952>`__","iterator_traits should work for pointers to cv T","2017-11 (Albuquerque)","|Complete|","","`#103750 <https://github.com/llvm/llvm-project/issues/103750>`__",""
-"`LWG2953 <https://wg21.link/LWG2953>`__","LWG 2853 should apply to deque::erase too","2017-11 (Albuquerque)","|Complete|","","`#103751 <https://github.com/llvm/llvm-project/issues/103751>`__",""
-"`LWG2958 <https://wg21.link/LWG2958>`__","Moves improperly defined as deleted","2017-11 (Albuquerque)","|Complete|","","`#103752 <https://github.com/llvm/llvm-project/issues/103752>`__",""
-"`LWG2964 <https://wg21.link/LWG2964>`__","Apparently redundant requirement for dynamic_pointer_cast","2017-11 (Albuquerque)","","","`#100224 <https://github.com/llvm/llvm-project/issues/100224>`__",""
-"`LWG2965 <https://wg21.link/LWG2965>`__","Non-existing path::native_string() in filesystem_error::what() specification","2017-11 (Albuquerque)","|Nothing To Do|","","`#103753 <https://github.com/llvm/llvm-project/issues/103753>`__",""
-"`LWG2972 <https://wg21.link/LWG2972>`__","What is ``is_trivially_destructible_v<int>``\ ?","2017-11 (Albuquerque)","|Complete|","","`#103754 <https://github.com/llvm/llvm-project/issues/103754>`__",""
-"`LWG2976 <https://wg21.link/LWG2976>`__","Dangling uses_allocator specialization for packaged_task","2017-11 (Albuquerque)","|Complete|","20","`#103755 <https://github.com/llvm/llvm-project/issues/103755>`__","Originally implemented in LLVM 6 but reverted later. Old documentation incorrectly said it was implemented."
-"`LWG2977 <https://wg21.link/LWG2977>`__","unordered_meow::merge() has incorrect Throws: clause","2017-11 (Albuquerque)","|Nothing To Do|","","`#103756 <https://github.com/llvm/llvm-project/issues/103756>`__",""
-"`LWG2978 <https://wg21.link/LWG2978>`__","Hash support for pmr::string and friends","2017-11 (Albuquerque)","|Complete|","16","`#103757 <https://github.com/llvm/llvm-project/issues/103757>`__",""
-"`LWG2979 <https://wg21.link/LWG2979>`__","aligned_union should require complete object types","2017-11 (Albuquerque)","|Complete|","","`#103758 <https://github.com/llvm/llvm-project/issues/103758>`__",""
-"`LWG2980 <https://wg21.link/LWG2980>`__","Cannot compare_exchange empty pointers","2017-11 (Albuquerque)","","","`#100225 <https://github.com/llvm/llvm-project/issues/100225>`__",""
-"`LWG2981 <https://wg21.link/LWG2981>`__","Remove redundant deduction guides from standard library","2017-11 (Albuquerque)","|Nothing To Do|","","`#103759 <https://github.com/llvm/llvm-project/issues/103759>`__",""
-"`LWG2982 <https://wg21.link/LWG2982>`__","Making size_type consistent in associative container deduction guides","2017-11 (Albuquerque)","","","`#100226 <https://github.com/llvm/llvm-project/issues/100226>`__",""
-"`LWG2988 <https://wg21.link/LWG2988>`__","Clause 32 cleanup missed one typename","2017-11 (Albuquerque)","|Complete|","13","`#103760 <https://github.com/llvm/llvm-project/issues/103760>`__",""
-"`LWG2993 <https://wg21.link/LWG2993>`__","reference_wrapper<T> conversion from T&&","2017-11 (Albuquerque)","|Complete|","13","`#103761 <https://github.com/llvm/llvm-project/issues/103761>`__",""
-"`LWG2998 <https://wg21.link/LWG2998>`__","Requirements on function objects passed to {``forward_``,}list-specific algorithms","2017-11 (Albuquerque)","|Nothing To Do|","","`#103762 <https://github.com/llvm/llvm-project/issues/103762>`__",""
-"`LWG3001 <https://wg21.link/LWG3001>`__","weak_ptr::element_type needs remove_extent_t","2017-11 (Albuquerque)","|Complete|","14","`#103763 <https://github.com/llvm/llvm-project/issues/103763>`__",""
-"`LWG3024 <https://wg21.link/LWG3024>`__","variant's copies must be deleted instead of disabled via SFINAE","2017-11 (Albuquerque)","|Complete|","","`#103764 <https://github.com/llvm/llvm-project/issues/103764>`__",""
+"[LWG2779](https://wg21.link/LWG2779)","[networking.ts] Relax requirements on buffer sequence iterators","2017-11 (Albuquerque)","{{NothingToDo}}","","[#100223](https://github.com/llvm/llvm-project/issues/100223)",""
+"[LWG2870](https://wg21.link/LWG2870)","Default value of parameter theta of polar should be dependent","2017-11 (Albuquerque)","{{Complete}}","","[#103743](https://github.com/llvm/llvm-project/issues/103743)",""
+"[LWG2935](https://wg21.link/LWG2935)","What should create_directories do when p already exists but is not a directory?","2017-11 (Albuquerque)","{{NothingToDo}}","","[#103744](https://github.com/llvm/llvm-project/issues/103744)",""
+"[LWG2941](https://wg21.link/LWG2941)","[thread.req.timing] wording should apply to both member and namespace-level functions","2017-11 (Albuquerque)","{{NothingToDo}}","","[#103745](https://github.com/llvm/llvm-project/issues/103745)",""
+"[LWG2944](https://wg21.link/LWG2944)","LWG 2905 accidentally removed requirement that construction of the deleter doesn't throw an exception","2017-11 (Albuquerque)","{{NothingToDo}}","","[#103746](https://github.com/llvm/llvm-project/issues/103746)",""
+"[LWG2945](https://wg21.link/LWG2945)","Order of template parameters in optional comparisons","2017-11 (Albuquerque)","{{Complete}}","","[#103747](https://github.com/llvm/llvm-project/issues/103747)",""
+"[LWG2948](https://wg21.link/LWG2948)","unique_ptr does not define operator\<\< for stream output","2017-11 (Albuquerque)","{{Complete}}","","[#103748](https://github.com/llvm/llvm-project/issues/103748)",""
+"[LWG2950](https://wg21.link/LWG2950)","std::byte operations are misspecified","2017-11 (Albuquerque)","{{Complete}}","","[#103749](https://github.com/llvm/llvm-project/issues/103749)",""
+"[LWG2952](https://wg21.link/LWG2952)","iterator_traits should work for pointers to cv T","2017-11 (Albuquerque)","{{Complete}}","","[#103750](https://github.com/llvm/llvm-project/issues/103750)",""
+"[LWG2953](https://wg21.link/LWG2953)","LWG 2853 should apply to deque::erase too","2017-11 (Albuquerque)","{{Complete}}","","[#103751](https://github.com/llvm/llvm-project/issues/103751)",""
+"[LWG2958](https://wg21.link/LWG2958)","Moves improperly defined as deleted","2017-11 (Albuquerque)","{{Complete}}","","[#103752](https://github.com/llvm/llvm-project/issues/103752)",""
+"[LWG2964](https://wg21.link/LWG2964)","Apparently redundant requirement for dynamic_pointer_cast","2017-11 (Albuquerque)","","","[#100224](https://github.com/llvm/llvm-project/issues/100224)",""
+"[LWG2965](https://wg21.link/LWG2965)","Non-existing path::native_string() in filesystem_error::what() specification","2017-11 (Albuquerque)","{{NothingToDo}}","","[#103753](https://github.com/llvm/llvm-project/issues/103753)",""
+"[LWG2972](https://wg21.link/LWG2972)","What is `is_trivially_destructible_v<int>` ?","2017-11 (Albuquerque)","{{Complete}}","","[#103754](https://github.com/llvm/llvm-project/issues/103754)",""
+"[LWG2976](https://wg21.link/LWG2976)","Dangling uses_allocator specialization for packaged_task","2017-11 (Albuquerque)","{{Complete}}","20","[#103755](https://github.com/llvm/llvm-project/issues/103755)","Originally implemented in LLVM 6 but reverted later. Old documentation incorrectly said it was implemented."
+"[LWG2977](https://wg21.link/LWG2977)","unordered_meow::merge() has incorrect Throws: clause","2017-11 (Albuquerque)","{{NothingToDo}}","","[#103756](https://github.com/llvm/llvm-project/issues/103756)",""
+"[LWG2978](https://wg21.link/LWG2978)","Hash support for pmr::string and friends","2017-11 (Albuquerque)","{{Complete}}","16","[#103757](https://github.com/llvm/llvm-project/issues/103757)",""
+"[LWG2979](https://wg21.link/LWG2979)","aligned_union should require complete object types","2017-11 (Albuquerque)","{{Complete}}","","[#103758](https://github.com/llvm/llvm-project/issues/103758)",""
+"[LWG2980](https://wg21.link/LWG2980)","Cannot compare_exchange empty pointers","2017-11 (Albuquerque)","","","[#100225](https://github.com/llvm/llvm-project/issues/100225)",""
+"[LWG2981](https://wg21.link/LWG2981)","Remove redundant deduction guides from standard library","2017-11 (Albuquerque)","{{NothingToDo}}","","[#103759](https://github.com/llvm/llvm-project/issues/103759)",""
+"[LWG2982](https://wg21.link/LWG2982)","Making size_type consistent in associative container deduction guides","2017-11 (Albuquerque)","","","[#100226](https://github.com/llvm/llvm-project/issues/100226)",""
+"[LWG2988](https://wg21.link/LWG2988)","Clause 32 cleanup missed one typename","2017-11 (Albuquerque)","{{Complete}}","13","[#103760](https://github.com/llvm/llvm-project/issues/103760)",""
+"[LWG2993](https://wg21.link/LWG2993)","reference_wrapper\<T\> conversion from T&&","2017-11 (Albuquerque)","{{Complete}}","13","[#103761](https://github.com/llvm/llvm-project/issues/103761)",""
+"[LWG2998](https://wg21.link/LWG2998)","Requirements on function objects passed to {`forward_`,}list-specific algorithms","2017-11 (Albuquerque)","{{NothingToDo}}","","[#103762](https://github.com/llvm/llvm-project/issues/103762)",""
+"[LWG3001](https://wg21.link/LWG3001)","weak_ptr::element_type needs remove_extent_t","2017-11 (Albuquerque)","{{Complete}}","14","[#103763](https://github.com/llvm/llvm-project/issues/103763)",""
+"[LWG3024](https://wg21.link/LWG3024)","variant's copies must be deleted instead of disabled via SFINAE","2017-11 (Albuquerque)","{{Complete}}","","[#103764](https://github.com/llvm/llvm-project/issues/103764)",""
"","","","","","",""
-"`LWG2164 <https://wg21.link/LWG2164>`__","What are the semantics of ``vector.emplace(vector.begin(), vector.back())``\ ?","2018-03 (Jacksonville)","|Complete|","","`#103765 <https://github.com/llvm/llvm-project/issues/103765>`__",""
-"`LWG2243 <https://wg21.link/LWG2243>`__","``istream::putback``\ problem","2018-03 (Jacksonville)","|Complete|","","`#103766 <https://github.com/llvm/llvm-project/issues/103766>`__",""
-"`LWG2816 <https://wg21.link/LWG2816>`__","``resize_file``\ has impossible postcondition","2018-03 (Jacksonville)","|Nothing To Do|","","`#103770 <https://github.com/llvm/llvm-project/issues/103770>`__",""
-"`LWG2843 <https://wg21.link/LWG2843>`__","Unclear behavior of ``std::pmr::memory_resource::do_allocate()``\ ","2018-03 (Jacksonville)","|Complete|","","`#103771 <https://github.com/llvm/llvm-project/issues/103771>`__",""
-"`LWG2849 <https://wg21.link/LWG2849>`__","Why does ``!is_regular_file(from)``\ cause ``copy_file``\ to report a ""file already exists"" error?","2018-03 (Jacksonville)","|Nothing To Do|","","`#103772 <https://github.com/llvm/llvm-project/issues/103772>`__",""
-"`LWG2851 <https://wg21.link/LWG2851>`__","``std::filesystem``\ enum classes are now underspecified","2018-03 (Jacksonville)","|Nothing To Do|","","`#103774 <https://github.com/llvm/llvm-project/issues/103774>`__",""
-"`LWG2946 <https://wg21.link/LWG2946>`__","LWG 2758's resolution missed further corrections","2018-03 (Jacksonville)","|Complete|","","`#103775 <https://github.com/llvm/llvm-project/issues/103775>`__",""
-"`LWG2969 <https://wg21.link/LWG2969>`__","``polymorphic_allocator::construct()``\ shouldn't pass ``resource()``\ ","2018-03 (Jacksonville)","|Complete|","","`#103776 <https://github.com/llvm/llvm-project/issues/103776>`__",""
-"`LWG2975 <https://wg21.link/LWG2975>`__","Missing case for ``pair``\ construction in scoped and polymorphic allocators","2018-03 (Jacksonville)","","","`#100227 <https://github.com/llvm/llvm-project/issues/100227>`__",""
-"`LWG2989 <https://wg21.link/LWG2989>`__","``path``\ 's stream insertion operator lets you insert everything under the sun","2018-03 (Jacksonville)","|Complete|","","`#103777 <https://github.com/llvm/llvm-project/issues/103777>`__",""
-"`LWG3000 <https://wg21.link/LWG3000>`__","``monotonic_memory_resource::do_is_equal``\ uses ``dynamic_cast``\ unnecessarily","2018-03 (Jacksonville)","|Complete|","16","`#103778 <https://github.com/llvm/llvm-project/issues/103778>`__",""
-"`LWG3002 <https://wg21.link/LWG3002>`__","[networking.ts] ``basic_socket_acceptor::is_open()``\ isn't ``noexcept``\ ","2018-03 (Jacksonville)","|Nothing To Do|","","`#100228 <https://github.com/llvm/llvm-project/issues/100228>`__",""
-"`LWG3004 <https://wg21.link/LWG3004>`__","|sect|\ [string.capacity] and |sect|\ [vector.capacity] should specify time complexity for ``capacity()``\ ","2018-03 (Jacksonville)","|Nothing To Do|","","`#103779 <https://github.com/llvm/llvm-project/issues/103779>`__",""
-"`LWG3005 <https://wg21.link/LWG3005>`__","Destruction order of arrays by ``make_shared/allocate_shared``\ only recommended?","2018-03 (Jacksonville)","","","`#100229 <https://github.com/llvm/llvm-project/issues/100229>`__",""
-"`LWG3007 <https://wg21.link/LWG3007>`__","``allocate_shared``\ should rebind allocator to *cv*-unqualified ``value_type``\ for construction","2018-03 (Jacksonville)","","","`#100230 <https://github.com/llvm/llvm-project/issues/100230>`__",""
-"`LWG3009 <https://wg21.link/LWG3009>`__","Including ``<string_view>``\ doesn't provide ``std::size/empty/data``\ ","2018-03 (Jacksonville)","|Complete|","","`#103780 <https://github.com/llvm/llvm-project/issues/103780>`__",""
-"`LWG3010 <https://wg21.link/LWG3010>`__","[networking.ts] ``uses_executor``\ says ""if a type ``T::executor_type``\ exists""","2018-03 (Jacksonville)","|Nothing To Do|","","`#100231 <https://github.com/llvm/llvm-project/issues/100231>`__",""
-"`LWG3013 <https://wg21.link/LWG3013>`__","``(recursive_)directory_iterator``\ construction and traversal should not be ``noexcept``\ ","2018-03 (Jacksonville)","|Complete|","","`#103781 <https://github.com/llvm/llvm-project/issues/103781>`__",""
-"`LWG3014 <https://wg21.link/LWG3014>`__","More ``noexcept``\ issues with filesystem operations","2018-03 (Jacksonville)","|Complete|","","`#103782 <https://github.com/llvm/llvm-project/issues/103782>`__",""
-"`LWG3015 <https://wg21.link/LWG3015>`__","``copy_options::*unspecified*``\ underspecified","2018-03 (Jacksonville)","|Nothing To Do|","","`#103783 <https://github.com/llvm/llvm-project/issues/103783>`__",""
-"`LWG3017 <https://wg21.link/LWG3017>`__","``list splice``\ functions should use ``addressof``\ ","2018-03 (Jacksonville)","|Complete|","","`#103784 <https://github.com/llvm/llvm-project/issues/103784>`__",""
-"`LWG3020 <https://wg21.link/LWG3020>`__","[networking.ts] Remove spurious nested ``value_type``\ buffer sequence requirement","2018-03 (Jacksonville)","|Nothing To Do|","","`#100232 <https://github.com/llvm/llvm-project/issues/100232>`__",""
-"`LWG3026 <https://wg21.link/LWG3026>`__","``filesystem::weakly_canonical``\ still defined in terms of ``canonical(p, base)``\ ","2018-03 (Jacksonville)","|Complete|","","`#103785 <https://github.com/llvm/llvm-project/issues/103785>`__",""
-"`LWG3030 <https://wg21.link/LWG3030>`__","Who shall meet the requirements of ``try_lock``\ ?","2018-03 (Jacksonville)","|Nothing To Do|","","`#103786 <https://github.com/llvm/llvm-project/issues/103786>`__",""
-"`LWG3034 <https://wg21.link/LWG3034>`__","P0767R1 breaks previously-standard-layout types","2018-03 (Jacksonville)","|Complete|","","`#103787 <https://github.com/llvm/llvm-project/issues/103787>`__",""
-"`LWG3035 <https://wg21.link/LWG3035>`__","``std::allocator``\ 's constructors should be ``constexpr``\ ","2018-03 (Jacksonville)","|Complete|","","`#103788 <https://github.com/llvm/llvm-project/issues/103788>`__",""
-"`LWG3039 <https://wg21.link/LWG3039>`__","Unnecessary ``decay``\ in ``thread``\ and ``packaged_task``\ ","2018-03 (Jacksonville)","|Complete|","","`#103789 <https://github.com/llvm/llvm-project/issues/103789>`__",""
-"`LWG3041 <https://wg21.link/LWG3041>`__","Unnecessary ``decay``\ in ``reference_wrapper``\ ","2018-03 (Jacksonville)","|Complete|","","`#103790 <https://github.com/llvm/llvm-project/issues/103790>`__",""
-"`LWG3042 <https://wg21.link/LWG3042>`__","``is_literal_type_v``\ should be inline","2018-03 (Jacksonville)","|Complete|","","`#103791 <https://github.com/llvm/llvm-project/issues/103791>`__",""
-"`LWG3043 <https://wg21.link/LWG3043>`__","Bogus postcondition for ``filesystem_error``\ constructor","2018-03 (Jacksonville)","|Complete|","","`#103792 <https://github.com/llvm/llvm-project/issues/103792>`__",""
-"`LWG3045 <https://wg21.link/LWG3045>`__","``atomic<floating-point>``\ doesn't have ``value_type``\ or ``difference_type``\ ","2018-03 (Jacksonville)","|Complete|","18","`#103793 <https://github.com/llvm/llvm-project/issues/103793>`__",""
-"`LWG3048 <https://wg21.link/LWG3048>`__","``transform_reduce(exec, first1, last1, first2, init)``\ discards execution policy","2018-03 (Jacksonville)","|Complete|","17","`#103794 <https://github.com/llvm/llvm-project/issues/103794>`__",""
-"`LWG3051 <https://wg21.link/LWG3051>`__","Floating point classifications were inadvertently changed in P0175","2018-03 (Jacksonville)","|Nothing To Do|","","`#103795 <https://github.com/llvm/llvm-project/issues/103795>`__",""
-"`LWG3075 <https://wg21.link/LWG3075>`__","``basic_string``\ needs deduction guides from ``basic_string_view``\ ","2018-03 (Jacksonville)","|Complete|","","`#103796 <https://github.com/llvm/llvm-project/issues/103796>`__",""
+"[LWG2164](https://wg21.link/LWG2164)","What are the semantics of `vector.emplace(vector.begin(), vector.back())` ?","2018-03 (Jacksonville)","{{Complete}}","","[#103765](https://github.com/llvm/llvm-project/issues/103765)",""
+"[LWG2243](https://wg21.link/LWG2243)","`istream::putback` problem","2018-03 (Jacksonville)","{{Complete}}","","[#103766](https://github.com/llvm/llvm-project/issues/103766)",""
+"[LWG2816](https://wg21.link/LWG2816)","`resize_file` has impossible postcondition","2018-03 (Jacksonville)","{{NothingToDo}}","","[#103770](https://github.com/llvm/llvm-project/issues/103770)",""
+"[LWG2843](https://wg21.link/LWG2843)","Unclear behavior of `std::pmr::memory_resource::do_allocate()` ","2018-03 (Jacksonville)","{{Complete}}","","[#103771](https://github.com/llvm/llvm-project/issues/103771)",""
+"[LWG2849](https://wg21.link/LWG2849)","Why does `!is_regular_file(from)` cause `copy_file` to report a ""file already exists"" error?","2018-03 (Jacksonville)","{{NothingToDo}}","","[#103772](https://github.com/llvm/llvm-project/issues/103772)",""
+"[LWG2851](https://wg21.link/LWG2851)","`std::filesystem` enum classes are now underspecified","2018-03 (Jacksonville)","{{NothingToDo}}","","[#103774](https://github.com/llvm/llvm-project/issues/103774)",""
+"[LWG2946](https://wg21.link/LWG2946)","LWG 2758's resolution missed further corrections","2018-03 (Jacksonville)","{{Complete}}","","[#103775](https://github.com/llvm/llvm-project/issues/103775)",""
+"[LWG2969](https://wg21.link/LWG2969)","`polymorphic_allocator::construct()` shouldn't pass `resource()` ","2018-03 (Jacksonville)","{{Complete}}","","[#103776](https://github.com/llvm/llvm-project/issues/103776)",""
+"[LWG2975](https://wg21.link/LWG2975)","Missing case for `pair` construction in scoped and polymorphic allocators","2018-03 (Jacksonville)","","","[#100227](https://github.com/llvm/llvm-project/issues/100227)",""
+"[LWG2989](https://wg21.link/LWG2989)","`path` 's stream insertion operator lets you insert everything under the sun","2018-03 (Jacksonville)","{{Complete}}","","[#103777](https://github.com/llvm/llvm-project/issues/103777)",""
+"[LWG3000](https://wg21.link/LWG3000)","`monotonic_memory_resource::do_is_equal` uses `dynamic_cast` unnecessarily","2018-03 (Jacksonville)","{{Complete}}","16","[#103778](https://github.com/llvm/llvm-project/issues/103778)",""
+"[LWG3002](https://wg21.link/LWG3002)","[networking.ts] `basic_socket_acceptor::is_open()` isn't `noexcept` ","2018-03 (Jacksonville)","{{NothingToDo}}","","[#100228](https://github.com/llvm/llvm-project/issues/100228)",""
+"[LWG3004](https://wg21.link/LWG3004)","§[string.capacity] and §[vector.capacity] should specify time complexity for `capacity()` ","2018-03 (Jacksonville)","{{NothingToDo}}","","[#103779](https://github.com/llvm/llvm-project/issues/103779)",""
+"[LWG3005](https://wg21.link/LWG3005)","Destruction order of arrays by `make_shared/allocate_shared` only recommended?","2018-03 (Jacksonville)","","","[#100229](https://github.com/llvm/llvm-project/issues/100229)",""
+"[LWG3007](https://wg21.link/LWG3007)","`allocate_shared` should rebind allocator to *cv*-unqualified `value_type` for construction","2018-03 (Jacksonville)","","","[#100230](https://github.com/llvm/llvm-project/issues/100230)",""
+"[LWG3009](https://wg21.link/LWG3009)","Including `<string_view>` doesn't provide `std::size/empty/data` ","2018-03 (Jacksonville)","{{Complete}}","","[#103780](https://github.com/llvm/llvm-project/issues/103780)",""
+"[LWG3010](https://wg21.link/LWG3010)","[networking.ts] `uses_executor` says ""if a type `T::executor_type` exists""","2018-03 (Jacksonville)","{{NothingToDo}}","","[#100231](https://github.com/llvm/llvm-project/issues/100231)",""
+"[LWG3013](https://wg21.link/LWG3013)","`(recursive_)directory_iterator` construction and traversal should not be `noexcept` ","2018-03 (Jacksonville)","{{Complete}}","","[#103781](https://github.com/llvm/llvm-project/issues/103781)",""
+"[LWG3014](https://wg21.link/LWG3014)","More `noexcept` issues with filesystem operations","2018-03 (Jacksonville)","{{Complete}}","","[#103782](https://github.com/llvm/llvm-project/issues/103782)",""
+"[LWG3015](https://wg21.link/LWG3015)","`copy_options::*unspecified*` underspecified","2018-03 (Jacksonville)","{{NothingToDo}}","","[#103783](https://github.com/llvm/llvm-project/issues/103783)",""
+"[LWG3017](https://wg21.link/LWG3017)","`list splice` functions should use `addressof` ","2018-03 (Jacksonville)","{{Complete}}","","[#103784](https://github.com/llvm/llvm-project/issues/103784)",""
+"[LWG3020](https://wg21.link/LWG3020)","[networking.ts] Remove spurious nested `value_type` buffer sequence requirement","2018-03 (Jacksonville)","{{NothingToDo}}","","[#100232](https://github.com/llvm/llvm-project/issues/100232)",""
+"[LWG3026](https://wg21.link/LWG3026)","`filesystem::weakly_canonical` still defined in terms of `canonical(p, base)` ","2018-03 (Jacksonville)","{{Complete}}","","[#103785](https://github.com/llvm/llvm-project/issues/103785)",""
+"[LWG3030](https://wg21.link/LWG3030)","Who shall meet the requirements of `try_lock` ?","2018-03 (Jacksonville)","{{NothingToDo}}","","[#103786](https://github.com/llvm/llvm-project/issues/103786)",""
+"[LWG3034](https://wg21.link/LWG3034)","P0767R1 breaks previously-standard-layout types","2018-03 (Jacksonville)","{{Complete}}","","[#103787](https://github.com/llvm/llvm-project/issues/103787)",""
+"[LWG3035](https://wg21.link/LWG3035)","`std::allocator` 's constructors should be `constexpr` ","2018-03 (Jacksonville)","{{Complete}}","","[#103788](https://github.com/llvm/llvm-project/issues/103788)",""
+"[LWG3039](https://wg21.link/LWG3039)","Unnecessary `decay` in `thread` and `packaged_task` ","2018-03 (Jacksonville)","{{Complete}}","","[#103789](https://github.com/llvm/llvm-project/issues/103789)",""
+"[LWG3041](https://wg21.link/LWG3041)","Unnecessary `decay` in `reference_wrapper` ","2018-03 (Jacksonville)","{{Complete}}","","[#103790](https://github.com/llvm/llvm-project/issues/103790)",""
+"[LWG3042](https://wg21.link/LWG3042)","`is_literal_type_v` should be inline","2018-03 (Jacksonville)","{{Complete}}","","[#103791](https://github.com/llvm/llvm-project/issues/103791)",""
+"[LWG3043](https://wg21.link/LWG3043)","Bogus postcondition for `filesystem_error` constructor","2018-03 (Jacksonville)","{{Complete}}","","[#103792](https://github.com/llvm/llvm-project/issues/103792)",""
+"[LWG3045](https://wg21.link/LWG3045)","`atomic<floating-point>` doesn't have `value_type` or `difference_type` ","2018-03 (Jacksonville)","{{Complete}}","18","[#103793](https://github.com/llvm/llvm-project/issues/103793)",""
+"[LWG3048](https://wg21.link/LWG3048)","`transform_reduce(exec, first1, last1, first2, init)` discards execution policy","2018-03 (Jacksonville)","{{Complete}}","17","[#103794](https://github.com/llvm/llvm-project/issues/103794)",""
+"[LWG3051](https://wg21.link/LWG3051)","Floating point classifications were inadvertently changed in P0175","2018-03 (Jacksonville)","{{NothingToDo}}","","[#103795](https://github.com/llvm/llvm-project/issues/103795)",""
+"[LWG3075](https://wg21.link/LWG3075)","`basic_string` needs deduction guides from `basic_string_view` ","2018-03 (Jacksonville)","{{Complete}}","","[#103796](https://github.com/llvm/llvm-project/issues/103796)",""
"","","","","","",""
-"`LWG2139 <https://wg21.link/LWG2139>`__","What is a user-defined type?","2018-06 (Rapperswil)","","","`#100233 <https://github.com/llvm/llvm-project/issues/100233>`__",""
-"`LWG2970 <https://wg21.link/LWG2970>`__","Return type of std::visit misspecified","2018-06 (Rapperswil)","|Complete|","11","`#103797 <https://github.com/llvm/llvm-project/issues/103797>`__",""
-"`LWG3058 <https://wg21.link/LWG3058>`__","Parallel adjacent_difference shouldn't require creating temporaries","2018-06 (Rapperswil)","","","`#100234 <https://github.com/llvm/llvm-project/issues/100234>`__",""
-"`LWG3062 <https://wg21.link/LWG3062>`__","Unnecessary decay_t in is_execution_policy_v should be remove_cvref_t","2018-06 (Rapperswil)","|Complete|","17","`#100235 <https://github.com/llvm/llvm-project/issues/100235>`__",""
-"`LWG3067 <https://wg21.link/LWG3067>`__","recursive_directory_iterator::pop must invalidate","2018-06 (Rapperswil)","|Nothing To Do|","","`#103798 <https://github.com/llvm/llvm-project/issues/103798>`__",""
-"`LWG3071 <https://wg21.link/LWG3071>`__","[networking.ts] read_until still refers to ""input sequence""","2018-06 (Rapperswil)","|Nothing To Do|","","`#103799 <https://github.com/llvm/llvm-project/issues/103799>`__",""
-"`LWG3074 <https://wg21.link/LWG3074>`__","Non-member functions for valarray should only deduce from the valarray","2018-06 (Rapperswil)","","","`#100236 <https://github.com/llvm/llvm-project/issues/100236>`__",""
-"`LWG3076 <https://wg21.link/LWG3076>`__","basic_string CTAD ambiguity","2018-06 (Rapperswil)","|Complete|","","`#103800 <https://github.com/llvm/llvm-project/issues/103800>`__",""
-"`LWG3079 <https://wg21.link/LWG3079>`__","LWG 2935 forgot to fix the existing_p overloads of create_directory","2018-06 (Rapperswil)","|Nothing To Do|","","`#103801 <https://github.com/llvm/llvm-project/issues/103801>`__",""
-"`LWG3080 <https://wg21.link/LWG3080>`__","Floating point from_chars pattern specification breaks round-tripping","2018-06 (Rapperswil)","","","`#100237 <https://github.com/llvm/llvm-project/issues/100237>`__",""
-"`LWG3083 <https://wg21.link/LWG3083>`__","What should ios::iword(-1) do?","2018-06 (Rapperswil)","|Nothing To Do|","","`#103802 <https://github.com/llvm/llvm-project/issues/103802>`__",""
-"`LWG3094 <https://wg21.link/LWG3094>`__","[time.duration.io]p4 makes surprising claims about encoding","2018-06 (Rapperswil)","","","`#100238 <https://github.com/llvm/llvm-project/issues/100238>`__",""
-"`LWG3100 <https://wg21.link/LWG3100>`__","Unnecessary and confusing ""empty span"" wording","2018-06 (Rapperswil)","|Nothing To Do|","","`#103803 <https://github.com/llvm/llvm-project/issues/103803>`__",""
-"`LWG3102 <https://wg21.link/LWG3102>`__","Clarify span iterator and ``const_iterator`` behavior","2018-06 (Rapperswil)","|Complete|","","`#103804 <https://github.com/llvm/llvm-project/issues/103804>`__",""
-"`LWG3104 <https://wg21.link/LWG3104>`__","Fixing duration division","2018-06 (Rapperswil)","|Complete|","","`#103805 <https://github.com/llvm/llvm-project/issues/103805>`__",""
+"[LWG2139](https://wg21.link/LWG2139)","What is a user-defined type?","2018-06 (Rapperswil)","","","[#100233](https://github.com/llvm/llvm-project/issues/100233)",""
+"[LWG2970](https://wg21.link/LWG2970)","Return type of std::visit misspecified","2018-06 (Rapperswil)","{{Complete}}","11","[#103797](https://github.com/llvm/llvm-project/issues/103797)",""
+"[LWG3058](https://wg21.link/LWG3058)","Parallel adjacent_difference shouldn't require creating temporaries","2018-06 (Rapperswil)","","","[#100234](https://github.com/llvm/llvm-project/issues/100234)",""
+"[LWG3062](https://wg21.link/LWG3062)","Unnecessary decay_t in is_execution_policy_v should be remove_cvref_t","2018-06 (Rapperswil)","{{Complete}}","17","[#100235](https://github.com/llvm/llvm-project/issues/100235)",""
+"[LWG3067](https://wg21.link/LWG3067)","recursive_directory_iterator::pop must invalidate","2018-06 (Rapperswil)","{{NothingToDo}}","","[#103798](https://github.com/llvm/llvm-project/issues/103798)",""
+"[LWG3071](https://wg21.link/LWG3071)","[networking.ts] read_until still refers to ""input sequence""","2018-06 (Rapperswil)","{{NothingToDo}}","","[#103799](https://github.com/llvm/llvm-project/issues/103799)",""
+"[LWG3074](https://wg21.link/LWG3074)","Non-member functions for valarray should only deduce from the valarray","2018-06 (Rapperswil)","","","[#100236](https://github.com/llvm/llvm-project/issues/100236)",""
+"[LWG3076](https://wg21.link/LWG3076)","basic_string CTAD ambiguity","2018-06 (Rapperswil)","{{Complete}}","","[#103800](https://github.com/llvm/llvm-project/issues/103800)",""
+"[LWG3079](https://wg21.link/LWG3079)","LWG 2935 forgot to fix the existing_p overloads of create_directory","2018-06 (Rapperswil)","{{NothingToDo}}","","[#103801](https://github.com/llvm/llvm-project/issues/103801)",""
+"[LWG3080](https://wg21.link/LWG3080)","Floating point from_chars pattern specification breaks round-tripping","2018-06 (Rapperswil)","","","[#100237](https://github.com/llvm/llvm-project/issues/100237)",""
+"[LWG3083](https://wg21.link/LWG3083)","What should ios::iword(-1) do?","2018-06 (Rapperswil)","{{NothingToDo}}","","[#103802](https://github.com/llvm/llvm-project/issues/103802)",""
+"[LWG3094](https://wg21.link/LWG3094)","[time.duration.io]p4 makes surprising claims about encoding","2018-06 (Rapperswil)","","","[#100238](https://github.com/llvm/llvm-project/issues/100238)",""
+"[LWG3100](https://wg21.link/LWG3100)","Unnecessary and confusing ""empty span"" wording","2018-06 (Rapperswil)","{{NothingToDo}}","","[#103803](https://github.com/llvm/llvm-project/issues/103803)",""
+"[LWG3102](https://wg21.link/LWG3102)","Clarify span iterator and `const_iterator` behavior","2018-06 (Rapperswil)","{{Complete}}","","[#103804](https://github.com/llvm/llvm-project/issues/103804)",""
+"[LWG3104](https://wg21.link/LWG3104)","Fixing duration division","2018-06 (Rapperswil)","{{Complete}}","","[#103805](https://github.com/llvm/llvm-project/issues/103805)",""
"","","","","","",""
-"`LWG2183 <https://wg21.link/LWG2183>`__","Muddled allocator requirements for ``match_results``\ constructors","2018-11 (San Diego)","|Complete|","","`#103806 <https://github.com/llvm/llvm-project/issues/103806>`__",""
-"`LWG2184 <https://wg21.link/LWG2184>`__","Muddled allocator requirements for ``match_results``\ assignments","2018-11 (San Diego)","|Complete|","","`#103807 <https://github.com/llvm/llvm-project/issues/103807>`__",""
-"`LWG2412 <https://wg21.link/LWG2412>`__","``promise::set_value()``\ and ``promise::get_future()``\ should not race","2018-11 (San Diego)","","","`#100239 <https://github.com/llvm/llvm-project/issues/100239>`__",""
-"`LWG2499 <https://wg21.link/LWG2499>`__","``operator>>(basic_istream&, CharT*)``\ makes it hard to avoid buffer overflows","2018-11 (San Diego)","|Nothing To Do|","","`#103808 <https://github.com/llvm/llvm-project/issues/103808>`__","Resolved by `P0487R1 <https://wg21.link/P0487R1>`__"
-"`LWG2682 <https://wg21.link/LWG2682>`__","``filesystem::copy()``\ won't create a symlink to a directory","2018-11 (San Diego)","|Nothing To Do|","","`#103504 <https://github.com/llvm/llvm-project/issues/103504>`__",""
-"`LWG2697 <https://wg21.link/LWG2697>`__","[concurr.ts] Behavior of ``future/shared_future``\ unwrapping constructor when given an invalid ``future``\ ","2018-11 (San Diego)","","","`#100240 <https://github.com/llvm/llvm-project/issues/100240>`__",""
-"`LWG2797 <https://wg21.link/LWG2797>`__","Trait precondition violations","2018-11 (San Diego)","|Nothing To Do|","","`#103809 <https://github.com/llvm/llvm-project/issues/103809>`__","Resolved by `P1285R0 <https://wg21.link/P1285R0>`__"
-"`LWG2936 <https://wg21.link/LWG2936>`__","Path comparison is defined in terms of the generic format","2018-11 (San Diego)","|Complete|","","`#103810 <https://github.com/llvm/llvm-project/issues/103810>`__",""
-"`LWG2943 <https://wg21.link/LWG2943>`__","Problematic specification of the wide version of ``basic_filebuf::open``\ ","2018-11 (San Diego)","|Nothing To Do|","","`#103811 <https://github.com/llvm/llvm-project/issues/103811>`__",""
-"`LWG2960 <https://wg21.link/LWG2960>`__","[fund.ts.v3] ``nonesuch``\ is insufficiently useless","2018-11 (San Diego)","|Complete|","","`#103812 <https://github.com/llvm/llvm-project/issues/103812>`__",""
-"`LWG2995 <https://wg21.link/LWG2995>`__","``basic_stringbuf``\ default constructor forbids it from using SSO capacity","2018-11 (San Diego)","|Complete|","20","`#100242 <https://github.com/llvm/llvm-project/issues/100242>`__",""
-"`LWG2996 <https://wg21.link/LWG2996>`__","Missing rvalue overloads for ``shared_ptr``\ operations","2018-11 (San Diego)","|Complete|","17","`#103813 <https://github.com/llvm/llvm-project/issues/103813>`__",""
-"`LWG3008 <https://wg21.link/LWG3008>`__","``make_shared``\ (sub)object destruction semantics are not specified","2018-11 (San Diego)","|Complete|","16","`#103814 <https://github.com/llvm/llvm-project/issues/103814>`__",""
-"`LWG3022 <https://wg21.link/LWG3022>`__","``is_convertible<derived*, base*>``\ may lead to ODR","2018-11 (San Diego)","|Nothing To Do|","","`#103815 <https://github.com/llvm/llvm-project/issues/103815>`__","Resolved by `P1285R0 <https://wg21.link/P1285R0>`__"
-"`LWG3025 <https://wg21.link/LWG3025>`__","Map-like container deduction guides should use ``pair<Key, T>``\ , not ``pair<const Key, T>``\ ","2018-11 (San Diego)","|Complete|","","`#103817 <https://github.com/llvm/llvm-project/issues/103817>`__",""
-"`LWG3031 <https://wg21.link/LWG3031>`__","Algorithms and predicates with non-const reference arguments","2018-11 (San Diego)","","","`#100243 <https://github.com/llvm/llvm-project/issues/100243>`__",""
-"`LWG3037 <https://wg21.link/LWG3037>`__","``polymorphic_allocator``\ and incomplete types","2018-11 (San Diego)","|Complete|","16","`#103818 <https://github.com/llvm/llvm-project/issues/103818>`__",""
-"`LWG3038 <https://wg21.link/LWG3038>`__","``polymorphic_allocator::allocate``\ should not allow integer overflow to create vulnerabilities","2018-11 (San Diego)","|Complete|","14","`#103819 <https://github.com/llvm/llvm-project/issues/103819>`__",""
-"`LWG3054 <https://wg21.link/LWG3054>`__","``uninitialized_copy``\ appears to not be able to meet its exception-safety guarantee","2018-11 (San Diego)","|Nothing To Do|","","`#103820 <https://github.com/llvm/llvm-project/issues/103820>`__",""
-"`LWG3065 <https://wg21.link/LWG3065>`__","LWG 2989 missed that all ``path``\ 's other operators should be hidden friends as well","2018-11 (San Diego)","|Complete|","","`#103821 <https://github.com/llvm/llvm-project/issues/103821>`__",""
-"`LWG3096 <https://wg21.link/LWG3096>`__","``path::lexically_relative``\ is confused by trailing slashes","2018-11 (San Diego)","|Complete|","","`#103822 <https://github.com/llvm/llvm-project/issues/103822>`__",""
-"`LWG3116 <https://wg21.link/LWG3116>`__","``OUTERMOST_ALLOC_TRAITS``\ needs ``remove_reference_t``\ ","2018-11 (San Diego)","|Complete|","","`#100244 <https://github.com/llvm/llvm-project/issues/100244>`__",""
-"`LWG3122 <https://wg21.link/LWG3122>`__","``__cpp_lib_chrono_udls``\ was accidentally dropped","2018-11 (San Diego)","|Complete|","","`#103823 <https://github.com/llvm/llvm-project/issues/103823>`__",""
-"`LWG3127 <https://wg21.link/LWG3127>`__","``basic_osyncstream::rdbuf``\ needs a ``const_cast``\ ","2018-11 (San Diego)","|Complete|","18","`#103824 <https://github.com/llvm/llvm-project/issues/103824>`__",""
-"`LWG3128 <https://wg21.link/LWG3128>`__","``strstream::rdbuf``\ needs a ``const_cast``\ ","2018-11 (San Diego)","|Nothing To Do|","","`#103825 <https://github.com/llvm/llvm-project/issues/103825>`__",""
-"`LWG3129 <https://wg21.link/LWG3129>`__","``regex_token_iterator``\ constructor uses wrong pointer arithmetic","2018-11 (San Diego)","","","`#100245 <https://github.com/llvm/llvm-project/issues/100245>`__",""
-"`LWG3130 <https://wg21.link/LWG3130>`__","|sect|\ [input.output] needs many ``addressof``\ ","2018-11 (San Diego)","|Complete|","20","`#100246 <https://github.com/llvm/llvm-project/issues/100246>`__",""
-"`LWG3131 <https://wg21.link/LWG3131>`__","``addressof``\ all the things","2018-11 (San Diego)","","","`#100248 <https://github.com/llvm/llvm-project/issues/100248>`__",""
-"`LWG3132 <https://wg21.link/LWG3132>`__","Library needs to ban macros named ``expects``\ or ``ensures``\ ","2018-11 (San Diego)","|Nothing To Do|","","`#103826 <https://github.com/llvm/llvm-project/issues/103826>`__",""
-"`LWG3134 <https://wg21.link/LWG3134>`__","[fund.ts.v3] LFTSv3 contains extraneous [meta] variable templates that should have been deleted by P09961","2018-11 (San Diego)","|Nothing To Do|","","`#103827 <https://github.com/llvm/llvm-project/issues/103827>`__","Resolved by `P1210R0 <https://wg21.link/P1210R0>`__"
-"`LWG3137 <https://wg21.link/LWG3137>`__","Header for ``__cpp_lib_to_chars``\ ","2018-11 (San Diego)","|Complete|","","`#103828 <https://github.com/llvm/llvm-project/issues/103828>`__",""
-"`LWG3140 <https://wg21.link/LWG3140>`__","``COMMON_REF``\ is unimplementable as specified","2018-11 (San Diego)","|Nothing To Do|","","`#103829 <https://github.com/llvm/llvm-project/issues/103829>`__",""
-"`LWG3145 <https://wg21.link/LWG3145>`__","``file_clock``\ breaks ABI for C++17 implementations","2018-11 (San Diego)","|Complete|","","`#103830 <https://github.com/llvm/llvm-project/issues/103830>`__",""
-"`LWG3147 <https://wg21.link/LWG3147>`__","Definitions of ""likely"" and ""unlikely"" are likely to cause problems","2018-11 (San Diego)","|Nothing To Do|","","`#100249 <https://github.com/llvm/llvm-project/issues/100249>`__",""
-"`LWG3148 <https://wg21.link/LWG3148>`__","``<concepts>``\ should be freestanding","2018-11 (San Diego)","","","`#100250 <https://github.com/llvm/llvm-project/issues/100250>`__",""
-"`LWG3153 <https://wg21.link/LWG3153>`__","``Common``\ and ``common_type``\ have too little in common","2018-11 (San Diego)","|Complete|","13","`#103831 <https://github.com/llvm/llvm-project/issues/103831>`__",""
-"`LWG3154 <https://wg21.link/LWG3154>`__","``Common``\ and ``CommonReference``\ have a common defect","2018-11 (San Diego)","|Nothing To Do|","","`#103832 <https://github.com/llvm/llvm-project/issues/103832>`__",""
+"[LWG2183](https://wg21.link/LWG2183)","Muddled allocator requirements for `match_results` constructors","2018-11 (San Diego)","{{Complete}}","","[#103806](https://github.com/llvm/llvm-project/issues/103806)",""
+"[LWG2184](https://wg21.link/LWG2184)","Muddled allocator requirements for `match_results` assignments","2018-11 (San Diego)","{{Complete}}","","[#103807](https://github.com/llvm/llvm-project/issues/103807)",""
+"[LWG2412](https://wg21.link/LWG2412)","`promise::set_value()` and `promise::get_future()` should not race","2018-11 (San Diego)","","","[#100239](https://github.com/llvm/llvm-project/issues/100239)",""
+"[LWG2499](https://wg21.link/LWG2499)","`operator>>(basic_istream&, CharT*)` makes it hard to avoid buffer overflows","2018-11 (San Diego)","{{NothingToDo}}","","[#103808](https://github.com/llvm/llvm-project/issues/103808)","Resolved by [P0487R1](https://wg21.link/P0487R1)"
+"[LWG2682](https://wg21.link/LWG2682)","`filesystem::copy()` won't create a symlink to a directory","2018-11 (San Diego)","{{NothingToDo}}","","[#103504](https://github.com/llvm/llvm-project/issues/103504)",""
+"[LWG2697](https://wg21.link/LWG2697)","[concurr.ts] Behavior of `future/shared_future` unwrapping constructor when given an invalid `future` ","2018-11 (San Diego)","","","[#100240](https://github.com/llvm/llvm-project/issues/100240)",""
+"[LWG2797](https://wg21.link/LWG2797)","Trait precondition violations","2018-11 (San Diego)","{{NothingToDo}}","","[#103809](https://github.com/llvm/llvm-project/issues/103809)","Resolved by [P1285R0](https://wg21.link/P1285R0)"
+"[LWG2936](https://wg21.link/LWG2936)","Path comparison is defined in terms of the generic format","2018-11 (San Diego)","{{Complete}}","","[#103810](https://github.com/llvm/llvm-project/issues/103810)",""
+"[LWG2943](https://wg21.link/LWG2943)","Problematic specification of the wide version of `basic_filebuf::open` ","2018-11 (San Diego)","{{NothingToDo}}","","[#103811](https://github.com/llvm/llvm-project/issues/103811)",""
+"[LWG2960](https://wg21.link/LWG2960)","[fund.ts.v3] `nonesuch` is insufficiently useless","2018-11 (San Diego)","{{Complete}}","","[#103812](https://github.com/llvm/llvm-project/issues/103812)",""
+"[LWG2995](https://wg21.link/LWG2995)","`basic_stringbuf` default constructor forbids it from using SSO capacity","2018-11 (San Diego)","{{Complete}}","20","[#100242](https://github.com/llvm/llvm-project/issues/100242)",""
+"[LWG2996](https://wg21.link/LWG2996)","Missing rvalue overloads for `shared_ptr` operations","2018-11 (San Diego)","{{Complete}}","17","[#103813](https://github.com/llvm/llvm-project/issues/103813)",""
+"[LWG3008](https://wg21.link/LWG3008)","`make_shared` (sub)object destruction semantics are not specified","2018-11 (San Diego)","{{Complete}}","16","[#103814](https://github.com/llvm/llvm-project/issues/103814)",""
+"[LWG3022](https://wg21.link/LWG3022)","`is_convertible<derived*, base*>` may lead to ODR","2018-11 (San Diego)","{{NothingToDo}}","","[#103815](https://github.com/llvm/llvm-project/issues/103815)","Resolved by [P1285R0](https://wg21.link/P1285R0)"
+"[LWG3025](https://wg21.link/LWG3025)","Map-like container deduction guides should use `pair<Key, T>` , not `pair<const Key, T>` ","2018-11 (San Diego)","{{Complete}}","","[#103817](https://github.com/llvm/llvm-project/issues/103817)",""
+"[LWG3031](https://wg21.link/LWG3031)","Algorithms and predicates with non-const reference arguments","2018-11 (San Diego)","","","[#100243](https://github.com/llvm/llvm-project/issues/100243)",""
+"[LWG3037](https://wg21.link/LWG3037)","`polymorphic_allocator` and incomplete types","2018-11 (San Diego)","{{Complete}}","16","[#103818](https://github.com/llvm/llvm-project/issues/103818)",""
+"[LWG3038](https://wg21.link/LWG3038)","`polymorphic_allocator::allocate` should not allow integer overflow to create vulnerabilities","2018-11 (San Diego)","{{Complete}}","14","[#103819](https://github.com/llvm/llvm-project/issues/103819)",""
+"[LWG3054](https://wg21.link/LWG3054)","`uninitialized_copy` appears to not be able to meet its exception-safety guarantee","2018-11 (San Diego)","{{NothingToDo}}","","[#103820](https://github.com/llvm/llvm-project/issues/103820)",""
+"[LWG3065](https://wg21.link/LWG3065)","LWG 2989 missed that all `path` 's other operators should be hidden friends as well","2018-11 (San Diego)","{{Complete}}","","[#103821](https://github.com/llvm/llvm-project/issues/103821)",""
+"[LWG3096](https://wg21.link/LWG3096)","`path::lexically_relative` is confused by trailing slashes","2018-11 (San Diego)","{{Complete}}","","[#103822](https://github.com/llvm/llvm-project/issues/103822)",""
+"[LWG3116](https://wg21.link/LWG3116)","`OUTERMOST_ALLOC_TRAITS` needs `remove_reference_t` ","2018-11 (San Diego)","{{Complete}}","","[#100244](https://github.com/llvm/llvm-project/issues/100244)",""
+"[LWG3122](https://wg21.link/LWG3122)","`__cpp_lib_chrono_udls` was accidentally dropped","2018-11 (San Diego)","{{Complete}}","","[#103823](https://github.com/llvm/llvm-project/issues/103823)",""
+"[LWG3127](https://wg21.link/LWG3127)","`basic_osyncstream::rdbuf` needs a `const_cast` ","2018-11 (San Diego)","{{Complete}}","18","[#103824](https://github.com/llvm/llvm-project/issues/103824)",""
+"[LWG3128](https://wg21.link/LWG3128)","`strstream::rdbuf` needs a `const_cast` ","2018-11 (San Diego)","{{NothingToDo}}","","[#103825](https://github.com/llvm/llvm-project/issues/103825)",""
+"[LWG3129](https://wg21.link/LWG3129)","`regex_token_iterator` constructor uses wrong pointer arithmetic","2018-11 (San Diego)","","","[#100245](https://github.com/llvm/llvm-project/issues/100245)",""
+"[LWG3130](https://wg21.link/LWG3130)","§[input.output] needs many `addressof` ","2018-11 (San Diego)","{{Complete}}","20","[#100246](https://github.com/llvm/llvm-project/issues/100246)",""
+"[LWG3131](https://wg21.link/LWG3131)","`addressof` all the things","2018-11 (San Diego)","","","[#100248](https://github.com/llvm/llvm-project/issues/100248)",""
+"[LWG3132](https://wg21.link/LWG3132)","Library needs to ban macros named `expects` or `ensures` ","2018-11 (San Diego)","{{NothingToDo}}","","[#103826](https://github.com/llvm/llvm-project/issues/103826)",""
+"[LWG3134](https://wg21.link/LWG3134)","[fund.ts.v3] LFTSv3 contains extraneous [meta] variable templates that should have been deleted by P09961","2018-11 (San Diego)","{{NothingToDo}}","","[#103827](https://github.com/llvm/llvm-project/issues/103827)","Resolved by [P1210R0](https://wg21.link/P1210R0)"
+"[LWG3137](https://wg21.link/LWG3137)","Header for `__cpp_lib_to_chars` ","2018-11 (San Diego)","{{Complete}}","","[#103828](https://github.com/llvm/llvm-project/issues/103828)",""
+"[LWG3140](https://wg21.link/LWG3140)","`COMMON_REF` is unimplementable as specified","2018-11 (San Diego)","{{NothingToDo}}","","[#103829](https://github.com/llvm/llvm-project/issues/103829)",""
+"[LWG3145](https://wg21.link/LWG3145)","`file_clock` breaks ABI for C++17 implementations","2018-11 (San Diego)","{{Complete}}","","[#103830](https://github.com/llvm/llvm-project/issues/103830)",""
+"[LWG3147](https://wg21.link/LWG3147)","Definitions of ""likely"" and ""unlikely"" are likely to cause problems","2018-11 (San Diego)","{{NothingToDo}}","","[#100249](https://github.com/llvm/llvm-project/issues/100249)",""
+"[LWG3148](https://wg21.link/LWG3148)","`<concepts>` should be freestanding","2018-11 (San Diego)","","","[#100250](https://github.com/llvm/llvm-project/issues/100250)",""
+"[LWG3153](https://wg21.link/LWG3153)","`Common` and `common_type` have too little in common","2018-11 (San Diego)","{{Complete}}","13","[#103831](https://github.com/llvm/llvm-project/issues/103831)",""
+"[LWG3154](https://wg21.link/LWG3154)","`Common` and `CommonReference` have a common defect","2018-11 (San Diego)","{{NothingToDo}}","","[#103832](https://github.com/llvm/llvm-project/issues/103832)",""
"","","","","","",""
-"`LWG3012 <https://wg21.link/LWG3012>`__","``atomic<T>``\ is unimplementable for non-``is_trivially_copy_constructible T``\ ","2019-02 (Kona)","","","`#100252 <https://github.com/llvm/llvm-project/issues/100252>`__",""
-"`LWG3040 <https://wg21.link/LWG3040>`__","``basic_string_view::starts_with``\ *Effects* are incorrect","2019-02 (Kona)","|Complete|","","`#103834 <https://github.com/llvm/llvm-project/issues/103834>`__",""
-"`LWG3077 <https://wg21.link/LWG3077>`__","``(push|emplace)_back``\ should invalidate the ``end``\ iterator","2019-02 (Kona)","|Nothing To Do|","","`#103835 <https://github.com/llvm/llvm-project/issues/103835>`__",""
-"`LWG3087 <https://wg21.link/LWG3087>`__","One final ``&x``\ in |sect|\ [list.ops]","2019-02 (Kona)","|Nothing To Do|","","`#103836 <https://github.com/llvm/llvm-project/issues/103836>`__",""
-"`LWG3101 <https://wg21.link/LWG3101>`__","``span``\ 's ``Container``\ constructors need another constraint","2019-02 (Kona)","|Complete|","","`#103837 <https://github.com/llvm/llvm-project/issues/103837>`__",""
-"`LWG3112 <https://wg21.link/LWG3112>`__","``system_error``\ and ``filesystem_error``\ constructors taking a ``string``\ may not be able to meet their postconditions","2019-02 (Kona)","|Nothing To Do|","","`#100253 <https://github.com/llvm/llvm-project/issues/100253>`__",""
-"`LWG3119 <https://wg21.link/LWG3119>`__","Program-definedness of closure types","2019-02 (Kona)","|Nothing To Do|","","`#103838 <https://github.com/llvm/llvm-project/issues/103838>`__",""
-"`LWG3133 <https://wg21.link/LWG3133>`__","Modernizing numeric type requirements","2019-02 (Kona)","|Complete|","","`#100254 <https://github.com/llvm/llvm-project/issues/100254>`__",""
-"`LWG3144 <https://wg21.link/LWG3144>`__","``span``\ does not have a ``const_pointer``\ typedef","2019-02 (Kona)","|Complete|","","`#103839 <https://github.com/llvm/llvm-project/issues/103839>`__",""
-"`LWG3173 <https://wg21.link/LWG3173>`__","Enable CTAD for ``ref-view``\ ","2019-02 (Kona)","|Complete|","15","`#103840 <https://github.com/llvm/llvm-project/issues/103840>`__",""
-"`LWG3179 <https://wg21.link/LWG3179>`__","``subrange``\ should always model ``Range``\ ","2019-02 (Kona)","|Nothing To Do|","","`#103842 <https://github.com/llvm/llvm-project/issues/103842>`__",""
-"`LWG3180 <https://wg21.link/LWG3180>`__","Inconsistently named return type for ``ranges::minmax_element``\ ","2019-02 (Kona)","|Complete|","15","`#103844 <https://github.com/llvm/llvm-project/issues/103844>`__",""
-"`LWG3182 <https://wg21.link/LWG3182>`__","Specification of ``Same``\ could be clearer","2019-02 (Kona)","|Complete|","15","`#103845 <https://github.com/llvm/llvm-project/issues/103845>`__",""
+"[LWG3012](https://wg21.link/LWG3012)","`atomic<T>` is unimplementable for non-`is_trivially_copy_constructible T` ","2019-02 (Kona)","","","[#100252](https://github.com/llvm/llvm-project/issues/100252)",""
+"[LWG3040](https://wg21.link/LWG3040)","`basic_string_view::starts_with` *Effects* are incorrect","2019-02 (Kona)","{{Complete}}","","[#103834](https://github.com/llvm/llvm-project/issues/103834)",""
+"[LWG3077](https://wg21.link/LWG3077)","`(push|emplace)_back` should invalidate the `end` iterator","2019-02 (Kona)","{{NothingToDo}}","","[#103835](https://github.com/llvm/llvm-project/issues/103835)",""
+"[LWG3087](https://wg21.link/LWG3087)","One final `&x` in §[list.ops]","2019-02 (Kona)","{{NothingToDo}}","","[#103836](https://github.com/llvm/llvm-project/issues/103836)",""
+"[LWG3101](https://wg21.link/LWG3101)","`span` 's `Container` constructors need another constraint","2019-02 (Kona)","{{Complete}}","","[#103837](https://github.com/llvm/llvm-project/issues/103837)",""
+"[LWG3112](https://wg21.link/LWG3112)","`system_error` and `filesystem_error` constructors taking a `string` may not be able to meet their postconditions","2019-02 (Kona)","{{NothingToDo}}","","[#100253](https://github.com/llvm/llvm-project/issues/100253)",""
+"[LWG3119](https://wg21.link/LWG3119)","Program-definedness of closure types","2019-02 (Kona)","{{NothingToDo}}","","[#103838](https://github.com/llvm/llvm-project/issues/103838)",""
+"[LWG3133](https://wg21.link/LWG3133)","Modernizing numeric type requirements","2019-02 (Kona)","{{Complete}}","","[#100254](https://github.com/llvm/llvm-project/issues/100254)",""
+"[LWG3144](https://wg21.link/LWG3144)","`span` does not have a `const_pointer` typedef","2019-02 (Kona)","{{Complete}}","","[#103839](https://github.com/llvm/llvm-project/issues/103839)",""
+"[LWG3173](https://wg21.link/LWG3173)","Enable CTAD for `ref-view` ","2019-02 (Kona)","{{Complete}}","15","[#103840](https://github.com/llvm/llvm-project/issues/103840)",""
+"[LWG3179](https://wg21.link/LWG3179)","`subrange` should always model `Range` ","2019-02 (Kona)","{{NothingToDo}}","","[#103842](https://github.com/llvm/llvm-project/issues/103842)",""
+"[LWG3180](https://wg21.link/LWG3180)","Inconsistently named return type for `ranges::minmax_element` ","2019-02 (Kona)","{{Complete}}","15","[#103844](https://github.com/llvm/llvm-project/issues/103844)",""
+"[LWG3182](https://wg21.link/LWG3182)","Specification of `Same` could be clearer","2019-02 (Kona)","{{Complete}}","15","[#103845](https://github.com/llvm/llvm-project/issues/103845)",""
"","","","","","",""
-"`LWG2899 <https://wg21.link/LWG2899>`__","``is_(nothrow_)move_constructible``\ and ``tuple``\ , ``optional``\ and ``unique_ptr``\ ","2019-07 (Cologne)","|Complete|","24","`#100255 <https://github.com/llvm/llvm-project/issues/100255>`__",""
-"`LWG3055 <https://wg21.link/LWG3055>`__","``path::operator+=(*single-character*)``\ misspecified","2019-07 (Cologne)","|Complete|","7","`#103846 <https://github.com/llvm/llvm-project/issues/103846>`__",""
-"`LWG3158 <https://wg21.link/LWG3158>`__","``tuple(allocator_arg_t, const Alloc&)``\ should be conditionally explicit","2019-07 (Cologne)","|Complete|","10","`#103847 <https://github.com/llvm/llvm-project/issues/103847>`__",""
-"`LWG3169 <https://wg21.link/LWG3169>`__","``ranges``\ permutation generators discard useful information","2019-07 (Cologne)","|Complete|","15","`#103848 <https://github.com/llvm/llvm-project/issues/103848>`__",""
-"`LWG3183 <https://wg21.link/LWG3183>`__","Normative permission to specialize Ranges variable templates","2019-07 (Cologne)","|Nothing To Do|","","`#103849 <https://github.com/llvm/llvm-project/issues/103849>`__",""
-"`LWG3184 <https://wg21.link/LWG3184>`__","Inconsistencies in ``bind_front``\ wording","2019-07 (Cologne)","|Complete|","13","`#103850 <https://github.com/llvm/llvm-project/issues/103850>`__",""
-"`LWG3185 <https://wg21.link/LWG3185>`__","Uses-allocator construction functions missing ``constexpr``\ and ``noexcept``\ ","2019-07 (Cologne)","|Complete|","16","`#103851 <https://github.com/llvm/llvm-project/issues/103851>`__",""
-"`LWG3186 <https://wg21.link/LWG3186>`__","``ranges``\ removal, partition, and ``partial_sort_copy``\ algorithms discard useful information","2019-07 (Cologne)","|Complete|","15","`#103852 <https://github.com/llvm/llvm-project/issues/103852>`__",""
-"`LWG3187 <https://wg21.link/LWG3187>`__","`P0591R4 <https://wg21.link/p0591r4>`__ reverted DR 2586 fixes to ``scoped_allocator_adaptor::construct()``\ ","2019-07 (Cologne)","","","`#100256 <https://github.com/llvm/llvm-project/issues/100256>`__",""
-"`LWG3191 <https://wg21.link/LWG3191>`__","``std::ranges::shuffle``\ synopsis does not match algorithm definition","2019-07 (Cologne)","|Complete|","15","`#103853 <https://github.com/llvm/llvm-project/issues/103853>`__",""
-"`LWG3196 <https://wg21.link/LWG3196>`__","``std::optional<T>``\ is ill-formed is ``T``\ is an array","2019-07 (Cologne)","|Complete|","","`#103854 <https://github.com/llvm/llvm-project/issues/103854>`__",""
-"`LWG3198 <https://wg21.link/LWG3198>`__","Bad constraint on ``std::span::span()``\ ","2019-07 (Cologne)","|Complete|","","`#103856 <https://github.com/llvm/llvm-project/issues/103856>`__",""
-"`LWG3199 <https://wg21.link/LWG3199>`__","``istream >> bitset<0>``\ fails","2019-07 (Cologne)","|Complete|","10","`#100257 <https://github.com/llvm/llvm-project/issues/100257>`__",""
-"`LWG3202 <https://wg21.link/LWG3202>`__","P0318R1 was supposed to be revised","2019-07 (Cologne)","|Complete|","","`#103857 <https://github.com/llvm/llvm-project/issues/103857>`__",""
-"`LWG3206 <https://wg21.link/LWG3206>`__","``year_month_day``\ conversion to ``sys_days``\ uses not-existing member function","2019-07 (Cologne)","|Complete|","","`#103858 <https://github.com/llvm/llvm-project/issues/103858>`__",""
-"`LWG3208 <https://wg21.link/LWG3208>`__","``Boolean``\ 's expression requirements are ordered inconsistently","2019-07 (Cologne)","|Nothing To Do|","","`#103860 <https://github.com/llvm/llvm-project/issues/103860>`__",""
-"`LWG3209 <https://wg21.link/LWG3209>`__","Expression in ``year::ok()``\ returns clause is ill-formed","2019-07 (Cologne)","|Complete|","","`#103861 <https://github.com/llvm/llvm-project/issues/103861>`__",""
+"[LWG2899](https://wg21.link/LWG2899)","`is_(nothrow_)move_constructible` and `tuple` , `optional` and `unique_ptr` ","2019-07 (Cologne)","{{Complete}}","24","[#100255](https://github.com/llvm/llvm-project/issues/100255)",""
+"[LWG3055](https://wg21.link/LWG3055)","`path::operator+=(*single-character*)` misspecified","2019-07 (Cologne)","{{Complete}}","7","[#103846](https://github.com/llvm/llvm-project/issues/103846)",""
+"[LWG3158](https://wg21.link/LWG3158)","`tuple(allocator_arg_t, const Alloc&)` should be conditionally explicit","2019-07 (Cologne)","{{Complete}}","10","[#103847](https://github.com/llvm/llvm-project/issues/103847)",""
+"[LWG3169](https://wg21.link/LWG3169)","`ranges` permutation generators discard useful information","2019-07 (Cologne)","{{Complete}}","15","[#103848](https://github.com/llvm/llvm-project/issues/103848)",""
+"[LWG3183](https://wg21.link/LWG3183)","Normative permission to specialize Ranges variable templates","2019-07 (Cologne)","{{NothingToDo}}","","[#103849](https://github.com/llvm/llvm-project/issues/103849)",""
+"[LWG3184](https://wg21.link/LWG3184)","Inconsistencies in `bind_front` wording","2019-07 (Cologne)","{{Complete}}","13","[#103850](https://github.com/llvm/llvm-project/issues/103850)",""
+"[LWG3185](https://wg21.link/LWG3185)","Uses-allocator construction functions missing `constexpr` and `noexcept` ","2019-07 (Cologne)","{{Complete}}","16","[#103851](https://github.com/llvm/llvm-project/issues/103851)",""
+"[LWG3186](https://wg21.link/LWG3186)","`ranges` removal, partition, and `partial_sort_copy` algorithms discard useful information","2019-07 (Cologne)","{{Complete}}","15","[#103852](https://github.com/llvm/llvm-project/issues/103852)",""
+"[LWG3187](https://wg21.link/LWG3187)","[P0591R4](https://wg21.link/p0591r4) reverted DR 2586 fixes to `scoped_allocator_adaptor::construct()` ","2019-07 (Cologne)","","","[#100256](https://github.com/llvm/llvm-project/issues/100256)",""
+"[LWG3191](https://wg21.link/LWG3191)","`std::ranges::shuffle` synopsis does not match algorithm definition","2019-07 (Cologne)","{{Complete}}","15","[#103853](https://github.com/llvm/llvm-project/issues/103853)",""
+"[LWG3196](https://wg21.link/LWG3196)","`std::optional<T>` is ill-formed is `T` is an array","2019-07 (Cologne)","{{Complete}}","","[#103854](https://github.com/llvm/llvm-project/issues/103854)",""
+"[LWG3198](https://wg21.link/LWG3198)","Bad constraint on `std::span::span()` ","2019-07 (Cologne)","{{Complete}}","","[#103856](https://github.com/llvm/llvm-project/issues/103856)",""
+"[LWG3199](https://wg21.link/LWG3199)","`istream >> bitset<0>` fails","2019-07 (Cologne)","{{Complete}}","10","[#100257](https://github.com/llvm/llvm-project/issues/100257)",""
+"[LWG3202](https://wg21.link/LWG3202)","P0318R1 was supposed to be revised","2019-07 (Cologne)","{{Complete}}","","[#103857](https://github.com/llvm/llvm-project/issues/103857)",""
+"[LWG3206](https://wg21.link/LWG3206)","`year_month_day` conversion to `sys_days` uses not-existing member function","2019-07 (Cologne)","{{Complete}}","","[#103858](https://github.com/llvm/llvm-project/issues/103858)",""
+"[LWG3208](https://wg21.link/LWG3208)","`Boolean` 's expression requirements are ordered inconsistently","2019-07 (Cologne)","{{NothingToDo}}","","[#103860](https://github.com/llvm/llvm-project/issues/103860)",""
+"[LWG3209](https://wg21.link/LWG3209)","Expression in `year::ok()` returns clause is ill-formed","2019-07 (Cologne)","{{Complete}}","","[#103861](https://github.com/llvm/llvm-project/issues/103861)",""
"","","","","","",""
-"`LWG3231 <https://wg21.link/LWG3231>`__","``year_month_day_last::day``\ specification does not cover ``!ok()``\ values","2019-11 (Belfast)","|Nothing To Do|","","`#103862 <https://github.com/llvm/llvm-project/issues/103862>`__",""
-"`LWG3225 <https://wg21.link/LWG3225>`__","``zoned_time``\ converting constructor shall not be ``noexcept``\ ","2019-11 (Belfast)","|Complete|","19","`#103863 <https://github.com/llvm/llvm-project/issues/103863>`__",""
-"`LWG3190 <https://wg21.link/LWG3190>`__","``std::allocator::allocate``\ sometimes returns too little storage","2019-11 (Belfast)","|Complete|","14","`#103864 <https://github.com/llvm/llvm-project/issues/103864>`__",""
-"`LWG3218 <https://wg21.link/LWG3218>`__","Modifier for ``%d``\ parse flag does not match POSIX and ``format``\ specification","2019-11 (Belfast)","","","`#100258 <https://github.com/llvm/llvm-project/issues/100258>`__",""
-"`LWG3224 <https://wg21.link/LWG3224>`__","``zoned_time``\ constructor from ``TimeZonePtr``\ does not specify initialization of ``tp_``\ ","2019-11 (Belfast)","|Complete|","19","`#103865 <https://github.com/llvm/llvm-project/issues/103865>`__",""
-"`LWG3230 <https://wg21.link/LWG3230>`__","Format specifier ``%y/%Y``\ is missing locale alternative versions","2019-11 (Belfast)","|Complete|","16","`#103868 <https://github.com/llvm/llvm-project/issues/103868>`__",""
-"`LWG3232 <https://wg21.link/LWG3232>`__","Inconsistency in ``zoned_time``\ deduction guides","2019-11 (Belfast)","|Complete|","19","`#103869 <https://github.com/llvm/llvm-project/issues/103869>`__",""
-"`LWG3222 <https://wg21.link/LWG3222>`__","P0574R1 introduced preconditions on non-existent parameters","2019-11 (Belfast)","","","`#100259 <https://github.com/llvm/llvm-project/issues/100259>`__",""
-"`LWG3221 <https://wg21.link/LWG3221>`__","Result of ``year_month``\ arithmetic with ``months``\ is ambiguous","2019-11 (Belfast)","|Complete|","8","`#103870 <https://github.com/llvm/llvm-project/issues/103870>`__",""
-"`LWG3235 <https://wg21.link/LWG3235>`__","``parse``\ manipulator without abbreviation is not callable","2019-11 (Belfast)","","","`#100262 <https://github.com/llvm/llvm-project/issues/100262>`__",""
-"`LWG3246 <https://wg21.link/LWG3246>`__","LWG3246: What are the constraints on the template parameter of ``basic_format_arg``?","2019-11 (Belfast)","|Nothing To Do|","","`#100263 <https://github.com/llvm/llvm-project/issues/100263>`__",""
-"`LWG3253 <https://wg21.link/LWG3253>`__","``basic_syncbuf::basic_syncbuf()``\ should not be explicit","2019-11 (Belfast)","|Complete|","20","`#100264 <https://github.com/llvm/llvm-project/issues/100264>`__",""
-"`LWG3245 <https://wg21.link/LWG3245>`__","Unnecessary restriction on ``'%p'``\ parse specifier","2019-11 (Belfast)","","","`#100265 <https://github.com/llvm/llvm-project/issues/100265>`__",""
-"`LWG3244 <https://wg21.link/LWG3244>`__","Constraints for ``Source``\ in |sect|\ [fs.path.req] insufficiently constrainty","2019-11 (Belfast)","","","`#100266 <https://github.com/llvm/llvm-project/issues/100266>`__",""
-"`LWG3241 <https://wg21.link/LWG3241>`__","``chrono-spec``\ grammar ambiguity in |sect|\ [time.format]","2019-11 (Belfast)","|Complete|","16","`#103871 <https://github.com/llvm/llvm-project/issues/103871>`__",""
-"`LWG3257 <https://wg21.link/LWG3257>`__","Missing feature testing macro update from P0858","2019-11 (Belfast)","|Complete|","12","`#103873 <https://github.com/llvm/llvm-project/issues/103873>`__",""
-"`LWG3256 <https://wg21.link/LWG3256>`__","Feature testing macro for ``constexpr``\ algorithms","2019-11 (Belfast)","|Complete|","13","`#103874 <https://github.com/llvm/llvm-project/issues/103874>`__",""
-"`LWG3273 <https://wg21.link/LWG3273>`__","Specify ``weekday_indexed``\ to range of ``[0, 7]``\ ","2019-11 (Belfast)","|Complete|","16","`#103875 <https://github.com/llvm/llvm-project/issues/103875>`__",""
-"`LWG3070 <https://wg21.link/LWG3070>`__","``path::lexically_relative``\ causes surprising results if a filename can also be a *root-name*","2019-11 (Belfast)","","","`#100267 <https://github.com/llvm/llvm-project/issues/100267>`__",""
-"`LWG3266 <https://wg21.link/LWG3266>`__","``to_chars(bool)``\ should be deleted","2019-11 (Belfast)","|Complete|","14","`#103876 <https://github.com/llvm/llvm-project/issues/103876>`__",""
-"`LWG3272 <https://wg21.link/LWG3272>`__","``%I%p``\ should parse/format ``duration``\ since midnight","2019-11 (Belfast)","","","`#100268 <https://github.com/llvm/llvm-project/issues/100268>`__",""
-"`LWG3259 <https://wg21.link/LWG3259>`__","The definition of *constexpr iterators* should be adjusted","2019-11 (Belfast)","|Nothing To Do|","","`#103877 <https://github.com/llvm/llvm-project/issues/103877>`__",""
-"`LWG3103 <https://wg21.link/LWG3103>`__","Errors in taking subview of ``span``\ should be ill-formed where possible","2019-11 (Belfast)","|Complete|","11","`#103878 <https://github.com/llvm/llvm-project/issues/103878>`__",""
-"`LWG3274 <https://wg21.link/LWG3274>`__","Missing feature test macro for ``<span>``\ ","2019-11 (Belfast)","|Complete|","11","`#103880 <https://github.com/llvm/llvm-project/issues/103880>`__",""
-"`LWG3276 <https://wg21.link/LWG3276>`__","Class ``split_view::outer_iterator::value_type``\ should inherit from ``view_interface``\ ","2019-11 (Belfast)","|Complete|","15","`#103881 <https://github.com/llvm/llvm-project/issues/103881>`__",""
-"`LWG3277 <https://wg21.link/LWG3277>`__","Pre-increment on prvalues is not a requirement of ``weakly_incrementable``\ ","2019-11 (Belfast)","|Nothing To Do|","","`#103882 <https://github.com/llvm/llvm-project/issues/103882>`__",""
-"`LWG3149 <https://wg21.link/LWG3149>`__","``DefaultConstructible``\ should require default initialization","2019-11 (Belfast)","|Complete|","13","`#103883 <https://github.com/llvm/llvm-project/issues/103883>`__",""
+"[LWG3231](https://wg21.link/LWG3231)","`year_month_day_last::day` specification does not cover `!ok()` values","2019-11 (Belfast)","{{NothingToDo}}","","[#103862](https://github.com/llvm/llvm-project/issues/103862)",""
+"[LWG3225](https://wg21.link/LWG3225)","`zoned_time` converting constructor shall not be `noexcept` ","2019-11 (Belfast)","{{Complete}}","19","[#103863](https://github.com/llvm/llvm-project/issues/103863)",""
+"[LWG3190](https://wg21.link/LWG3190)","`std::allocator::allocate` sometimes returns too little storage","2019-11 (Belfast)","{{Complete}}","14","[#103864](https://github.com/llvm/llvm-project/issues/103864)",""
+"[LWG3218](https://wg21.link/LWG3218)","Modifier for `%d` parse flag does not match POSIX and `format` specification","2019-11 (Belfast)","","","[#100258](https://github.com/llvm/llvm-project/issues/100258)",""
+"[LWG3224](https://wg21.link/LWG3224)","`zoned_time` constructor from `TimeZonePtr` does not specify initialization of `tp_` ","2019-11 (Belfast)","{{Complete}}","19","[#103865](https://github.com/llvm/llvm-project/issues/103865)",""
+"[LWG3230](https://wg21.link/LWG3230)","Format specifier `%y/%Y` is missing locale alternative versions","2019-11 (Belfast)","{{Complete}}","16","[#103868](https://github.com/llvm/llvm-project/issues/103868)",""
+"[LWG3232](https://wg21.link/LWG3232)","Inconsistency in `zoned_time` deduction guides","2019-11 (Belfast)","{{Complete}}","19","[#103869](https://github.com/llvm/llvm-project/issues/103869)",""
+"[LWG3222](https://wg21.link/LWG3222)","P0574R1 introduced preconditions on non-existent parameters","2019-11 (Belfast)","","","[#100259](https://github.com/llvm/llvm-project/issues/100259)",""
+"[LWG3221](https://wg21.link/LWG3221)","Result of `year_month` arithmetic with `months` is ambiguous","2019-11 (Belfast)","{{Complete}}","8","[#103870](https://github.com/llvm/llvm-project/issues/103870)",""
+"[LWG3235](https://wg21.link/LWG3235)","`parse` manipulator without abbreviation is not callable","2019-11 (Belfast)","","","[#100262](https://github.com/llvm/llvm-project/issues/100262)",""
+"[LWG3246](https://wg21.link/LWG3246)","LWG3246: What are the constraints on the template parameter of `basic_format_arg`?","2019-11 (Belfast)","{{NothingToDo}}","","[#100263](https://github.com/llvm/llvm-project/issues/100263)",""
+"[LWG3253](https://wg21.link/LWG3253)","`basic_syncbuf::basic_syncbuf()` should not be explicit","2019-11 (Belfast)","{{Complete}}","20","[#100264](https://github.com/llvm/llvm-project/issues/100264)",""
+"[LWG3245](https://wg21.link/LWG3245)","Unnecessary restriction on `'%p'` parse specifier","2019-11 (Belfast)","","","[#100265](https://github.com/llvm/llvm-project/issues/100265)",""
+"[LWG3244](https://wg21.link/LWG3244)","Constraints for `Source` in §[fs.path.req] insufficiently constrainty","2019-11 (Belfast)","","","[#100266](https://github.com/llvm/llvm-project/issues/100266)",""
+"[LWG3241](https://wg21.link/LWG3241)","`chrono-spec` grammar ambiguity in §[time.format]","2019-11 (Belfast)","{{Complete}}","16","[#103871](https://github.com/llvm/llvm-project/issues/103871)",""
+"[LWG3257](https://wg21.link/LWG3257)","Missing feature testing macro update from P0858","2019-11 (Belfast)","{{Complete}}","12","[#103873](https://github.com/llvm/llvm-project/issues/103873)",""
+"[LWG3256](https://wg21.link/LWG3256)","Feature testing macro for `constexpr` algorithms","2019-11 (Belfast)","{{Complete}}","13","[#103874](https://github.com/llvm/llvm-project/issues/103874)",""
+"[LWG3273](https://wg21.link/LWG3273)","Specify `weekday_indexed` to range of `[0, 7]` ","2019-11 (Belfast)","{{Complete}}","16","[#103875](https://github.com/llvm/llvm-project/issues/103875)",""
+"[LWG3070](https://wg21.link/LWG3070)","`path::lexically_relative` causes surprising results if a filename can also be a *root-name*","2019-11 (Belfast)","","","[#100267](https://github.com/llvm/llvm-project/issues/100267)",""
+"[LWG3266](https://wg21.link/LWG3266)","`to_chars(bool)` should be deleted","2019-11 (Belfast)","{{Complete}}","14","[#103876](https://github.com/llvm/llvm-project/issues/103876)",""
+"[LWG3272](https://wg21.link/LWG3272)","`%I%p` should parse/format `duration` since midnight","2019-11 (Belfast)","","","[#100268](https://github.com/llvm/llvm-project/issues/100268)",""
+"[LWG3259](https://wg21.link/LWG3259)","The definition of *constexpr iterators* should be adjusted","2019-11 (Belfast)","{{NothingToDo}}","","[#103877](https://github.com/llvm/llvm-project/issues/103877)",""
+"[LWG3103](https://wg21.link/LWG3103)","Errors in taking subview of `span` should be ill-formed where possible","2019-11 (Belfast)","{{Complete}}","11","[#103878](https://github.com/llvm/llvm-project/issues/103878)",""
+"[LWG3274](https://wg21.link/LWG3274)","Missing feature test macro for `<span>` ","2019-11 (Belfast)","{{Complete}}","11","[#103880](https://github.com/llvm/llvm-project/issues/103880)",""
+"[LWG3276](https://wg21.link/LWG3276)","Class `split_view::outer_iterator::value_type` should inherit from `view_interface` ","2019-11 (Belfast)","{{Complete}}","15","[#103881](https://github.com/llvm/llvm-project/issues/103881)",""
+"[LWG3277](https://wg21.link/LWG3277)","Pre-increment on prvalues is not a requirement of `weakly_incrementable` ","2019-11 (Belfast)","{{NothingToDo}}","","[#103882](https://github.com/llvm/llvm-project/issues/103882)",""
+"[LWG3149](https://wg21.link/LWG3149)","`DefaultConstructible` should require default initialization","2019-11 (Belfast)","{{Complete}}","13","[#103883](https://github.com/llvm/llvm-project/issues/103883)",""
"","","","","","",""
-"`LWG1203 <https://wg21.link/LWG1203>`__","More useful rvalue stream insertion","2020-02 (Prague)","|Complete|","12","`#103884 <https://github.com/llvm/llvm-project/issues/103884>`__",""
-"`LWG2859 <https://wg21.link/LWG2859>`__","Definition of *reachable* in [ptr.launder] misses pointer arithmetic from pointer-interconvertible object","2020-02 (Prague)","","","`#100269 <https://github.com/llvm/llvm-project/issues/100269>`__",""
-"`LWG3018 <https://wg21.link/LWG3018>`__","``shared_ptr``\ of function type","2020-02 (Prague)","|Nothing To Do|","","`#103885 <https://github.com/llvm/llvm-project/issues/103885>`__",""
-"`LWG3050 <https://wg21.link/LWG3050>`__","Conversion specification problem in ``chrono::duration``\ constructor","2020-02 (Prague)","|Complete|","19","`#103887 <https://github.com/llvm/llvm-project/issues/103887>`__",""
-"`LWG3141 <https://wg21.link/LWG3141>`__","``CopyConstructible``\ doesn't preserve source values","2020-02 (Prague)","|Nothing To Do|","","`#103889 <https://github.com/llvm/llvm-project/issues/103889>`__",""
-"`LWG3150 <https://wg21.link/LWG3150>`__","``UniformRandomBitGenerator``\ should validate ``min``\ and ``max``\ ","2020-02 (Prague)","|Complete|","13","`#103890 <https://github.com/llvm/llvm-project/issues/103890>`__",""
-"`LWG3175 <https://wg21.link/LWG3175>`__","The ``CommonReference``\ requirement of concept ``SwappableWith``\ is not satisfied in the example","2020-02 (Prague)","|Complete|","13","`#103891 <https://github.com/llvm/llvm-project/issues/103891>`__",""
-"`LWG3194 <https://wg21.link/LWG3194>`__","``ConvertibleTo``\ prose does not match code","2020-02 (Prague)","|Complete|","13","`#103892 <https://github.com/llvm/llvm-project/issues/103892>`__",""
-"`LWG3200 <https://wg21.link/LWG3200>`__","``midpoint``\ should not constrain ``T``\ is complete","2020-02 (Prague)","|Nothing To Do|","","`#103893 <https://github.com/llvm/llvm-project/issues/103893>`__",""
-"`LWG3201 <https://wg21.link/LWG3201>`__","``lerp``\ should be marked as ``noexcept``\ ","2020-02 (Prague)","|Complete|","","`#103894 <https://github.com/llvm/llvm-project/issues/103894>`__",""
-"`LWG3226 <https://wg21.link/LWG3226>`__","``zoned_time``\ constructor from ``string_view``\ should accept ``zoned_time<Duration2, TimeZonePtr2>``\ ","2020-02 (Prague)","|Complete|","19","`#103896 <https://github.com/llvm/llvm-project/issues/103896>`__",""
-"`LWG3233 <https://wg21.link/LWG3233>`__","Broken requirements for ``shared_ptr``\ converting constructors","2020-02 (Prague)","|Complete|","19","`#103897 <https://github.com/llvm/llvm-project/issues/103897>`__",""
-"`LWG3237 <https://wg21.link/LWG3237>`__","LWG 3038 and 3190 have inconsistent PRs","2020-02 (Prague)","|Complete|","16","`#103899 <https://github.com/llvm/llvm-project/issues/103899>`__",""
-"`LWG3238 <https://wg21.link/LWG3238>`__","Insufficiently-defined behavior of ``std::function``\ deduction guides","2020-02 (Prague)","|Nothing To Do|","","`#103901 <https://github.com/llvm/llvm-project/issues/103901>`__",""
-"`LWG3242 <https://wg21.link/LWG3242>`__","``std::format``\ : missing rules for ``arg-id``\ in ``width``\ and ``precision``\ ","2020-02 (Prague)","|Complete|","14","`#103902 <https://github.com/llvm/llvm-project/issues/103902>`__",""
-"`LWG3243 <https://wg21.link/LWG3243>`__","``std::format``\ and negative zeroes","2020-02 (Prague)","|Complete|","14","`#103904 <https://github.com/llvm/llvm-project/issues/103904>`__",""
-"`LWG3247 <https://wg21.link/LWG3247>`__","``ranges::iter_move``\ should perform ADL-only lookup of ``iter_move``\ ","2020-02 (Prague)","|Complete|","15","`#103906 <https://github.com/llvm/llvm-project/issues/103906>`__",""
-"`LWG3248 <https://wg21.link/LWG3248>`__","``std::format``\ ``#b``\ , ``#B``\ , ``#o``\ , ``#x``\ , and ``#X``\ presentation types misformat negative numbers","2020-02 (Prague)","|Complete|","14","`#103907 <https://github.com/llvm/llvm-project/issues/103907>`__",""
-"`LWG3250 <https://wg21.link/LWG3250>`__","``std::format``\ : ``#``\ (alternate form) for NaN and inf","2020-02 (Prague)","|Complete|","14","`#103908 <https://github.com/llvm/llvm-project/issues/103908>`__",""
-"`LWG3251 <https://wg21.link/LWG3251>`__","Are ``std::format``\ alignment specifiers applied to string arguments?","2020-02 (Prague)","|Complete|","14","`#103909 <https://github.com/llvm/llvm-project/issues/103909>`__",""
-"`LWG3252 <https://wg21.link/LWG3252>`__","Parse locale's aware modifiers for commands are not consistent with POSIX spec","2020-02 (Prague)","","","`#100271 <https://github.com/llvm/llvm-project/issues/100271>`__",""
-"`LWG3254 <https://wg21.link/LWG3254>`__","Strike ``stop_token``\ 's ``operator!=``\ ","2020-02 (Prague)","|Complete|","17","`#103910 <https://github.com/llvm/llvm-project/issues/103910>`__",""
-"`LWG3255 <https://wg21.link/LWG3255>`__","``span``\ 's ``array``\ constructor is too strict","2020-02 (Prague)","|Complete|","","`#103911 <https://github.com/llvm/llvm-project/issues/103911>`__",""
-"`LWG3260 <https://wg21.link/LWG3260>`__","``year_month*``\ arithmetic rejects durations convertible to years","2020-02 (Prague)","","","`#100274 <https://github.com/llvm/llvm-project/issues/100274>`__",""
-"`LWG3262 <https://wg21.link/LWG3262>`__","Formatting of negative durations is not specified","2020-02 (Prague)","|Complete|","16","`#103912 <https://github.com/llvm/llvm-project/issues/103912>`__",""
-"`LWG3264 <https://wg21.link/LWG3264>`__","``sized_range``\ and ``ranges::size``\ redundantly use ``disable_sized_range``\ ","2020-02 (Prague)","|Complete|","15","`#103913 <https://github.com/llvm/llvm-project/issues/103913>`__",""
-"`LWG3269 <https://wg21.link/LWG3269>`__","Parse manipulators do not specify the result of the extraction from stream","2020-02 (Prague)","","","`#100275 <https://github.com/llvm/llvm-project/issues/100275>`__",""
-"`LWG3270 <https://wg21.link/LWG3270>`__","Parsing and formatting ``%j``\ with ``duration``\ s","2020-02 (Prague)","|Partial|","","`#100418 <https://github.com/llvm/llvm-project/issues/100418>`__",""
-"`LWG3280 <https://wg21.link/LWG3280>`__","View converting constructors can cause constraint recursion and are unneeded","2020-02 (Prague)","|Complete|","15","`#103914 <https://github.com/llvm/llvm-project/issues/103914>`__",""
-"`LWG3281 <https://wg21.link/LWG3281>`__","Conversion from ``*pair-like*``\ types to ``subrange``\ is a silent semantic promotion","2020-02 (Prague)","|Complete|","13","`#103915 <https://github.com/llvm/llvm-project/issues/103915>`__",""
-"`LWG3282 <https://wg21.link/LWG3282>`__","``subrange``\ converting constructor should disallow derived to base conversions","2020-02 (Prague)","|Complete|","15","`#103916 <https://github.com/llvm/llvm-project/issues/103916>`__",""
-"`LWG3284 <https://wg21.link/LWG3284>`__","``random_access_iterator``\ semantic constraints accidentally promote difference type using unary negate","2020-02 (Prague)","|Nothing To Do|","","`#103918 <https://github.com/llvm/llvm-project/issues/103918>`__",""
-"`LWG3285 <https://wg21.link/LWG3285>`__","The type of a customization point object shall satisfy ``semiregular``\ ","2020-02 (Prague)","|Nothing To Do|","","`#103919 <https://github.com/llvm/llvm-project/issues/103919>`__",""
-"`LWG3286 <https://wg21.link/LWG3286>`__","``ranges::size``\ is not required to be valid after a call to ``ranges::begin``\ on an input range","2020-02 (Prague)","|Complete|","15","`#103920 <https://github.com/llvm/llvm-project/issues/103920>`__",""
-"`LWG3291 <https://wg21.link/LWG3291>`__","``iota_view::iterator``\ has the wrong ``iterator_category``\ ","2020-02 (Prague)","|Complete|","15","`#103921 <https://github.com/llvm/llvm-project/issues/103921>`__",""
-"`LWG3292 <https://wg21.link/LWG3292>`__","``iota_view``\ is under-constrained","2020-02 (Prague)","|Complete|","15","`#103922 <https://github.com/llvm/llvm-project/issues/103922>`__",""
-"`LWG3294 <https://wg21.link/LWG3294>`__","``zoned_time``\ deduction guides misinterprets ``string``\ /``char*``\ ","2020-02 (Prague)","|Complete|","19","`#103924 <https://github.com/llvm/llvm-project/issues/103924>`__",""
-"`LWG3296 <https://wg21.link/LWG3296>`__","Inconsistent default argument for ``basic_regex<>::assign``\ ","2020-02 (Prague)","|Complete|","","`#103925 <https://github.com/llvm/llvm-project/issues/103925>`__",""
-"`LWG3299 <https://wg21.link/LWG3299>`__","Pointers don't need customized iterator behavior","2020-02 (Prague)","|Complete|","15","`#103926 <https://github.com/llvm/llvm-project/issues/103926>`__",""
-"`LWG3300 <https://wg21.link/LWG3300>`__","Non-array ``ssize``\ overload is underconstrained","2020-02 (Prague)","|Nothing To Do|","","`#103929 <https://github.com/llvm/llvm-project/issues/103929>`__",""
-"`LWG3301 <https://wg21.link/LWG3301>`__","``transform_view::iterator``\ has incorrect ``iterator_category``\ ","2020-02 (Prague)","|Complete|","15","`#103932 <https://github.com/llvm/llvm-project/issues/103932>`__",""
-"`LWG3302 <https://wg21.link/LWG3302>`__","Range adaptor objects ``keys``\ and ``values``\ are unspecified","2020-02 (Prague)","|Complete|","16","`#103933 <https://github.com/llvm/llvm-project/issues/103933>`__",""
-"`LWG3303 <https://wg21.link/LWG3303>`__","Bad ""``constexpr``\ "" marker for ``destroy/destroy_n``\ ","2020-02 (Prague)","|Complete|","24","`#101693 <https://github.com/llvm/llvm-project/issues/101693>`__",""
-"`LWG3304 <https://wg21.link/LWG3304>`__","Allocate functions of ``std::polymorphic_allocator``\ should require ``[[nodiscard]]``\ ","2020-02 (Prague)","|Complete|","16","`#103934 <https://github.com/llvm/llvm-project/issues/103934>`__",""
-"`LWG3307 <https://wg21.link/LWG3307>`__","``std::allocator<void>().allocate(n)``\ ","2020-02 (Prague)","|Complete|","20","`#100422 <https://github.com/llvm/llvm-project/issues/100422>`__",""
-"`LWG3310 <https://wg21.link/LWG3310>`__","Replace ``SIZE_MAX``\ with ``numeric_limits<size_t>::max()``\ ","2020-02 (Prague)","|Complete|","16","`#103936 <https://github.com/llvm/llvm-project/issues/103936>`__",""
-"`LWG3313 <https://wg21.link/LWG3313>`__","``join_view::iterator::operator--``\ is incorrectly constrained","2020-02 (Prague)","|Complete|","14","`#103937 <https://github.com/llvm/llvm-project/issues/103937>`__",""
-"`LWG3314 <https://wg21.link/LWG3314>`__","Is stream insertion behavior locale dependent when ``Period::type``\ is ``micro``\ ?","2020-02 (Prague)","|Complete|","16","`#103940 <https://github.com/llvm/llvm-project/issues/103940>`__",""
-"`LWG3315 <https://wg21.link/LWG3315>`__","Correct Allocator Default Behavior","2020-02 (Prague)","|Complete|","","`#100426 <https://github.com/llvm/llvm-project/issues/100426>`__",""
-"`LWG3316 <https://wg21.link/LWG3316>`__","Correctly define epoch for ``utc_clock``\ / ``utc_timepoint``\ ","2020-02 (Prague)","","","`#100428 <https://github.com/llvm/llvm-project/issues/100428>`__",""
-"`LWG3317 <https://wg21.link/LWG3317>`__","Incorrect ``operator<<``\ for floating-point durations","2020-02 (Prague)","|Complete|","16","`#100429 <https://github.com/llvm/llvm-project/issues/100429>`__",""
-"`LWG3318 <https://wg21.link/LWG3318>`__","Clarify whether clocks can represent time before their epoch","2020-02 (Prague)","","","`#100430 <https://github.com/llvm/llvm-project/issues/100430>`__",""
-"`LWG3319 <https://wg21.link/LWG3319>`__","Properly reference specification of IANA time zone database","2020-02 (Prague)","|Nothing To Do|","","`#103941 <https://github.com/llvm/llvm-project/issues/103941>`__",""
-"`LWG3320 <https://wg21.link/LWG3320>`__","``span::cbegin/cend``\ methods produce different results than ``std::[ranges::]cbegin/cend``\ ","2020-02 (Prague)","|Complete|","","`#103942 <https://github.com/llvm/llvm-project/issues/103942>`__",""
-"`LWG3321 <https://wg21.link/LWG3321>`__","``uninitialized_construct_using_allocator``\ should use ``construct_at``\ ","2020-02 (Prague)","|Complete|","16","`#103943 <https://github.com/llvm/llvm-project/issues/103943>`__",""
-"`LWG3323 <https://wg21.link/LWG3323>`__","``*has-tuple-element*``\ helper concept needs ``convertible_to``\ ","2020-02 (Prague)","|Complete|","16","`#103944 <https://github.com/llvm/llvm-project/issues/103944>`__",""
-"`LWG3324 <https://wg21.link/LWG3324>`__","Special-case ``std::strong/weak/partial_order``\ for pointers","2020-02 (Prague)","|Complete|","14","`#103945 <https://github.com/llvm/llvm-project/issues/103945>`__",""
-"`LWG3325 <https://wg21.link/LWG3325>`__","Constrain return type of transformation function for ``transform_view``\ ","2020-02 (Prague)","|Complete|","15","`#103947 <https://github.com/llvm/llvm-project/issues/103947>`__",""
-"`LWG3326 <https://wg21.link/LWG3326>`__","``enable_view``\ has false positives","2020-02 (Prague)","|Complete|","15","`#103948 <https://github.com/llvm/llvm-project/issues/103948>`__",""
-"`LWG3327 <https://wg21.link/LWG3327>`__","Format alignment specifiers vs. text direction","2020-02 (Prague)","|Nothing To Do|","","`#103949 <https://github.com/llvm/llvm-project/issues/103949>`__",""
-"`LWG3328 <https://wg21.link/LWG3328>`__","Clarify that ``std::string``\ is not good for UTF-8","2020-02 (Prague)","|Nothing To Do|","","`#100431 <https://github.com/llvm/llvm-project/issues/100431>`__",""
-"`LWG3329 <https://wg21.link/LWG3329>`__","``totally_ordered_with``\ both directly and indirectly requires ``common_reference_with``\ ","2020-02 (Prague)","|Complete|","13","`#103950 <https://github.com/llvm/llvm-project/issues/103950>`__",""
-"`LWG3330 <https://wg21.link/LWG3330>`__","Include ``<compare>``\ from most library headers","2020-02 (Prague)","|Complete|","13","`#103951 <https://github.com/llvm/llvm-project/issues/103951>`__",""
-"`LWG3331 <https://wg21.link/LWG3331>`__","Define ``totally_ordered/_with``\ in terms of ``partially-ordered-with``\ ","2020-02 (Prague)","|Complete|","13","`#103952 <https://github.com/llvm/llvm-project/issues/103952>`__",""
-"`LWG3332 <https://wg21.link/LWG3332>`__","Issue in |sect|\ [time.format]","2020-02 (Prague)","|Complete|","16","`#103953 <https://github.com/llvm/llvm-project/issues/103953>`__",""
-"`LWG3334 <https://wg21.link/LWG3334>`__","``basic_osyncstream``\ move assignment and destruction calls ``basic_syncbuf::emit()``\ twice","2020-02 (Prague)","|Complete|","18","`#103954 <https://github.com/llvm/llvm-project/issues/103954>`__",""
-"`LWG3335 <https://wg21.link/LWG3335>`__","Resolve C++20 NB comments US 273 and GB 274","2020-02 (Prague)","|Complete|","15","`#103955 <https://github.com/llvm/llvm-project/issues/103955>`__",""
-"`LWG3338 <https://wg21.link/LWG3338>`__","Rename ``default_constructible``\ to ``default_initializable``\ ","2020-02 (Prague)","|Complete|","13","`#103956 <https://github.com/llvm/llvm-project/issues/103956>`__",""
-"`LWG3340 <https://wg21.link/LWG3340>`__","Formatting functions should throw on argument/format string mismatch in |sect|\ [format.functions]","2020-02 (Prague)","|Complete|","14","`#103957 <https://github.com/llvm/llvm-project/issues/103957>`__",""
-"`LWG3346 <https://wg21.link/LWG3346>`__","``pair``\ and ``tuple``\ copy and move constructor have backwards specification","2020-02 (Prague)","|Nothing To Do|","","`#103958 <https://github.com/llvm/llvm-project/issues/103958>`__",""
-"`LWG3347 <https://wg21.link/LWG3347>`__","``std::pair<T, U>``\ now requires ``T``\ and ``U``\ to be less-than-comparable","2020-02 (Prague)","|Complete|","17","`#103959 <https://github.com/llvm/llvm-project/issues/103959>`__",""
-"`LWG3348 <https://wg21.link/LWG3348>`__","``__cpp_lib_unwrap_ref``\ in wrong header","2020-02 (Prague)","|Complete|","12","`#103960 <https://github.com/llvm/llvm-project/issues/103960>`__",""
-"`LWG3349 <https://wg21.link/LWG3349>`__","Missing ``__cpp_lib_constexpr_complex``\ for P0415R1","2020-02 (Prague)","|Complete|","16","`#103961 <https://github.com/llvm/llvm-project/issues/103961>`__",""
-"`LWG3350 <https://wg21.link/LWG3350>`__","Simplify return type of ``lexicographical_compare_three_way``\ ","2020-02 (Prague)","|Complete|","17","`#103962 <https://github.com/llvm/llvm-project/issues/103962>`__",""
-"`LWG3351 <https://wg21.link/LWG3351>`__","``ranges::enable_safe_range``\ should not be constrained","2020-02 (Prague)","|Complete|","15","`#103963 <https://github.com/llvm/llvm-project/issues/103963>`__",""
-"`LWG3352 <https://wg21.link/LWG3352>`__","``strong_equality``\ isn't a thing","2020-02 (Prague)","|Complete|","19","`#103964 <https://github.com/llvm/llvm-project/issues/103964>`__",""
-"`LWG3354 <https://wg21.link/LWG3354>`__","``has_strong_structural_equality``\ has a meaningless definition","2020-02 (Prague)","|Nothing To Do|","","`#103965 <https://github.com/llvm/llvm-project/issues/103965>`__",""
-"`LWG3355 <https://wg21.link/LWG3355>`__","The memory algorithms should support move-only input iterators introduced by P1207","2020-02 (Prague)","|Complete|","15","`#103966 <https://github.com/llvm/llvm-project/issues/103966>`__",""
-"`LWG3356 <https://wg21.link/LWG3356>`__","``__cpp_lib_nothrow_convertible``\ should be ``__cpp_lib_is_nothrow_convertible``\ ","2020-02 (Prague)","|Complete|","12","`#103967 <https://github.com/llvm/llvm-project/issues/103967>`__",""
-"`LWG3358 <https://wg21.link/LWG3358>`__","|sect|\ [span.cons] is mistaken that ``to_address``\ can throw","2020-02 (Prague)","|Complete|","17","`#103968 <https://github.com/llvm/llvm-project/issues/103968>`__",""
-"`LWG3359 <https://wg21.link/LWG3359>`__","``<chrono>``\ leap second support should allow for negative leap seconds","2020-02 (Prague)","|Complete|","21","`#100432 <https://github.com/llvm/llvm-project/issues/100432>`__",""
-"`LWG3360 <https://wg21.link/LWG3360>`__","``three_way_comparable_with``\ is inconsistent with similar concepts","2020-02 (Prague)","|Nothing To Do|","","`#103969 <https://github.com/llvm/llvm-project/issues/103969>`__",""
-"`LWG3362 <https://wg21.link/LWG3362>`__","Strike ``stop_source``\ 's ``operator!=``\ ","2020-02 (Prague)","|Complete|","17","`#100433 <https://github.com/llvm/llvm-project/issues/100433>`__",""
-"`LWG3363 <https://wg21.link/LWG3363>`__","``drop_while_view``\ should opt-out of ``sized_range``\ ","2020-02 (Prague)","|Nothing To Do|","","`#103970 <https://github.com/llvm/llvm-project/issues/103970>`__",""
-"`LWG3364 <https://wg21.link/LWG3364>`__","Initialize data members of ranges and their iterators","2020-02 (Prague)","|Complete|","16","`#103971 <https://github.com/llvm/llvm-project/issues/103971>`__",""
-"`LWG3367 <https://wg21.link/LWG3367>`__","Integer-class conversions should not throw","2020-02 (Prague)","|Nothing To Do|","","`#103973 <https://github.com/llvm/llvm-project/issues/103973>`__",""
-"`LWG3369 <https://wg21.link/LWG3369>`__","``span``\ 's deduction-guide for built-in arrays doesn't work","2020-02 (Prague)","|Complete|","14","`#103974 <https://github.com/llvm/llvm-project/issues/103974>`__",""
-"`LWG3371 <https://wg21.link/LWG3371>`__","``visit_format_arg``\ and ``make_format_args``\ are not hidden friends","2020-02 (Prague)","|Complete|","14","`#103975 <https://github.com/llvm/llvm-project/issues/103975>`__",""
-"`LWG3372 <https://wg21.link/LWG3372>`__","``vformat_to``\ should not try to deduce ``Out``\ twice","2020-02 (Prague)","|Complete|","14","`#103976 <https://github.com/llvm/llvm-project/issues/103976>`__",""
-"`LWG3373 <https://wg21.link/LWG3373>`__","``{to,from}_chars_result``\ and ``format_to_n_result``\ need the ""we really mean what we say"" wording","2020-02 (Prague)","|Complete|","14","`#103977 <https://github.com/llvm/llvm-project/issues/103977>`__",""
-"`LWG3374 <https://wg21.link/LWG3374>`__","P0653 + P1006 should have made the other ``std::to_address``\ overload ``constexpr``\ ","2020-02 (Prague)","|Complete|","12","`#103978 <https://github.com/llvm/llvm-project/issues/103978>`__",""
-"`LWG3375 <https://wg21.link/LWG3375>`__","``decay``\ in ``viewable_range``\ should be ``remove_cvref``\ ","2020-02 (Prague)","|Complete|","15","`#103979 <https://github.com/llvm/llvm-project/issues/103979>`__",""
-"`LWG3377 <https://wg21.link/LWG3377>`__","``elements_view::iterator``\ befriends a specialization of itself","2020-02 (Prague)","|Nothing To Do|","","`#103981 <https://github.com/llvm/llvm-project/issues/103981>`__",""
-"`LWG3379 <https://wg21.link/LWG3379>`__","""``safe``\ "" in several library names is misleading","2020-02 (Prague)","|Complete|","15","`#103982 <https://github.com/llvm/llvm-project/issues/103982>`__",""
-"`LWG3380 <https://wg21.link/LWG3380>`__","``common_type``\ and comparison categories","2020-02 (Prague)","|Complete|","15","`#103983 <https://github.com/llvm/llvm-project/issues/103983>`__",""
-"`LWG3381 <https://wg21.link/LWG3381>`__","``begin``\ and ``data``\ must agree for ``contiguous_range``\ ","2020-02 (Prague)","|Nothing To Do|","","`#103984 <https://github.com/llvm/llvm-project/issues/103984>`__",""
-"`LWG3382 <https://wg21.link/LWG3382>`__","NTTP for ``pair``\ and ``array``\ ","2020-02 (Prague)","|Nothing To Do|","","`#103985 <https://github.com/llvm/llvm-project/issues/103985>`__",""
-"`LWG3383 <https://wg21.link/LWG3383>`__","|sect|\ [time.zone.leap.nonmembers] ``sys_seconds``\ should be replaced with ``seconds``\ ","2020-02 (Prague)","|Complete|","19","`#103987 <https://github.com/llvm/llvm-project/issues/103987>`__",""
-"`LWG3384 <https://wg21.link/LWG3384>`__","``transform_view::*sentinel*``\ has an incorrect ``operator-``\ ","2020-02 (Prague)","|Complete|","15","`#103988 <https://github.com/llvm/llvm-project/issues/103988>`__",""
-"`LWG3385 <https://wg21.link/LWG3385>`__","``common_iterator``\ is not sufficiently constrained for non-copyable iterators","2020-02 (Prague)","|Complete|","15","`#103989 <https://github.com/llvm/llvm-project/issues/103989>`__",""
-"`LWG3387 <https://wg21.link/LWG3387>`__","|sect|\ [range.reverse.view] ``reverse_view<V>``\ unintentionally requires ``range<const V>``\ ","2020-02 (Prague)","|Complete|","15","`#103990 <https://github.com/llvm/llvm-project/issues/103990>`__",""
-"`LWG3388 <https://wg21.link/LWG3388>`__","``view``\ iterator types have ill-formed ``<=>``\ operators","2020-02 (Prague)","|Complete|","16","`#103991 <https://github.com/llvm/llvm-project/issues/103991>`__",""
-"`LWG3389 <https://wg21.link/LWG3389>`__","A move-only iterator still does not have a ``counted_iterator``\ ","2020-02 (Prague)","|Complete|","15","`#103992 <https://github.com/llvm/llvm-project/issues/103992>`__",""
-"`LWG3390 <https://wg21.link/LWG3390>`__","``make_move_iterator()``\ cannot be used to construct a ``move_iterator``\ for a move-only iterator","2020-02 (Prague)","|Complete|","14","`#103993 <https://github.com/llvm/llvm-project/issues/103993>`__",""
-"`LWG3393 <https://wg21.link/LWG3393>`__","Missing/incorrect feature test macro for coroutines","2020-02 (Prague)","|Complete|","14","`#103994 <https://github.com/llvm/llvm-project/issues/103994>`__",""
-"`LWG3395 <https://wg21.link/LWG3395>`__","Definition for three-way comparison needs to be updated (US 152)","2020-02 (Prague)","|Nothing To Do|","","`#100434 <https://github.com/llvm/llvm-project/issues/100434>`__",""
-"`LWG3396 <https://wg21.link/LWG3396>`__","Clarify point of reference for ``source_location::current()``\ (DE 169)","2020-02 (Prague)","|Nothing To Do|","16","`#103995 <https://github.com/llvm/llvm-project/issues/103995>`__",""
-"`LWG3397 <https://wg21.link/LWG3397>`__","``ranges::basic_istream_view::iterator``\ should not provide ``iterator_category``\ ","2020-02 (Prague)","|Complete|","16","`#103996 <https://github.com/llvm/llvm-project/issues/103996>`__",""
-"`LWG3398 <https://wg21.link/LWG3398>`__","``tuple_element_t``\ is also wrong for ``const subrange``\ ","2020-02 (Prague)","|Complete|","14","`#103997 <https://github.com/llvm/llvm-project/issues/103997>`__",""
+"[LWG1203](https://wg21.link/LWG1203)","More useful rvalue stream insertion","2020-02 (Prague)","{{Complete}}","12","[#103884](https://github.com/llvm/llvm-project/issues/103884)",""
+"[LWG2859](https://wg21.link/LWG2859)","Definition of *reachable* in [ptr.launder] misses pointer arithmetic from pointer-interconvertible object","2020-02 (Prague)","","","[#100269](https://github.com/llvm/llvm-project/issues/100269)",""
+"[LWG3018](https://wg21.link/LWG3018)","`shared_ptr` of function type","2020-02 (Prague)","{{NothingToDo}}","","[#103885](https://github.com/llvm/llvm-project/issues/103885)",""
+"[LWG3050](https://wg21.link/LWG3050)","Conversion specification problem in `chrono::duration` constructor","2020-02 (Prague)","{{Complete}}","19","[#103887](https://github.com/llvm/llvm-project/issues/103887)",""
+"[LWG3141](https://wg21.link/LWG3141)","`CopyConstructible` doesn't preserve source values","2020-02 (Prague)","{{NothingToDo}}","","[#103889](https://github.com/llvm/llvm-project/issues/103889)",""
+"[LWG3150](https://wg21.link/LWG3150)","`UniformRandomBitGenerator` should validate `min` and `max` ","2020-02 (Prague)","{{Complete}}","13","[#103890](https://github.com/llvm/llvm-project/issues/103890)",""
+"[LWG3175](https://wg21.link/LWG3175)","The `CommonReference` requirement of concept `SwappableWith` is not satisfied in the example","2020-02 (Prague)","{{Complete}}","13","[#103891](https://github.com/llvm/llvm-project/issues/103891)",""
+"[LWG3194](https://wg21.link/LWG3194)","`ConvertibleTo` prose does not match code","2020-02 (Prague)","{{Complete}}","13","[#103892](https://github.com/llvm/llvm-project/issues/103892)",""
+"[LWG3200](https://wg21.link/LWG3200)","`midpoint` should not constrain `T` is complete","2020-02 (Prague)","{{NothingToDo}}","","[#103893](https://github.com/llvm/llvm-project/issues/103893)",""
+"[LWG3201](https://wg21.link/LWG3201)","`lerp` should be marked as `noexcept` ","2020-02 (Prague)","{{Complete}}","","[#103894](https://github.com/llvm/llvm-project/issues/103894)",""
+"[LWG3226](https://wg21.link/LWG3226)","`zoned_time` constructor from `string_view` should accept `zoned_time<Duration2, TimeZonePtr2>` ","2020-02 (Prague)","{{Complete}}","19","[#103896](https://github.com/llvm/llvm-project/issues/103896)",""
+"[LWG3233](https://wg21.link/LWG3233)","Broken requirements for `shared_ptr` converting constructors","2020-02 (Prague)","{{Complete}}","19","[#103897](https://github.com/llvm/llvm-project/issues/103897)",""
+"[LWG3237](https://wg21.link/LWG3237)","LWG 3038 and 3190 have inconsistent PRs","2020-02 (Prague)","{{Complete}}","16","[#103899](https://github.com/llvm/llvm-project/issues/103899)",""
+"[LWG3238](https://wg21.link/LWG3238)","Insufficiently-defined behavior of `std::function` deduction guides","2020-02 (Prague)","{{NothingToDo}}","","[#103901](https://github.com/llvm/llvm-project/issues/103901)",""
+"[LWG3242](https://wg21.link/LWG3242)","`std::format` : missing rules for `arg-id` in `width` and `precision` ","2020-02 (Prague)","{{Complete}}","14","[#103902](https://github.com/llvm/llvm-project/issues/103902)",""
+"[LWG3243](https://wg21.link/LWG3243)","`std::format` and negative zeroes","2020-02 (Prague)","{{Complete}}","14","[#103904](https://github.com/llvm/llvm-project/issues/103904)",""
+"[LWG3247](https://wg21.link/LWG3247)","`ranges::iter_move` should perform ADL-only lookup of `iter_move` ","2020-02 (Prague)","{{Complete}}","15","[#103906](https://github.com/llvm/llvm-project/issues/103906)",""
+"[LWG3248](https://wg21.link/LWG3248)","`std::format` `#b` , `#B` , `#o` , `#x` , and `#X` presentation types misformat negative numbers","2020-02 (Prague)","{{Complete}}","14","[#103907](https://github.com/llvm/llvm-project/issues/103907)",""
+"[LWG3250](https://wg21.link/LWG3250)","`std::format` : `#` (alternate form) for NaN and inf","2020-02 (Prague)","{{Complete}}","14","[#103908](https://github.com/llvm/llvm-project/issues/103908)",""
+"[LWG3251](https://wg21.link/LWG3251)","Are `std::format` alignment specifiers applied to string arguments?","2020-02 (Prague)","{{Complete}}","14","[#103909](https://github.com/llvm/llvm-project/issues/103909)",""
+"[LWG3252](https://wg21.link/LWG3252)","Parse locale's aware modifiers for commands are not consistent with POSIX spec","2020-02 (Prague)","","","[#100271](https://github.com/llvm/llvm-project/issues/100271)",""
+"[LWG3254](https://wg21.link/LWG3254)","Strike `stop_token` 's `operator!=` ","2020-02 (Prague)","{{Complete}}","17","[#103910](https://github.com/llvm/llvm-project/issues/103910)",""
+"[LWG3255](https://wg21.link/LWG3255)","`span` 's `array` constructor is too strict","2020-02 (Prague)","{{Complete}}","","[#103911](https://github.com/llvm/llvm-project/issues/103911)",""
+"[LWG3260](https://wg21.link/LWG3260)","`year_month*` arithmetic rejects durations convertible to years","2020-02 (Prague)","","","[#100274](https://github.com/llvm/llvm-project/issues/100274)",""
+"[LWG3262](https://wg21.link/LWG3262)","Formatting of negative durations is not specified","2020-02 (Prague)","{{Complete}}","16","[#103912](https://github.com/llvm/llvm-project/issues/103912)",""
+"[LWG3264](https://wg21.link/LWG3264)","`sized_range` and `ranges::size` redundantly use `disable_sized_range` ","2020-02 (Prague)","{{Complete}}","15","[#103913](https://github.com/llvm/llvm-project/issues/103913)",""
+"[LWG3269](https://wg21.link/LWG3269)","Parse manipulators do not specify the result of the extraction from stream","2020-02 (Prague)","","","[#100275](https://github.com/llvm/llvm-project/issues/100275)",""
+"[LWG3270](https://wg21.link/LWG3270)","Parsing and formatting `%j` with `duration` s","2020-02 (Prague)","{{Partial}}","","[#100418](https://github.com/llvm/llvm-project/issues/100418)",""
+"[LWG3280](https://wg21.link/LWG3280)","View converting constructors can cause constraint recursion and are unneeded","2020-02 (Prague)","{{Complete}}","15","[#103914](https://github.com/llvm/llvm-project/issues/103914)",""
+"[LWG3281](https://wg21.link/LWG3281)","Conversion from `*pair-like*` types to `subrange` is a silent semantic promotion","2020-02 (Prague)","{{Complete}}","13","[#103915](https://github.com/llvm/llvm-project/issues/103915)",""
+"[LWG3282](https://wg21.link/LWG3282)","`subrange` converting constructor should disallow derived to base conversions","2020-02 (Prague)","{{Complete}}","15","[#103916](https://github.com/llvm/llvm-project/issues/103916)",""
+"[LWG3284](https://wg21.link/LWG3284)","`random_access_iterator` semantic constraints accidentally promote difference type using unary negate","2020-02 (Prague)","{{NothingToDo}}","","[#103918](https://github.com/llvm/llvm-project/issues/103918)",""
+"[LWG3285](https://wg21.link/LWG3285)","The type of a customization point object shall satisfy `semiregular` ","2020-02 (Prague)","{{NothingToDo}}","","[#103919](https://github.com/llvm/llvm-project/issues/103919)",""
+"[LWG3286](https://wg21.link/LWG3286)","`ranges::size` is not required to be valid after a call to `ranges::begin` on an input range","2020-02 (Prague)","{{Complete}}","15","[#103920](https://github.com/llvm/llvm-project/issues/103920)",""
+"[LWG3291](https://wg21.link/LWG3291)","`iota_view::iterator` has the wrong `iterator_category` ","2020-02 (Prague)","{{Complete}}","15","[#103921](https://github.com/llvm/llvm-project/issues/103921)",""
+"[LWG3292](https://wg21.link/LWG3292)","`iota_view` is under-constrained","2020-02 (Prague)","{{Complete}}","15","[#103922](https://github.com/llvm/llvm-project/issues/103922)",""
+"[LWG3294](https://wg21.link/LWG3294)","`zoned_time` deduction guides misinterprets `string` /`char*` ","2020-02 (Prague)","{{Complete}}","19","[#103924](https://github.com/llvm/llvm-project/issues/103924)",""
+"[LWG3296](https://wg21.link/LWG3296)","Inconsistent default argument for `basic_regex<>::assign` ","2020-02 (Prague)","{{Complete}}","","[#103925](https://github.com/llvm/llvm-project/issues/103925)",""
+"[LWG3299](https://wg21.link/LWG3299)","Pointers don't need customized iterator behavior","2020-02 (Prague)","{{Complete}}","15","[#103926](https://github.com/llvm/llvm-project/issues/103926)",""
+"[LWG3300](https://wg21.link/LWG3300)","Non-array `ssize` overload is underconstrained","2020-02 (Prague)","{{NothingToDo}}","","[#103929](https://github.com/llvm/llvm-project/issues/103929)",""
+"[LWG3301](https://wg21.link/LWG3301)","`transform_view::iterator` has incorrect `iterator_category` ","2020-02 (Prague)","{{Complete}}","15","[#103932](https://github.com/llvm/llvm-project/issues/103932)",""
+"[LWG3302](https://wg21.link/LWG3302)","Range adaptor objects `keys` and `values` are unspecified","2020-02 (Prague)","{{Complete}}","16","[#103933](https://github.com/llvm/llvm-project/issues/103933)",""
+"[LWG3303](https://wg21.link/LWG3303)","Bad ""`constexpr` "" marker for `destroy/destroy_n` ","2020-02 (Prague)","{{Complete}}","24","[#101693](https://github.com/llvm/llvm-project/issues/101693)",""
+"[LWG3304](https://wg21.link/LWG3304)","Allocate functions of `std::polymorphic_allocator` should require `[[nodiscard]]` ","2020-02 (Prague)","{{Complete}}","16","[#103934](https://github.com/llvm/llvm-project/issues/103934)",""
+"[LWG3307](https://wg21.link/LWG3307)","`std::allocator<void>().allocate(n)` ","2020-02 (Prague)","{{Complete}}","20","[#100422](https://github.com/llvm/llvm-project/issues/100422)",""
+"[LWG3310](https://wg21.link/LWG3310)","Replace `SIZE_MAX` with `numeric_limits<size_t>::max()` ","2020-02 (Prague)","{{Complete}}","16","[#103936](https://github.com/llvm/llvm-project/issues/103936)",""
+"[LWG3313](https://wg21.link/LWG3313)","`join_view::iterator::operator--` is incorrectly constrained","2020-02 (Prague)","{{Complete}}","14","[#103937](https://github.com/llvm/llvm-project/issues/103937)",""
+"[LWG3314](https://wg21.link/LWG3314)","Is stream insertion behavior locale dependent when `Period::type` is `micro` ?","2020-02 (Prague)","{{Complete}}","16","[#103940](https://github.com/llvm/llvm-project/issues/103940)",""
+"[LWG3315](https://wg21.link/LWG3315)","Correct Allocator Default Behavior","2020-02 (Prague)","{{Complete}}","","[#100426](https://github.com/llvm/llvm-project/issues/100426)",""
+"[LWG3316](https://wg21.link/LWG3316)","Correctly define epoch for `utc_clock` / `utc_timepoint` ","2020-02 (Prague)","","","[#100428](https://github.com/llvm/llvm-project/issues/100428)",""
+"[LWG3317](https://wg21.link/LWG3317)","Incorrect `operator<<` for floating-point durations","2020-02 (Prague)","{{Complete}}","16","[#100429](https://github.com/llvm/llvm-project/issues/100429)",""
+"[LWG3318](https://wg21.link/LWG3318)","Clarify whether clocks can represent time before their epoch","2020-02 (Prague)","","","[#100430](https://github.com/llvm/llvm-project/issues/100430)",""
+"[LWG3319](https://wg21.link/LWG3319)","Properly reference specification of IANA time zone database","2020-02 (Prague)","{{NothingToDo}}","","[#103941](https://github.com/llvm/llvm-project/issues/103941)",""
+"[LWG3320](https://wg21.link/LWG3320)","`span::cbegin/cend` methods produce different results than `std::[ranges::]cbegin/cend` ","2020-02 (Prague)","{{Complete}}","","[#103942](https://github.com/llvm/llvm-project/issues/103942)",""
+"[LWG3321](https://wg21.link/LWG3321)","`uninitialized_construct_using_allocator` should use `construct_at` ","2020-02 (Prague)","{{Complete}}","16","[#103943](https://github.com/llvm/llvm-project/issues/103943)",""
+"[LWG3323](https://wg21.link/LWG3323)","`*has-tuple-element*` helper concept needs `convertible_to` ","2020-02 (Prague)","{{Complete}}","16","[#103944](https://github.com/llvm/llvm-project/issues/103944)",""
+"[LWG3324](https://wg21.link/LWG3324)","Special-case `std::strong/weak/partial_order` for pointers","2020-02 (Prague)","{{Complete}}","14","[#103945](https://github.com/llvm/llvm-project/issues/103945)",""
+"[LWG3325](https://wg21.link/LWG3325)","Constrain return type of transformation function for `transform_view` ","2020-02 (Prague)","{{Complete}}","15","[#103947](https://github.com/llvm/llvm-project/issues/103947)",""
+"[LWG3326](https://wg21.link/LWG3326)","`enable_view` has false positives","2020-02 (Prague)","{{Complete}}","15","[#103948](https://github.com/llvm/llvm-project/issues/103948)",""
+"[LWG3327](https://wg21.link/LWG3327)","Format alignment specifiers vs. text direction","2020-02 (Prague)","{{NothingToDo}}","","[#103949](https://github.com/llvm/llvm-project/issues/103949)",""
+"[LWG3328](https://wg21.link/LWG3328)","Clarify that `std::string` is not good for UTF-8","2020-02 (Prague)","{{NothingToDo}}","","[#100431](https://github.com/llvm/llvm-project/issues/100431)",""
+"[LWG3329](https://wg21.link/LWG3329)","`totally_ordered_with` both directly and indirectly requires `common_reference_with` ","2020-02 (Prague)","{{Complete}}","13","[#103950](https://github.com/llvm/llvm-project/issues/103950)",""
+"[LWG3330](https://wg21.link/LWG3330)","Include `<compare>` from most library headers","2020-02 (Prague)","{{Complete}}","13","[#103951](https://github.com/llvm/llvm-project/issues/103951)",""
+"[LWG3331](https://wg21.link/LWG3331)","Define `totally_ordered/_with` in terms of `partially-ordered-with` ","2020-02 (Prague)","{{Complete}}","13","[#103952](https://github.com/llvm/llvm-project/issues/103952)",""
+"[LWG3332](https://wg21.link/LWG3332)","Issue in §[time.format]","2020-02 (Prague)","{{Complete}}","16","[#103953](https://github.com/llvm/llvm-project/issues/103953)",""
+"[LWG3334](https://wg21.link/LWG3334)","`basic_osyncstream` move assignment and destruction calls `basic_syncbuf::emit()` twice","2020-02 (Prague)","{{Complete}}","18","[#103954](https://github.com/llvm/llvm-project/issues/103954)",""
+"[LWG3335](https://wg21.link/LWG3335)","Resolve C++20 NB comments US 273 and GB 274","2020-02 (Prague)","{{Complete}}","15","[#103955](https://github.com/llvm/llvm-project/issues/103955)",""
+"[LWG3338](https://wg21.link/LWG3338)","Rename `default_constructible` to `default_initializable` ","2020-02 (Prague)","{{Complete}}","13","[#103956](https://github.com/llvm/llvm-project/issues/103956)",""
+"[LWG3340](https://wg21.link/LWG3340)","Formatting functions should throw on argument/format string mismatch in §[format.functions]","2020-02 (Prague)","{{Complete}}","14","[#103957](https://github.com/llvm/llvm-project/issues/103957)",""
+"[LWG3346](https://wg21.link/LWG3346)","`pair` and `tuple` copy and move constructor have backwards specification","2020-02 (Prague)","{{NothingToDo}}","","[#103958](https://github.com/llvm/llvm-project/issues/103958)",""
+"[LWG3347](https://wg21.link/LWG3347)","`std::pair<T, U>` now requires `T` and `U` to be less-than-comparable","2020-02 (Prague)","{{Complete}}","17","[#103959](https://github.com/llvm/llvm-project/issues/103959)",""
+"[LWG3348](https://wg21.link/LWG3348)","`__cpp_lib_unwrap_ref` in wrong header","2020-02 (Prague)","{{Complete}}","12","[#103960](https://github.com/llvm/llvm-project/issues/103960)",""
+"[LWG3349](https://wg21.link/LWG3349)","Missing `__cpp_lib_constexpr_complex` for P0415R1","2020-02 (Prague)","{{Complete}}","16","[#103961](https://github.com/llvm/llvm-project/issues/103961)",""
+"[LWG3350](https://wg21.link/LWG3350)","Simplify return type of `lexicographical_compare_three_way` ","2020-02 (Prague)","{{Complete}}","17","[#103962](https://github.com/llvm/llvm-project/issues/103962)",""
+"[LWG3351](https://wg21.link/LWG3351)","`ranges::enable_safe_range` should not be constrained","2020-02 (Prague)","{{Complete}}","15","[#103963](https://github.com/llvm/llvm-project/issues/103963)",""
+"[LWG3352](https://wg21.link/LWG3352)","`strong_equality` isn't a thing","2020-02 (Prague)","{{Complete}}","19","[#103964](https://github.com/llvm/llvm-project/issues/103964)",""
+"[LWG3354](https://wg21.link/LWG3354)","`has_strong_structural_equality` has a meaningless definition","2020-02 (Prague)","{{NothingToDo}}","","[#103965](https://github.com/llvm/llvm-project/issues/103965)",""
+"[LWG3355](https://wg21.link/LWG3355)","The memory algorithms should support move-only input iterators introduced by P1207","2020-02 (Prague)","{{Complete}}","15","[#103966](https://github.com/llvm/llvm-project/issues/103966)",""
+"[LWG3356](https://wg21.link/LWG3356)","`__cpp_lib_nothrow_convertible` should be `__cpp_lib_is_nothrow_convertible` ","2020-02 (Prague)","{{Complete}}","12","[#103967](https://github.com/llvm/llvm-project/issues/103967)",""
+"[LWG3358](https://wg21.link/LWG3358)","§[span.cons] is mistaken that `to_address` can throw","2020-02 (Prague)","{{Complete}}","17","[#103968](https://github.com/llvm/llvm-project/issues/103968)",""
+"[LWG3359](https://wg21.link/LWG3359)","`<chrono>` leap second support should allow for negative leap seconds","2020-02 (Prague)","{{Complete}}","21","[#100432](https://github.com/llvm/llvm-project/issues/100432)",""
+"[LWG3360](https://wg21.link/LWG3360)","`three_way_comparable_with` is inconsistent with similar concepts","2020-02 (Prague)","{{NothingToDo}}","","[#103969](https://github.com/llvm/llvm-project/issues/103969)",""
+"[LWG3362](https://wg21.link/LWG3362)","Strike `stop_source` 's `operator!=` ","2020-02 (Prague)","{{Complete}}","17","[#100433](https://github.com/llvm/llvm-project/issues/100433)",""
+"[LWG3363](https://wg21.link/LWG3363)","`drop_while_view` should opt-out of `sized_range` ","2020-02 (Prague)","{{NothingToDo}}","","[#103970](https://github.com/llvm/llvm-project/issues/103970)",""
+"[LWG3364](https://wg21.link/LWG3364)","Initialize data members of ranges and their iterators","2020-02 (Prague)","{{Complete}}","16","[#103971](https://github.com/llvm/llvm-project/issues/103971)",""
+"[LWG3367](https://wg21.link/LWG3367)","Integer-class conversions should not throw","2020-02 (Prague)","{{NothingToDo}}","","[#103973](https://github.com/llvm/llvm-project/issues/103973)",""
+"[LWG3369](https://wg21.link/LWG3369)","`span` 's deduction-guide for built-in arrays doesn't work","2020-02 (Prague)","{{Complete}}","14","[#103974](https://github.com/llvm/llvm-project/issues/103974)",""
+"[LWG3371](https://wg21.link/LWG3371)","`visit_format_arg` and `make_format_args` are not hidden friends","2020-02 (Prague)","{{Complete}}","14","[#103975](https://github.com/llvm/llvm-project/issues/103975)",""
+"[LWG3372](https://wg21.link/LWG3372)","`vformat_to` should not try to deduce `Out` twice","2020-02 (Prague)","{{Complete}}","14","[#103976](https://github.com/llvm/llvm-project/issues/103976)",""
+"[LWG3373](https://wg21.link/LWG3373)","`{to,from}_chars_result` and `format_to_n_result` need the ""we really mean what we say"" wording","2020-02 (Prague)","{{Complete}}","14","[#103977](https://github.com/llvm/llvm-project/issues/103977)",""
+"[LWG3374](https://wg21.link/LWG3374)","P0653 + P1006 should have made the other `std::to_address` overload `constexpr` ","2020-02 (Prague)","{{Complete}}","12","[#103978](https://github.com/llvm/llvm-project/issues/103978)",""
+"[LWG3375](https://wg21.link/LWG3375)","`decay` in `viewable_range` should be `remove_cvref` ","2020-02 (Prague)","{{Complete}}","15","[#103979](https://github.com/llvm/llvm-project/issues/103979)",""
+"[LWG3377](https://wg21.link/LWG3377)","`elements_view::iterator` befriends a specialization of itself","2020-02 (Prague)","{{NothingToDo}}","","[#103981](https://github.com/llvm/llvm-project/issues/103981)",""
+"[LWG3379](https://wg21.link/LWG3379)","""`safe` "" in several library names is misleading","2020-02 (Prague)","{{Complete}}","15","[#103982](https://github.com/llvm/llvm-project/issues/103982)",""
+"[LWG3380](https://wg21.link/LWG3380)","`common_type` and comparison categories","2020-02 (Prague)","{{Complete}}","15","[#103983](https://github.com/llvm/llvm-project/issues/103983)",""
+"[LWG3381](https://wg21.link/LWG3381)","`begin` and `data` must agree for `contiguous_range` ","2020-02 (Prague)","{{NothingToDo}}","","[#103984](https://github.com/llvm/llvm-project/issues/103984)",""
+"[LWG3382](https://wg21.link/LWG3382)","NTTP for `pair` and `array` ","2020-02 (Prague)","{{NothingToDo}}","","[#103985](https://github.com/llvm/llvm-project/issues/103985)",""
+"[LWG3383](https://wg21.link/LWG3383)","§[time.zone.leap.nonmembers] `sys_seconds` should be replaced with `seconds` ","2020-02 (Prague)","{{Complete}}","19","[#103987](https://github.com/llvm/llvm-project/issues/103987)",""
+"[LWG3384](https://wg21.link/LWG3384)","`transform_view::*sentinel*` has an incorrect `operator-` ","2020-02 (Prague)","{{Complete}}","15","[#103988](https://github.com/llvm/llvm-project/issues/103988)",""
+"[LWG3385](https://wg21.link/LWG3385)","`common_iterator` is not sufficiently constrained for non-copyable iterators","2020-02 (Prague)","{{Complete}}","15","[#103989](https://github.com/llvm/llvm-project/issues/103989)",""
+"[LWG3387](https://wg21.link/LWG3387)","§[range.reverse.view] `reverse_view<V>` unintentionally requires `range<const V>` ","2020-02 (Prague)","{{Complete}}","15","[#103990](https://github.com/llvm/llvm-project/issues/103990)",""
+"[LWG3388](https://wg21.link/LWG3388)","`view` iterator types have ill-formed `<=>` operators","2020-02 (Prague)","{{Complete}}","16","[#103991](https://github.com/llvm/llvm-project/issues/103991)",""
+"[LWG3389](https://wg21.link/LWG3389)","A move-only iterator still does not have a `counted_iterator` ","2020-02 (Prague)","{{Complete}}","15","[#103992](https://github.com/llvm/llvm-project/issues/103992)",""
+"[LWG3390](https://wg21.link/LWG3390)","`make_move_iterator()` cannot be used to construct a `move_iterator` for a move-only iterator","2020-02 (Prague)","{{Complete}}","14","[#103993](https://github.com/llvm/llvm-project/issues/103993)",""
+"[LWG3393](https://wg21.link/LWG3393)","Missing/incorrect feature test macro for coroutines","2020-02 (Prague)","{{Complete}}","14","[#103994](https://github.com/llvm/llvm-project/issues/103994)",""
+"[LWG3395](https://wg21.link/LWG3395)","Definition for three-way comparison needs to be updated (US 152)","2020-02 (Prague)","{{NothingToDo}}","","[#100434](https://github.com/llvm/llvm-project/issues/100434)",""
+"[LWG3396](https://wg21.link/LWG3396)","Clarify point of reference for `source_location::current()` (DE 169)","2020-02 (Prague)","{{NothingToDo}}","16","[#103995](https://github.com/llvm/llvm-project/issues/103995)",""
+"[LWG3397](https://wg21.link/LWG3397)","`ranges::basic_istream_view::iterator` should not provide `iterator_category` ","2020-02 (Prague)","{{Complete}}","16","[#103996](https://github.com/llvm/llvm-project/issues/103996)",""
+"[LWG3398](https://wg21.link/LWG3398)","`tuple_element_t` is also wrong for `const subrange` ","2020-02 (Prague)","{{Complete}}","14","[#103997](https://github.com/llvm/llvm-project/issues/103997)",""
"","","","","","",""
-"`LWG3446 <https://wg21.link/LWG3446>`__","``indirectly_readable_traits``\ ambiguity for types with both ``value_type``\ and ``element_type``\ ","2020-11 (Virtual)","|Complete|","13","`#103998 <https://github.com/llvm/llvm-project/issues/103998>`__",""
+"[LWG3446](https://wg21.link/LWG3446)","`indirectly_readable_traits` ambiguity for types with both `value_type` and `element_type` ","2020-11 (Virtual)","{{Complete}}","13","[#103998](https://github.com/llvm/llvm-project/issues/103998)",""
diff --git a/libcxx/docs/Status/Cxx20Papers.csv b/libcxx/docs/Status/Cxx20Papers.csv
index 9ff95170ad7c3..a413e2329dc1e 100644
--- a/libcxx/docs/Status/Cxx20Papers.csv
+++ b/libcxx/docs/Status/Cxx20Papers.csv
@@ -1,204 +1,204 @@
"Paper #","Paper Name","Meeting","Status","First released version","GitHub issue","Notes"
-"`P0463R1 <https://wg21.link/P0463R1>`__","Endian just Endian","2017-07 (Toronto)","|Complete|","7","`#103999 <https://github.com/llvm/llvm-project/issues/103999>`__",""
-"`P0674R1 <https://wg21.link/P0674R1>`__","Extending make_shared to Support Arrays","2017-07 (Toronto)","|Complete|","15","`#104000 <https://github.com/llvm/llvm-project/issues/104000>`__",""
+"[P0463R1](https://wg21.link/P0463R1)","Endian just Endian","2017-07 (Toronto)","{{Complete}}","7","[#103999](https://github.com/llvm/llvm-project/issues/103999)",""
+"[P0674R1](https://wg21.link/P0674R1)","Extending make_shared to Support Arrays","2017-07 (Toronto)","{{Complete}}","15","[#104000](https://github.com/llvm/llvm-project/issues/104000)",""
"","","","","","",""
-"`P0020R6 <https://wg21.link/P0020R6>`__","Floating Point Atomic","2017-11 (Albuquerque)","|Complete|","18","`#104001 <https://github.com/llvm/llvm-project/issues/104001>`__","The feature-test macro was not set until LLVM 20."
-"`P0053R7 <https://wg21.link/P0053R7>`__","C++ Synchronized Buffered Ostream","2017-11 (Albuquerque)","|Complete|","18","`#104002 <https://github.com/llvm/llvm-project/issues/104002>`__",""
-"`P0202R3 <https://wg21.link/P0202R3>`__","Add constexpr modifiers to functions in <algorithm> and <utility> Headers","2017-11 (Albuquerque)","|Complete|","12","`#104003 <https://github.com/llvm/llvm-project/issues/104003>`__",""
-"`P0415R1 <https://wg21.link/P0415R1>`__","Constexpr for ``std::complex``\ ","2017-11 (Albuquerque)","|Complete|","16","`#104004 <https://github.com/llvm/llvm-project/issues/104004>`__",""
-"`P0439R0 <https://wg21.link/P0439R0>`__","Make ``std::memory_order``\ a scoped enumeration","2017-11 (Albuquerque)","|Complete|","","`#104005 <https://github.com/llvm/llvm-project/issues/104005>`__",""
-"`P0457R2 <https://wg21.link/P0457R2>`__","String Prefix and Suffix Checking","2017-11 (Albuquerque)","|Complete|","6","`#104006 <https://github.com/llvm/llvm-project/issues/104006>`__",""
-"`P0550R2 <https://wg21.link/P0550R2>`__","Transformation Trait ``remove_cvref``\ ","2017-11 (Albuquerque)","|Complete|","6","`#104007 <https://github.com/llvm/llvm-project/issues/104007>`__",""
-"`P0600R1 <https://wg21.link/P0600R1>`__","nodiscard in the Library","2017-11 (Albuquerque)","|Complete|","16","`#104010 <https://github.com/llvm/llvm-project/issues/104010>`__",""
-"`P0616R0 <https://wg21.link/P0616R0>`__","de-pessimize legacy <numeric> algorithms with std::move","2017-11 (Albuquerque)","|Complete|","12","`#104011 <https://github.com/llvm/llvm-project/issues/104011>`__",""
-"`P0653R2 <https://wg21.link/P0653R2>`__","Utility to convert a pointer to a raw pointer","2017-11 (Albuquerque)","|Complete|","6","`#104012 <https://github.com/llvm/llvm-project/issues/104012>`__",""
-"`P0718R2 <https://wg21.link/P0718R2>`__","Atomic shared_ptr","2017-11 (Albuquerque)","","","`#99980 <https://github.com/llvm/llvm-project/issues/99980>`__",""
-"`P0767R1 <https://wg21.link/P0767R1>`__","Deprecate POD","2017-11 (Albuquerque)","|Complete|","21","`#104013 <https://github.com/llvm/llvm-project/issues/104013>`__","It was previously erroneously marked as complete in LLVM 7."
-"`P0768R1 <https://wg21.link/P0768R1>`__","Library Support for the Spaceship (Comparison) Operator","2017-11 (Albuquerque)","|Complete|","","`#104014 <https://github.com/llvm/llvm-project/issues/104014>`__",""
-"`P0777R1 <https://wg21.link/P0777R1>`__","Treating Unnecessary ``decay``\ ","2017-11 (Albuquerque)","|Complete|","7","`#104016 <https://github.com/llvm/llvm-project/issues/104016>`__",""
+"[P0020R6](https://wg21.link/P0020R6)","Floating Point Atomic","2017-11 (Albuquerque)","{{Complete}}","18","[#104001](https://github.com/llvm/llvm-project/issues/104001)","The feature-test macro was not set until LLVM 20."
+"[P0053R7](https://wg21.link/P0053R7)","C++ Synchronized Buffered Ostream","2017-11 (Albuquerque)","{{Complete}}","18","[#104002](https://github.com/llvm/llvm-project/issues/104002)",""
+"[P0202R3](https://wg21.link/P0202R3)","Add constexpr modifiers to functions in \<algorithm\> and \<utility\> Headers","2017-11 (Albuquerque)","{{Complete}}","12","[#104003](https://github.com/llvm/llvm-project/issues/104003)",""
+"[P0415R1](https://wg21.link/P0415R1)","Constexpr for `std::complex` ","2017-11 (Albuquerque)","{{Complete}}","16","[#104004](https://github.com/llvm/llvm-project/issues/104004)",""
+"[P0439R0](https://wg21.link/P0439R0)","Make `std::memory_order` a scoped enumeration","2017-11 (Albuquerque)","{{Complete}}","","[#104005](https://github.com/llvm/llvm-project/issues/104005)",""
+"[P0457R2](https://wg21.link/P0457R2)","String Prefix and Suffix Checking","2017-11 (Albuquerque)","{{Complete}}","6","[#104006](https://github.com/llvm/llvm-project/issues/104006)",""
+"[P0550R2](https://wg21.link/P0550R2)","Transformation Trait `remove_cvref` ","2017-11 (Albuquerque)","{{Complete}}","6","[#104007](https://github.com/llvm/llvm-project/issues/104007)",""
+"[P0600R1](https://wg21.link/P0600R1)","nodiscard in the Library","2017-11 (Albuquerque)","{{Complete}}","16","[#104010](https://github.com/llvm/llvm-project/issues/104010)",""
+"[P0616R0](https://wg21.link/P0616R0)","de-pessimize legacy \<numeric\> algorithms with std::move","2017-11 (Albuquerque)","{{Complete}}","12","[#104011](https://github.com/llvm/llvm-project/issues/104011)",""
+"[P0653R2](https://wg21.link/P0653R2)","Utility to convert a pointer to a raw pointer","2017-11 (Albuquerque)","{{Complete}}","6","[#104012](https://github.com/llvm/llvm-project/issues/104012)",""
+"[P0718R2](https://wg21.link/P0718R2)","Atomic shared_ptr","2017-11 (Albuquerque)","","","[#99980](https://github.com/llvm/llvm-project/issues/99980)",""
+"[P0767R1](https://wg21.link/P0767R1)","Deprecate POD","2017-11 (Albuquerque)","{{Complete}}","21","[#104013](https://github.com/llvm/llvm-project/issues/104013)","It was previously erroneously marked as complete in LLVM 7."
+"[P0768R1](https://wg21.link/P0768R1)","Library Support for the Spaceship (Comparison) Operator","2017-11 (Albuquerque)","{{Complete}}","","[#104014](https://github.com/llvm/llvm-project/issues/104014)",""
+"[P0777R1](https://wg21.link/P0777R1)","Treating Unnecessary `decay` ","2017-11 (Albuquerque)","{{Complete}}","7","[#104016](https://github.com/llvm/llvm-project/issues/104016)",""
"","","","","","",""
-"`P0122R7 <https://wg21.link/P0122R7>`__","<span>","2018-03 (Jacksonville)","|Complete|","7","`#104017 <https://github.com/llvm/llvm-project/issues/104017>`__",""
-"`P0355R7 <https://wg21.link/P0355R7>`__","Extending chrono to Calendars and Time Zones","2018-03 (Jacksonville)","|Partial|","","`#99982 <https://github.com/llvm/llvm-project/issues/99982>`__","See the `Github issue <https://github.com/llvm/llvm-project/issues/99982>`__ for detailed status"
-"`P0551R3 <https://wg21.link/P0551R3>`__","Thou Shalt Not Specialize ``std``\ Function Templates!","2018-03 (Jacksonville)","|Complete|","11","`#104018 <https://github.com/llvm/llvm-project/issues/104018>`__",""
-"`P0753R2 <https://wg21.link/P0753R2>`__","Manipulators for C++ Synchronized Buffered Ostream","2018-03 (Jacksonville)","","","`#99983 <https://github.com/llvm/llvm-project/issues/99983>`__",""
-"`P0754R2 <https://wg21.link/P0754R2>`__","<version>","2018-03 (Jacksonville)","|Complete|","7","`#104021 <https://github.com/llvm/llvm-project/issues/104021>`__",""
-"`P0809R0 <https://wg21.link/P0809R0>`__","Comparing Unordered Containers","2018-03 (Jacksonville)","|Nothing To Do|","","`#104022 <https://github.com/llvm/llvm-project/issues/104022>`__",""
-"`P0858R0 <https://wg21.link/P0858R0>`__","Constexpr iterator requirements","2018-03 (Jacksonville)","|Complete|","12","`#104024 <https://github.com/llvm/llvm-project/issues/104024>`__",""
-"`P0905R1 <https://wg21.link/P0905R1>`__","Symmetry for spaceship","2018-03 (Jacksonville)","|Complete|","7","`#104025 <https://github.com/llvm/llvm-project/issues/104025>`__",""
-"`P0966R1 <https://wg21.link/P0966R1>`__","``string::reserve``\ Should Not Shrink","2018-03 (Jacksonville)","|Complete|","12","`#104026 <https://github.com/llvm/llvm-project/issues/104026>`__","It was previously erroneously marked as complete in version 8. See `bug 45368 <https://llvm.org/PR45368>`__"
+"[P0122R7](https://wg21.link/P0122R7)","\<span\>","2018-03 (Jacksonville)","{{Complete}}","7","[#104017](https://github.com/llvm/llvm-project/issues/104017)",""
+"[P0355R7](https://wg21.link/P0355R7)","Extending chrono to Calendars and Time Zones","2018-03 (Jacksonville)","{{Partial}}","","[#99982](https://github.com/llvm/llvm-project/issues/99982)","See the [Github issue](https://github.com/llvm/llvm-project/issues/99982) for detailed status"
+"[P0551R3](https://wg21.link/P0551R3)","Thou Shalt Not Specialize `std` Function Templates!","2018-03 (Jacksonville)","{{Complete}}","11","[#104018](https://github.com/llvm/llvm-project/issues/104018)",""
+"[P0753R2](https://wg21.link/P0753R2)","Manipulators for C++ Synchronized Buffered Ostream","2018-03 (Jacksonville)","","","[#99983](https://github.com/llvm/llvm-project/issues/99983)",""
+"[P0754R2](https://wg21.link/P0754R2)","\<version\>","2018-03 (Jacksonville)","{{Complete}}","7","[#104021](https://github.com/llvm/llvm-project/issues/104021)",""
+"[P0809R0](https://wg21.link/P0809R0)","Comparing Unordered Containers","2018-03 (Jacksonville)","{{NothingToDo}}","","[#104022](https://github.com/llvm/llvm-project/issues/104022)",""
+"[P0858R0](https://wg21.link/P0858R0)","Constexpr iterator requirements","2018-03 (Jacksonville)","{{Complete}}","12","[#104024](https://github.com/llvm/llvm-project/issues/104024)",""
+"[P0905R1](https://wg21.link/P0905R1)","Symmetry for spaceship","2018-03 (Jacksonville)","{{Complete}}","7","[#104025](https://github.com/llvm/llvm-project/issues/104025)",""
+"[P0966R1](https://wg21.link/P0966R1)","`string::reserve` Should Not Shrink","2018-03 (Jacksonville)","{{Complete}}","12","[#104026](https://github.com/llvm/llvm-project/issues/104026)","It was previously erroneously marked as complete in version 8. See [bug 45368](https://llvm.org/PR45368)"
"","","","","","",""
-"`P0019R8 <https://wg21.link/P0019R8>`__","Atomic Ref","2018-06 (Rapperswil)","|Complete|","19","`#104028 <https://github.com/llvm/llvm-project/issues/104028>`__",""
-"`P0458R2 <https://wg21.link/P0458R2>`__","Checking for Existence of an Element in Associative Containers","2018-06 (Rapperswil)","|Complete|","13","`#104029 <https://github.com/llvm/llvm-project/issues/104029>`__",""
-"`P0475R1 <https://wg21.link/P0475R1>`__","LWG 2511: guaranteed copy elision for piecewise construction","2018-06 (Rapperswil)","|Complete|","","`#104031 <https://github.com/llvm/llvm-project/issues/104031>`__",""
-"`P0476R2 <https://wg21.link/P0476R2>`__","Bit-casting object representations","2018-06 (Rapperswil)","|Complete|","14","`#104087 <https://github.com/llvm/llvm-project/issues/104087>`__",""
-"`P0528R3 <https://wg21.link/P0528R3>`__","The Curious Case of Padding Bits, Featuring Atomic Compare-and-Exchange","2018-06 (Rapperswil)","|Complete|","24","`#99984 <https://github.com/llvm/llvm-project/issues/99984>`__",""
-"`P0542R5 <https://wg21.link/P0542R5>`__","Support for contract based programming in C++","2018-06 (Rapperswil)","|Nothing To Do|","n/a","`#104089 <https://github.com/llvm/llvm-project/issues/104089>`__","Pulled at the 2019-07 meeting in Cologne"
-"`P0556R3 <https://wg21.link/P0556R3>`__","Integral power-of-2 operations","2018-06 (Rapperswil)","|Complete|","9","`#104090 <https://github.com/llvm/llvm-project/issues/104090>`__",""
-"`P0619R4 <https://wg21.link/P0619R4>`__","Reviewing Deprecated Facilities of C++17 for C++20","2018-06 (Rapperswil)","|Complete|","20","`#99985 <https://github.com/llvm/llvm-project/issues/99985>`__","Removed headers are still provided as an extension, but with deprecation warnings."
-"`P0646R1 <https://wg21.link/P0646R1>`__","Improving the Return Value of Erase-Like Algorithms","2018-06 (Rapperswil)","|Complete|","10","`#104091 <https://github.com/llvm/llvm-project/issues/104091>`__",""
-"`P0722R3 <https://wg21.link/P0722R3>`__","Efficient sized delete for variable sized classes","2018-06 (Rapperswil)","|Complete|","9","`#104092 <https://github.com/llvm/llvm-project/issues/104092>`__",""
-"`P0758R1 <https://wg21.link/P0758R1>`__","Implicit conversion traits and utility functions","2018-06 (Rapperswil)","|Complete|","","`#104093 <https://github.com/llvm/llvm-project/issues/104093>`__",""
-"`P0759R1 <https://wg21.link/P0759R1>`__","fpos Requirements","2018-06 (Rapperswil)","|Complete|","11","`#104094 <https://github.com/llvm/llvm-project/issues/104094>`__",""
-"`P0769R2 <https://wg21.link/P0769R2>`__","Add shift to <algorithm>","2018-06 (Rapperswil)","|Partial|","","`#104095 <https://github.com/llvm/llvm-project/issues/104095>`__","The serial overloads have been available since v12, but the ``ExecutionPolicy`` overloads have not been implemented."
-"`P0788R3 <https://wg21.link/P0788R3>`__","Standard Library Specification in a Concepts and Contracts World","2018-06 (Rapperswil)","|Nothing To Do|","n/a","`#104096 <https://github.com/llvm/llvm-project/issues/104096>`__","Pulled at the 2019-07 meeting in Cologne"
-"`P0879R0 <https://wg21.link/P0879R0>`__","Constexpr for swap and swap related functions Also resolves LWG issue 2800.","2018-06 (Rapperswil)","|Complete|","13","`#104097 <https://github.com/llvm/llvm-project/issues/104097>`__",""
-"`P0887R1 <https://wg21.link/P0887R1>`__","The identity metafunction","2018-06 (Rapperswil)","|Complete|","8","`#104099 <https://github.com/llvm/llvm-project/issues/104099>`__",""
-"`P0892R2 <https://wg21.link/P0892R2>`__","P0892R2: explicit(bool)","2018-06 (Rapperswil)","|Nothing To Do|","","`#100597 <https://github.com/llvm/llvm-project/issues/100597>`__",""
-"`P0898R3 <https://wg21.link/P0898R3>`__","Standard Library Concepts","2018-06 (Rapperswil)","|Complete|","13","`#104100 <https://github.com/llvm/llvm-project/issues/104100>`__",""
-"`P0935R0 <https://wg21.link/P0935R0>`__","Eradicating unnecessarily explicit default constructors from the standard library","2018-06 (Rapperswil)","|Complete|","12","`#104101 <https://github.com/llvm/llvm-project/issues/104101>`__",""
-"`P0941R2 <https://wg21.link/P0941R2>`__","Integrating feature-test macros into the C++ WD","2018-06 (Rapperswil)","|In Progress|","","`#99986 <https://github.com/llvm/llvm-project/issues/99986>`__",""
-"`P1023R0 <https://wg21.link/P1023R0>`__","constexpr comparison operators for std::array","2018-06 (Rapperswil)","|Complete|","8","`#104103 <https://github.com/llvm/llvm-project/issues/104103>`__",""
-"`P1025R1 <https://wg21.link/P1025R1>`__","Update The Reference To The Unicode Standard","2018-06 (Rapperswil)","","","`#100598 <https://github.com/llvm/llvm-project/issues/100598>`__",""
-"`P1120R0 <https://wg21.link/P1120R0>`__","Consistency improvements for <=> and other comparison operators","2018-06 (Rapperswil)","","","`#99989 <https://github.com/llvm/llvm-project/issues/99989>`__",""
+"[P0019R8](https://wg21.link/P0019R8)","Atomic Ref","2018-06 (Rapperswil)","{{Complete}}","19","[#104028](https://github.com/llvm/llvm-project/issues/104028)",""
+"[P0458R2](https://wg21.link/P0458R2)","Checking for Existence of an Element in Associative Containers","2018-06 (Rapperswil)","{{Complete}}","13","[#104029](https://github.com/llvm/llvm-project/issues/104029)",""
+"[P0475R1](https://wg21.link/P0475R1)","LWG 2511: guaranteed copy elision for piecewise construction","2018-06 (Rapperswil)","{{Complete}}","","[#104031](https://github.com/llvm/llvm-project/issues/104031)",""
+"[P0476R2](https://wg21.link/P0476R2)","Bit-casting object representations","2018-06 (Rapperswil)","{{Complete}}","14","[#104087](https://github.com/llvm/llvm-project/issues/104087)",""
+"[P0528R3](https://wg21.link/P0528R3)","The Curious Case of Padding Bits, Featuring Atomic Compare-and-Exchange","2018-06 (Rapperswil)","{{Complete}}","24","[#99984](https://github.com/llvm/llvm-project/issues/99984)",""
+"[P0542R5](https://wg21.link/P0542R5)","Support for contract based programming in C++","2018-06 (Rapperswil)","{{NothingToDo}}","n/a","[#104089](https://github.com/llvm/llvm-project/issues/104089)","Pulled at the 2019-07 meeting in Cologne"
+"[P0556R3](https://wg21.link/P0556R3)","Integral power-of-2 operations","2018-06 (Rapperswil)","{{Complete}}","9","[#104090](https://github.com/llvm/llvm-project/issues/104090)",""
+"[P0619R4](https://wg21.link/P0619R4)","Reviewing Deprecated Facilities of C++17 for C++20","2018-06 (Rapperswil)","{{Complete}}","20","[#99985](https://github.com/llvm/llvm-project/issues/99985)","Removed headers are still provided as an extension, but with deprecation warnings."
+"[P0646R1](https://wg21.link/P0646R1)","Improving the Return Value of Erase-Like Algorithms","2018-06 (Rapperswil)","{{Complete}}","10","[#104091](https://github.com/llvm/llvm-project/issues/104091)",""
+"[P0722R3](https://wg21.link/P0722R3)","Efficient sized delete for variable sized classes","2018-06 (Rapperswil)","{{Complete}}","9","[#104092](https://github.com/llvm/llvm-project/issues/104092)",""
+"[P0758R1](https://wg21.link/P0758R1)","Implicit conversion traits and utility functions","2018-06 (Rapperswil)","{{Complete}}","","[#104093](https://github.com/llvm/llvm-project/issues/104093)",""
+"[P0759R1](https://wg21.link/P0759R1)","fpos Requirements","2018-06 (Rapperswil)","{{Complete}}","11","[#104094](https://github.com/llvm/llvm-project/issues/104094)",""
+"[P0769R2](https://wg21.link/P0769R2)","Add shift to \<algorithm\>","2018-06 (Rapperswil)","{{Partial}}","","[#104095](https://github.com/llvm/llvm-project/issues/104095)","The serial overloads have been available since v12, but the `ExecutionPolicy` overloads have not been implemented."
+"[P0788R3](https://wg21.link/P0788R3)","Standard Library Specification in a Concepts and Contracts World","2018-06 (Rapperswil)","{{NothingToDo}}","n/a","[#104096](https://github.com/llvm/llvm-project/issues/104096)","Pulled at the 2019-07 meeting in Cologne"
+"[P0879R0](https://wg21.link/P0879R0)","Constexpr for swap and swap related functions Also resolves LWG issue 2800.","2018-06 (Rapperswil)","{{Complete}}","13","[#104097](https://github.com/llvm/llvm-project/issues/104097)",""
+"[P0887R1](https://wg21.link/P0887R1)","The identity metafunction","2018-06 (Rapperswil)","{{Complete}}","8","[#104099](https://github.com/llvm/llvm-project/issues/104099)",""
+"[P0892R2](https://wg21.link/P0892R2)","P0892R2: explicit(bool)","2018-06 (Rapperswil)","{{NothingToDo}}","","[#100597](https://github.com/llvm/llvm-project/issues/100597)",""
+"[P0898R3](https://wg21.link/P0898R3)","Standard Library Concepts","2018-06 (Rapperswil)","{{Complete}}","13","[#104100](https://github.com/llvm/llvm-project/issues/104100)",""
+"[P0935R0](https://wg21.link/P0935R0)","Eradicating unnecessarily explicit default constructors from the standard library","2018-06 (Rapperswil)","{{Complete}}","12","[#104101](https://github.com/llvm/llvm-project/issues/104101)",""
+"[P0941R2](https://wg21.link/P0941R2)","Integrating feature-test macros into the C++ WD","2018-06 (Rapperswil)","{{InProgress}}","","[#99986](https://github.com/llvm/llvm-project/issues/99986)",""
+"[P1023R0](https://wg21.link/P1023R0)","constexpr comparison operators for std::array","2018-06 (Rapperswil)","{{Complete}}","8","[#104103](https://github.com/llvm/llvm-project/issues/104103)",""
+"[P1025R1](https://wg21.link/P1025R1)","Update The Reference To The Unicode Standard","2018-06 (Rapperswil)","","","[#100598](https://github.com/llvm/llvm-project/issues/100598)",""
+"[P1120R0](https://wg21.link/P1120R0)","Consistency improvements for \<=\> and other comparison operators","2018-06 (Rapperswil)","","","[#99989](https://github.com/llvm/llvm-project/issues/99989)",""
"","","","","","",""
-"`P0318R1 <https://wg21.link/P0318R1>`__","unwrap_ref_decay and unwrap_reference","2018-11 (San Diego)","|Complete|","8","`#104105 <https://github.com/llvm/llvm-project/issues/104105>`__",""
-"`P0356R5 <https://wg21.link/P0356R5>`__","Simplified partial function application","2018-11 (San Diego)","|Complete|","13","`#104106 <https://github.com/llvm/llvm-project/issues/104106>`__",""
-"`P0357R3 <https://wg21.link/P0357R3>`__","reference_wrapper for incomplete types","2018-11 (San Diego)","|Complete|","8","`#104107 <https://github.com/llvm/llvm-project/issues/104107>`__",""
-"`P0482R6 <https://wg21.link/P0482R6>`__","char8_t: A type for UTF-8 characters and strings","2018-11 (San Diego)","|Complete|","16","`#104108 <https://github.com/llvm/llvm-project/issues/104108>`__",""
-"`P0487R1 <https://wg21.link/P0487R1>`__","Fixing ``operator>>(basic_istream&, CharT*)``\ (LWG 2499)","2018-11 (San Diego)","|Complete|","8","`#104110 <https://github.com/llvm/llvm-project/issues/104110>`__",""
-"`P0591R4 <https://wg21.link/P0591R4>`__","Utility functions to implement uses-allocator construction","2018-11 (San Diego)","|Partial|","","`#99990 <https://github.com/llvm/llvm-project/issues/99990>`__","The changes in [mem.poly.allocator.mem] are missing"
-"`P0595R2 <https://wg21.link/P0595R2>`__","std::is_constant_evaluated()","2018-11 (San Diego)","|Complete|","9","`#104111 <https://github.com/llvm/llvm-project/issues/104111>`__",""
-"`P0602R4 <https://wg21.link/P0602R4>`__","variant and optional should propagate copy/move triviality","2018-11 (San Diego)","|Complete|","8","`#104112 <https://github.com/llvm/llvm-project/issues/104112>`__",""
-"`P0608R3 <https://wg21.link/P0608R3>`__","A sane variant converting constructor","2018-11 (San Diego)","|Complete|","9","`#104113 <https://github.com/llvm/llvm-project/issues/104113>`__",""
-"`P0655R1 <https://wg21.link/P0655R1>`__","visit<R>: Explicit Return Type for visit","2018-11 (San Diego)","|Complete|","12","`#104115 <https://github.com/llvm/llvm-project/issues/104115>`__",""
-"`P0771R1 <https://wg21.link/P0771R1>`__","std::function move constructor should be noexcept","2018-11 (San Diego)","|Complete|","6","`#104116 <https://github.com/llvm/llvm-project/issues/104116>`__",""
-"`P0896R4 <https://wg21.link/P0896R4>`__","The One Ranges Proposal","2018-11 (San Diego)","|Complete|","15","`#104118 <https://github.com/llvm/llvm-project/issues/104118>`__",""
-"`P0899R1 <https://wg21.link/P0899R1>`__","P0899R1 - LWG 3016 is not a defect","2018-11 (San Diego)","|Nothing To Do|","","`#104120 <https://github.com/llvm/llvm-project/issues/104120>`__",""
-"`P0919R3 <https://wg21.link/P0919R3>`__","Heterogeneous lookup for unordered containers","2018-11 (San Diego)","|Complete|","12","`#104122 <https://github.com/llvm/llvm-project/issues/104122>`__",""
-"`P0972R0 <https://wg21.link/P0972R0>`__","<chrono> ``zero()``\ , ``min()``\ , and ``max()``\ should be noexcept","2018-11 (San Diego)","|Complete|","8","`#104123 <https://github.com/llvm/llvm-project/issues/104123>`__",""
-"`P1006R1 <https://wg21.link/P1006R1>`__","Constexpr in std::pointer_traits","2018-11 (San Diego)","|Complete|","8","`#104124 <https://github.com/llvm/llvm-project/issues/104124>`__",""
-"`P1007R3 <https://wg21.link/P1007R3>`__","``std::assume_aligned``\ ","2018-11 (San Diego)","|Complete|","15","`#104125 <https://github.com/llvm/llvm-project/issues/104125>`__",""
-"`P1020R1 <https://wg21.link/P1020R1>`__","Smart pointer creation with default initialization","2018-11 (San Diego)","|Complete|","16","`#104126 <https://github.com/llvm/llvm-project/issues/104126>`__","The feature-test macro was not set until LLVM 20."
-"`P1032R1 <https://wg21.link/P1032R1>`__","Misc constexpr bits","2018-11 (San Diego)","|Complete|","13","`#104127 <https://github.com/llvm/llvm-project/issues/104127>`__",""
-"`P1085R2 <https://wg21.link/P1085R2>`__","Should Span be Regular?","2018-11 (San Diego)","|Complete|","8","`#104128 <https://github.com/llvm/llvm-project/issues/104128>`__",""
-"`P1123R0 <https://wg21.link/P1123R0>`__","Editorial Guidance for merging P0019r8 and P0528r3","2018-11 (San Diego)","","","`#99991 <https://github.com/llvm/llvm-project/issues/99991>`__",""
-"`P1148R0 <https://wg21.link/P1148R0>`__","Cleaning up Clause 20","2018-11 (San Diego)","","","`#99992 <https://github.com/llvm/llvm-project/issues/99992>`__",""
-"`P1165R1 <https://wg21.link/P1165R1>`__","Make stateful allocator propagation more consistent for ``operator+(basic_string)``\ ","2018-11 (San Diego)","|Complete|","15","`#104129 <https://github.com/llvm/llvm-project/issues/104129>`__",""
-"`P1209R0 <https://wg21.link/P1209R0>`__","Adopt Consistent Container Erasure from Library Fundamentals 2 for C++20","2018-11 (San Diego)","|Complete|","8","`#104130 <https://github.com/llvm/llvm-project/issues/104130>`__",""
-"`P1210R0 <https://wg21.link/P1210R0>`__","P1210R0: Completing the Rebase of Library Fundamentals, Version 3, Working Draft","2018-11 (San Diego)","|Nothing To Do|","","`#100612 <https://github.com/llvm/llvm-project/issues/100612>`__",""
-"`P1236R1 <https://wg21.link/P1236R1>`__","Alternative Wording for P0907R4 Signed Integers are Two's Complement","2018-11 (San Diego)","","","`#99994 <https://github.com/llvm/llvm-project/issues/99994>`__",""
-"`P1248R1 <https://wg21.link/P1248R1>`__","Remove CommonReference requirement from StrictWeakOrdering (a.k.a Fixing Relations)","2018-11 (San Diego)","|Complete|","13","`#104131 <https://github.com/llvm/llvm-project/issues/104131>`__",""
-"`P1285R0 <https://wg21.link/P1285R0>`__","Improving Completeness Requirements for Type Traits","2018-11 (San Diego)","","","`#99995 <https://github.com/llvm/llvm-project/issues/99995>`__",""
-"`P1353R0 <https://wg21.link/P1353R0>`__","Missing feature test macros","2018-11 (San Diego)","|Complete|","19","`#100006 <https://github.com/llvm/llvm-project/issues/100006>`__",""
+"[P0318R1](https://wg21.link/P0318R1)","unwrap_ref_decay and unwrap_reference","2018-11 (San Diego)","{{Complete}}","8","[#104105](https://github.com/llvm/llvm-project/issues/104105)",""
+"[P0356R5](https://wg21.link/P0356R5)","Simplified partial function application","2018-11 (San Diego)","{{Complete}}","13","[#104106](https://github.com/llvm/llvm-project/issues/104106)",""
+"[P0357R3](https://wg21.link/P0357R3)","reference_wrapper for incomplete types","2018-11 (San Diego)","{{Complete}}","8","[#104107](https://github.com/llvm/llvm-project/issues/104107)",""
+"[P0482R6](https://wg21.link/P0482R6)","char8_t: A type for UTF-8 characters and strings","2018-11 (San Diego)","{{Complete}}","16","[#104108](https://github.com/llvm/llvm-project/issues/104108)",""
+"[P0487R1](https://wg21.link/P0487R1)","Fixing `operator>>(basic_istream&, CharT*)` (LWG 2499)","2018-11 (San Diego)","{{Complete}}","8","[#104110](https://github.com/llvm/llvm-project/issues/104110)",""
+"[P0591R4](https://wg21.link/P0591R4)","Utility functions to implement uses-allocator construction","2018-11 (San Diego)","{{Partial}}","","[#99990](https://github.com/llvm/llvm-project/issues/99990)","The changes in [mem.poly.allocator.mem] are missing"
+"[P0595R2](https://wg21.link/P0595R2)","std::is_constant_evaluated()","2018-11 (San Diego)","{{Complete}}","9","[#104111](https://github.com/llvm/llvm-project/issues/104111)",""
+"[P0602R4](https://wg21.link/P0602R4)","variant and optional should propagate copy/move triviality","2018-11 (San Diego)","{{Complete}}","8","[#104112](https://github.com/llvm/llvm-project/issues/104112)",""
+"[P0608R3](https://wg21.link/P0608R3)","A sane variant converting constructor","2018-11 (San Diego)","{{Complete}}","9","[#104113](https://github.com/llvm/llvm-project/issues/104113)",""
+"[P0655R1](https://wg21.link/P0655R1)","visit\<R\>: Explicit Return Type for visit","2018-11 (San Diego)","{{Complete}}","12","[#104115](https://github.com/llvm/llvm-project/issues/104115)",""
+"[P0771R1](https://wg21.link/P0771R1)","std::function move constructor should be noexcept","2018-11 (San Diego)","{{Complete}}","6","[#104116](https://github.com/llvm/llvm-project/issues/104116)",""
+"[P0896R4](https://wg21.link/P0896R4)","The One Ranges Proposal","2018-11 (San Diego)","{{Complete}}","15","[#104118](https://github.com/llvm/llvm-project/issues/104118)",""
+"[P0899R1](https://wg21.link/P0899R1)","P0899R1 - LWG 3016 is not a defect","2018-11 (San Diego)","{{NothingToDo}}","","[#104120](https://github.com/llvm/llvm-project/issues/104120)",""
+"[P0919R3](https://wg21.link/P0919R3)","Heterogeneous lookup for unordered containers","2018-11 (San Diego)","{{Complete}}","12","[#104122](https://github.com/llvm/llvm-project/issues/104122)",""
+"[P0972R0](https://wg21.link/P0972R0)","\<chrono\> `zero()` , `min()` , and `max()` should be noexcept","2018-11 (San Diego)","{{Complete}}","8","[#104123](https://github.com/llvm/llvm-project/issues/104123)",""
+"[P1006R1](https://wg21.link/P1006R1)","Constexpr in std::pointer_traits","2018-11 (San Diego)","{{Complete}}","8","[#104124](https://github.com/llvm/llvm-project/issues/104124)",""
+"[P1007R3](https://wg21.link/P1007R3)","`std::assume_aligned` ","2018-11 (San Diego)","{{Complete}}","15","[#104125](https://github.com/llvm/llvm-project/issues/104125)",""
+"[P1020R1](https://wg21.link/P1020R1)","Smart pointer creation with default initialization","2018-11 (San Diego)","{{Complete}}","16","[#104126](https://github.com/llvm/llvm-project/issues/104126)","The feature-test macro was not set until LLVM 20."
+"[P1032R1](https://wg21.link/P1032R1)","Misc constexpr bits","2018-11 (San Diego)","{{Complete}}","13","[#104127](https://github.com/llvm/llvm-project/issues/104127)",""
+"[P1085R2](https://wg21.link/P1085R2)","Should Span be Regular?","2018-11 (San Diego)","{{Complete}}","8","[#104128](https://github.com/llvm/llvm-project/issues/104128)",""
+"[P1123R0](https://wg21.link/P1123R0)","Editorial Guidance for merging P0019r8 and P0528r3","2018-11 (San Diego)","","","[#99991](https://github.com/llvm/llvm-project/issues/99991)",""
+"[P1148R0](https://wg21.link/P1148R0)","Cleaning up Clause 20","2018-11 (San Diego)","","","[#99992](https://github.com/llvm/llvm-project/issues/99992)",""
+"[P1165R1](https://wg21.link/P1165R1)","Make stateful allocator propagation more consistent for `operator+(basic_string)` ","2018-11 (San Diego)","{{Complete}}","15","[#104129](https://github.com/llvm/llvm-project/issues/104129)",""
+"[P1209R0](https://wg21.link/P1209R0)","Adopt Consistent Container Erasure from Library Fundamentals 2 for C++20","2018-11 (San Diego)","{{Complete}}","8","[#104130](https://github.com/llvm/llvm-project/issues/104130)",""
+"[P1210R0](https://wg21.link/P1210R0)","P1210R0: Completing the Rebase of Library Fundamentals, Version 3, Working Draft","2018-11 (San Diego)","{{NothingToDo}}","","[#100612](https://github.com/llvm/llvm-project/issues/100612)",""
+"[P1236R1](https://wg21.link/P1236R1)","Alternative Wording for P0907R4 Signed Integers are Two's Complement","2018-11 (San Diego)","","","[#99994](https://github.com/llvm/llvm-project/issues/99994)",""
+"[P1248R1](https://wg21.link/P1248R1)","Remove CommonReference requirement from StrictWeakOrdering (a.k.a Fixing Relations)","2018-11 (San Diego)","{{Complete}}","13","[#104131](https://github.com/llvm/llvm-project/issues/104131)",""
+"[P1285R0](https://wg21.link/P1285R0)","Improving Completeness Requirements for Type Traits","2018-11 (San Diego)","","","[#99995](https://github.com/llvm/llvm-project/issues/99995)",""
+"[P1353R0](https://wg21.link/P1353R0)","Missing feature test macros","2018-11 (San Diego)","{{Complete}}","19","[#100006](https://github.com/llvm/llvm-project/issues/100006)",""
"","","","","","",""
-"`P0339R6 <https://wg21.link/P0339R6>`__","polymorphic_allocator<> as a vocabulary type","2019-02 (Kona)","|Complete|","16","`#104132 <https://github.com/llvm/llvm-project/issues/104132>`__",""
-"`P0340R3 <https://wg21.link/P0340R3>`__","Making std::underlying_type SFINAE-friendly","2019-02 (Kona)","|Complete|","9","`#104133 <https://github.com/llvm/llvm-project/issues/104133>`__",""
-"`P0738R2 <https://wg21.link/P0738R2>`__","I Stream, You Stream, We All Stream for istream_iterator","2019-02 (Kona)","","","`#100007 <https://github.com/llvm/llvm-project/issues/100007>`__",""
-"`P0811R3 <https://wg21.link/P0811R3>`__","Well-behaved interpolation for numbers and pointers","2019-02 (Kona)","|Complete|","9","`#104134 <https://github.com/llvm/llvm-project/issues/104134>`__",""
-"`P0920R2 <https://wg21.link/P0920R2>`__","Precalculated hash values in lookup","2019-02 (Kona)","|Nothing To Do|","","`#104135 <https://github.com/llvm/llvm-project/issues/104135>`__","Reverted by `P1661 <https://wg21.link/P1661>`__"
-"`P1001R2 <https://wg21.link/P1001R2>`__","Target Vectorization Policies from Parallelism V2 TS to C++20","2019-02 (Kona)","|Complete|","17","`#104136 <https://github.com/llvm/llvm-project/issues/104136>`__",""
-"`P1024R3 <https://wg21.link/P1024R3>`__","Usability Enhancements for std::span","2019-02 (Kona)","|Complete|","9","`#104137 <https://github.com/llvm/llvm-project/issues/104137>`__",""
-"`P1164R1 <https://wg21.link/P1164R1>`__","Make create_directory() Intuitive","2019-02 (Kona)","|Complete|","12","`#104138 <https://github.com/llvm/llvm-project/issues/104138>`__",""
-"`P1227R2 <https://wg21.link/P1227R2>`__","Signed ssize() functions, unsigned size() functions","2019-02 (Kona)","|Complete|","9","`#104139 <https://github.com/llvm/llvm-project/issues/104139>`__",""
-"`P1252R2 <https://wg21.link/P1252R2>`__","Ranges Design Cleanup","2019-02 (Kona)","|Complete|","15","`#104140 <https://github.com/llvm/llvm-project/issues/104140>`__",""
-"`P1357R1 <https://wg21.link/P1357R1>`__","Traits for [Un]bounded Arrays","2019-02 (Kona)","|Complete|","9","`#104141 <https://github.com/llvm/llvm-project/issues/104141>`__",""
-"`P1458R1 <https://wg21.link/P1458R1>`__","Mandating the Standard Library: Clause 16 - Language support library","2019-02 (Kona)","|Complete|","9","`#104142 <https://github.com/llvm/llvm-project/issues/104142>`__",""
-"`P1459R1 <https://wg21.link/P1459R1>`__","Mandating the Standard Library: Clause 18 - Diagnostics library","2019-02 (Kona)","|Complete|","9","`#104143 <https://github.com/llvm/llvm-project/issues/104143>`__",""
-"`P1462R1 <https://wg21.link/P1462R1>`__","Mandating the Standard Library: Clause 20 - Strings library","2019-02 (Kona)","|Complete|","9","`#104145 <https://github.com/llvm/llvm-project/issues/104145>`__",""
-"`P1463R1 <https://wg21.link/P1463R1>`__","Mandating the Standard Library: Clause 21 - Containers library","2019-02 (Kona)","","","`#100010 <https://github.com/llvm/llvm-project/issues/100010>`__",""
-"`P1464R1 <https://wg21.link/P1464R1>`__","Mandating the Standard Library: Clause 22 - Iterators library","2019-02 (Kona)","|Complete|","9","`#104147 <https://github.com/llvm/llvm-project/issues/104147>`__",""
+"[P0339R6](https://wg21.link/P0339R6)","polymorphic_allocator\<\> as a vocabulary type","2019-02 (Kona)","{{Complete}}","16","[#104132](https://github.com/llvm/llvm-project/issues/104132)",""
+"[P0340R3](https://wg21.link/P0340R3)","Making std::underlying_type SFINAE-friendly","2019-02 (Kona)","{{Complete}}","9","[#104133](https://github.com/llvm/llvm-project/issues/104133)",""
+"[P0738R2](https://wg21.link/P0738R2)","I Stream, You Stream, We All Stream for istream_iterator","2019-02 (Kona)","","","[#100007](https://github.com/llvm/llvm-project/issues/100007)",""
+"[P0811R3](https://wg21.link/P0811R3)","Well-behaved interpolation for numbers and pointers","2019-02 (Kona)","{{Complete}}","9","[#104134](https://github.com/llvm/llvm-project/issues/104134)",""
+"[P0920R2](https://wg21.link/P0920R2)","Precalculated hash values in lookup","2019-02 (Kona)","{{NothingToDo}}","","[#104135](https://github.com/llvm/llvm-project/issues/104135)","Reverted by [P1661](https://wg21.link/P1661)"
+"[P1001R2](https://wg21.link/P1001R2)","Target Vectorization Policies from Parallelism V2 TS to C++20","2019-02 (Kona)","{{Complete}}","17","[#104136](https://github.com/llvm/llvm-project/issues/104136)",""
+"[P1024R3](https://wg21.link/P1024R3)","Usability Enhancements for std::span","2019-02 (Kona)","{{Complete}}","9","[#104137](https://github.com/llvm/llvm-project/issues/104137)",""
+"[P1164R1](https://wg21.link/P1164R1)","Make create_directory() Intuitive","2019-02 (Kona)","{{Complete}}","12","[#104138](https://github.com/llvm/llvm-project/issues/104138)",""
+"[P1227R2](https://wg21.link/P1227R2)","Signed ssize() functions, unsigned size() functions","2019-02 (Kona)","{{Complete}}","9","[#104139](https://github.com/llvm/llvm-project/issues/104139)",""
+"[P1252R2](https://wg21.link/P1252R2)","Ranges Design Cleanup","2019-02 (Kona)","{{Complete}}","15","[#104140](https://github.com/llvm/llvm-project/issues/104140)",""
+"[P1357R1](https://wg21.link/P1357R1)","Traits for [Un]bounded Arrays","2019-02 (Kona)","{{Complete}}","9","[#104141](https://github.com/llvm/llvm-project/issues/104141)",""
+"[P1458R1](https://wg21.link/P1458R1)","Mandating the Standard Library: Clause 16 - Language support library","2019-02 (Kona)","{{Complete}}","9","[#104142](https://github.com/llvm/llvm-project/issues/104142)",""
+"[P1459R1](https://wg21.link/P1459R1)","Mandating the Standard Library: Clause 18 - Diagnostics library","2019-02 (Kona)","{{Complete}}","9","[#104143](https://github.com/llvm/llvm-project/issues/104143)",""
+"[P1462R1](https://wg21.link/P1462R1)","Mandating the Standard Library: Clause 20 - Strings library","2019-02 (Kona)","{{Complete}}","9","[#104145](https://github.com/llvm/llvm-project/issues/104145)",""
+"[P1463R1](https://wg21.link/P1463R1)","Mandating the Standard Library: Clause 21 - Containers library","2019-02 (Kona)","","","[#100010](https://github.com/llvm/llvm-project/issues/100010)",""
+"[P1464R1](https://wg21.link/P1464R1)","Mandating the Standard Library: Clause 22 - Iterators library","2019-02 (Kona)","{{Complete}}","9","[#104147](https://github.com/llvm/llvm-project/issues/104147)",""
"","","","","","",""
-"`P0325R4 <https://wg21.link/P0325R4>`__","to_array from LFTS with updates","2019-07 (Cologne)","|Complete|","10","`#104149 <https://github.com/llvm/llvm-project/issues/104149>`__",""
-"`P0408R7 <https://wg21.link/P0408R7>`__","Efficient Access to basic_stringbuf's Buffer","2019-07 (Cologne)","|Complete|","17","`#104150 <https://github.com/llvm/llvm-project/issues/104150>`__",""
-"`P0466R5 <https://wg21.link/P0466R5>`__","Layout-compatibility and Pointer-interconvertibility Traits","2019-07 (Cologne)","","","`#100013 <https://github.com/llvm/llvm-project/issues/100013>`__",""
-"`P0553R4 <https://wg21.link/P0553R4>`__","Bit operations","2019-07 (Cologne)","|Complete|","9","`#104151 <https://github.com/llvm/llvm-project/issues/104151>`__",""
-"`P0631R8 <https://wg21.link/P0631R8>`__","Math Constants","2019-07 (Cologne)","|Complete|","11","`#104152 <https://github.com/llvm/llvm-project/issues/104152>`__",""
-"`P0645R10 <https://wg21.link/P0645R10>`__","Text Formatting","2019-07 (Cologne)","|Complete|","14","`#104153 <https://github.com/llvm/llvm-project/issues/104153>`__","The implementation was complete since LLVM 14, but the feature-test macro was not set until LLVM 19"
-"`P0660R10 <https://wg21.link/P0660R10>`__","Stop Token and Joining Thread, Rev 10.","2019-07 (Cologne)","|Complete|","20","`#104154 <https://github.com/llvm/llvm-project/issues/104154>`__","The feature was implemented since LLVM 18 but was guarded behind ``-fexperimental-library``."
-"`P0784R7 <https://wg21.link/P0784R7>`__","More constexpr containers","2019-07 (Cologne)","|Complete|","12","`#104156 <https://github.com/llvm/llvm-project/issues/104156>`__",""
-"`P0980R1 <https://wg21.link/P0980R1>`__","Making std::string constexpr","2019-07 (Cologne)","|Complete|","15","`#104157 <https://github.com/llvm/llvm-project/issues/104157>`__",""
-"`P1004R2 <https://wg21.link/P1004R2>`__","Making std::vector constexpr","2019-07 (Cologne)","|Complete|","15","`#104158 <https://github.com/llvm/llvm-project/issues/104158>`__",""
-"`P1035R7 <https://wg21.link/P1035R7>`__","Input Range Adaptors","2019-07 (Cologne)","|Complete|","16","`#104159 <https://github.com/llvm/llvm-project/issues/104159>`__",""
-"`P1065R2 <https://wg21.link/P1065R2>`__","Constexpr INVOKE","2019-07 (Cologne)","|Complete|","12","`#104160 <https://github.com/llvm/llvm-project/issues/104160>`__",""
-"`P1135R6 <https://wg21.link/P1135R6>`__","The C++20 Synchronization Library","2019-07 (Cologne)","|Complete|","11","`#104161 <https://github.com/llvm/llvm-project/issues/104161>`__",""
-"`P1207R4 <https://wg21.link/P1207R4>`__","Movability of Single-pass Iterators","2019-07 (Cologne)","|Complete|","15","`#104162 <https://github.com/llvm/llvm-project/issues/104162>`__",""
-"`P1208R6 <https://wg21.link/P1208R6>`__","Adopt source_location for C++20","2019-07 (Cologne)","|Complete|","16","`#104163 <https://github.com/llvm/llvm-project/issues/104163>`__",""
-"`P1355R2 <https://wg21.link/P1355R2>`__","Exposing a narrow contract for ceil2","2019-07 (Cologne)","|Complete|","9","`#104164 <https://github.com/llvm/llvm-project/issues/104164>`__",""
-"`P1361R2 <https://wg21.link/P1361R2>`__","Integration of chrono with text formatting","2019-07 (Cologne)","|Complete|","21","`#100014 <https://github.com/llvm/llvm-project/issues/100014>`__",""
-"`P1423R3 <https://wg21.link/P1423R3>`__","char8_t backward compatibility remediation","2019-07 (Cologne)","|Complete|","15","`#104165 <https://github.com/llvm/llvm-project/issues/104165>`__",""
-"`P1424R1 <https://wg21.link/P1424R1>`__","'constexpr' feature macro concerns","2019-07 (Cologne)","|Nothing To Do|","","`#104166 <https://github.com/llvm/llvm-project/issues/104166>`__","Superseded by `P1902 <https://wg21.link/P1902>`__"
-"`P1466R3 <https://wg21.link/P1466R3>`__","Miscellaneous minor fixes for chrono","2019-07 (Cologne)","|Partial|","","`#100015 <https://github.com/llvm/llvm-project/issues/100015>`__",""
-"`P1474R1 <https://wg21.link/P1474R1>`__","Helpful pointers for ContiguousIterator","2019-07 (Cologne)","|Complete|","15","`#104167 <https://github.com/llvm/llvm-project/issues/104167>`__",""
-"`P1502R1 <https://wg21.link/P1502R1>`__","Standard library header units for C++20","2019-07 (Cologne)","","","`#100016 <https://github.com/llvm/llvm-project/issues/100016>`__",""
-"`P1522R1 <https://wg21.link/P1522R1>`__","Iterator Difference Type and Integer Overflow","2019-07 (Cologne)","|Complete|","15","`#104169 <https://github.com/llvm/llvm-project/issues/104169>`__",""
-"`P1523R1 <https://wg21.link/P1523R1>`__","Views and Size Types","2019-07 (Cologne)","|Complete|","15","`#104170 <https://github.com/llvm/llvm-project/issues/104170>`__",""
-"`P1612R1 <https://wg21.link/P1612R1>`__","Relocate Endian's Specification","2019-07 (Cologne)","|Complete|","10","`#104172 <https://github.com/llvm/llvm-project/issues/104172>`__",""
-"`P1614R2 <https://wg21.link/P1614R2>`__","The Mothership has Landed","2019-07 (Cologne)","|Complete|","19","`#100018 <https://github.com/llvm/llvm-project/issues/100018>`__","``std::strong_order(long double, long double)`` is partly implemented."
-"`P1638R1 <https://wg21.link/P1638R1>`__","basic_istream_view::iterator should not be copyable","2019-07 (Cologne)","|Complete|","16","`#104173 <https://github.com/llvm/llvm-project/issues/104173>`__",""
-"`P1643R1 <https://wg21.link/P1643R1>`__","Add wait/notify to atomic_ref","2019-07 (Cologne)","|Complete|","19","`#104174 <https://github.com/llvm/llvm-project/issues/104174>`__",""
-"`P1644R0 <https://wg21.link/P1644R0>`__","Add wait/notify to atomic<shared_ptr>","2019-07 (Cologne)","","","`#100019 <https://github.com/llvm/llvm-project/issues/100019>`__",""
-"`P1650R0 <https://wg21.link/P1650R0>`__","Output std::chrono::days with 'd' suffix","2019-07 (Cologne)","|Complete|","16","`#104175 <https://github.com/llvm/llvm-project/issues/104175>`__",""
-"`P1651R0 <https://wg21.link/P1651R0>`__","bind_front should not unwrap reference_wrapper","2019-07 (Cologne)","|Complete|","13","`#104176 <https://github.com/llvm/llvm-project/issues/104176>`__",""
-"`P1652R1 <https://wg21.link/P1652R1>`__","Printf corner cases in std::format","2019-07 (Cologne)","|Complete|","14","`#104177 <https://github.com/llvm/llvm-project/issues/104177>`__",""
-"`P1661R1 <https://wg21.link/P1661R1>`__","Remove dedicated precalculated hash lookup interface","2019-07 (Cologne)","|Nothing To Do|","","`#104178 <https://github.com/llvm/llvm-project/issues/104178>`__",""
-"`P1754R1 <https://wg21.link/P1754R1>`__","Rename concepts to standard_case for C++20, while we still can","2019-07 (Cologne)","|Complete|","15","`#104179 <https://github.com/llvm/llvm-project/issues/104179>`__",""
+"[P0325R4](https://wg21.link/P0325R4)","to_array from LFTS with updates","2019-07 (Cologne)","{{Complete}}","10","[#104149](https://github.com/llvm/llvm-project/issues/104149)",""
+"[P0408R7](https://wg21.link/P0408R7)","Efficient Access to basic_stringbuf's Buffer","2019-07 (Cologne)","{{Complete}}","17","[#104150](https://github.com/llvm/llvm-project/issues/104150)",""
+"[P0466R5](https://wg21.link/P0466R5)","Layout-compatibility and Pointer-interconvertibility Traits","2019-07 (Cologne)","","","[#100013](https://github.com/llvm/llvm-project/issues/100013)",""
+"[P0553R4](https://wg21.link/P0553R4)","Bit operations","2019-07 (Cologne)","{{Complete}}","9","[#104151](https://github.com/llvm/llvm-project/issues/104151)",""
+"[P0631R8](https://wg21.link/P0631R8)","Math Constants","2019-07 (Cologne)","{{Complete}}","11","[#104152](https://github.com/llvm/llvm-project/issues/104152)",""
+"[P0645R10](https://wg21.link/P0645R10)","Text Formatting","2019-07 (Cologne)","{{Complete}}","14","[#104153](https://github.com/llvm/llvm-project/issues/104153)","The implementation was complete since LLVM 14, but the feature-test macro was not set until LLVM 19"
+"[P0660R10](https://wg21.link/P0660R10)","Stop Token and Joining Thread, Rev 10.","2019-07 (Cologne)","{{Complete}}","20","[#104154](https://github.com/llvm/llvm-project/issues/104154)","The feature was implemented since LLVM 18 but was guarded behind `-fexperimental-library`."
+"[P0784R7](https://wg21.link/P0784R7)","More constexpr containers","2019-07 (Cologne)","{{Complete}}","12","[#104156](https://github.com/llvm/llvm-project/issues/104156)",""
+"[P0980R1](https://wg21.link/P0980R1)","Making std::string constexpr","2019-07 (Cologne)","{{Complete}}","15","[#104157](https://github.com/llvm/llvm-project/issues/104157)",""
+"[P1004R2](https://wg21.link/P1004R2)","Making std::vector constexpr","2019-07 (Cologne)","{{Complete}}","15","[#104158](https://github.com/llvm/llvm-project/issues/104158)",""
+"[P1035R7](https://wg21.link/P1035R7)","Input Range Adaptors","2019-07 (Cologne)","{{Complete}}","16","[#104159](https://github.com/llvm/llvm-project/issues/104159)",""
+"[P1065R2](https://wg21.link/P1065R2)","Constexpr INVOKE","2019-07 (Cologne)","{{Complete}}","12","[#104160](https://github.com/llvm/llvm-project/issues/104160)",""
+"[P1135R6](https://wg21.link/P1135R6)","The C++20 Synchronization Library","2019-07 (Cologne)","{{Complete}}","11","[#104161](https://github.com/llvm/llvm-project/issues/104161)",""
+"[P1207R4](https://wg21.link/P1207R4)","Movability of Single-pass Iterators","2019-07 (Cologne)","{{Complete}}","15","[#104162](https://github.com/llvm/llvm-project/issues/104162)",""
+"[P1208R6](https://wg21.link/P1208R6)","Adopt source_location for C++20","2019-07 (Cologne)","{{Complete}}","16","[#104163](https://github.com/llvm/llvm-project/issues/104163)",""
+"[P1355R2](https://wg21.link/P1355R2)","Exposing a narrow contract for ceil2","2019-07 (Cologne)","{{Complete}}","9","[#104164](https://github.com/llvm/llvm-project/issues/104164)",""
+"[P1361R2](https://wg21.link/P1361R2)","Integration of chrono with text formatting","2019-07 (Cologne)","{{Complete}}","21","[#100014](https://github.com/llvm/llvm-project/issues/100014)",""
+"[P1423R3](https://wg21.link/P1423R3)","char8_t backward compatibility remediation","2019-07 (Cologne)","{{Complete}}","15","[#104165](https://github.com/llvm/llvm-project/issues/104165)",""
+"[P1424R1](https://wg21.link/P1424R1)","'constexpr' feature macro concerns","2019-07 (Cologne)","{{NothingToDo}}","","[#104166](https://github.com/llvm/llvm-project/issues/104166)","Superseded by [P1902](https://wg21.link/P1902)"
+"[P1466R3](https://wg21.link/P1466R3)","Miscellaneous minor fixes for chrono","2019-07 (Cologne)","{{Partial}}","","[#100015](https://github.com/llvm/llvm-project/issues/100015)",""
+"[P1474R1](https://wg21.link/P1474R1)","Helpful pointers for ContiguousIterator","2019-07 (Cologne)","{{Complete}}","15","[#104167](https://github.com/llvm/llvm-project/issues/104167)",""
+"[P1502R1](https://wg21.link/P1502R1)","Standard library header units for C++20","2019-07 (Cologne)","","","[#100016](https://github.com/llvm/llvm-project/issues/100016)",""
+"[P1522R1](https://wg21.link/P1522R1)","Iterator Difference Type and Integer Overflow","2019-07 (Cologne)","{{Complete}}","15","[#104169](https://github.com/llvm/llvm-project/issues/104169)",""
+"[P1523R1](https://wg21.link/P1523R1)","Views and Size Types","2019-07 (Cologne)","{{Complete}}","15","[#104170](https://github.com/llvm/llvm-project/issues/104170)",""
+"[P1612R1](https://wg21.link/P1612R1)","Relocate Endian's Specification","2019-07 (Cologne)","{{Complete}}","10","[#104172](https://github.com/llvm/llvm-project/issues/104172)",""
+"[P1614R2](https://wg21.link/P1614R2)","The Mothership has Landed","2019-07 (Cologne)","{{Complete}}","19","[#100018](https://github.com/llvm/llvm-project/issues/100018)","`std::strong_order(long double, long double)` is partly implemented."
+"[P1638R1](https://wg21.link/P1638R1)","basic_istream_view::iterator should not be copyable","2019-07 (Cologne)","{{Complete}}","16","[#104173](https://github.com/llvm/llvm-project/issues/104173)",""
+"[P1643R1](https://wg21.link/P1643R1)","Add wait/notify to atomic_ref","2019-07 (Cologne)","{{Complete}}","19","[#104174](https://github.com/llvm/llvm-project/issues/104174)",""
+"[P1644R0](https://wg21.link/P1644R0)","Add wait/notify to atomic\<shared_ptr\>","2019-07 (Cologne)","","","[#100019](https://github.com/llvm/llvm-project/issues/100019)",""
+"[P1650R0](https://wg21.link/P1650R0)","Output std::chrono::days with 'd' suffix","2019-07 (Cologne)","{{Complete}}","16","[#104175](https://github.com/llvm/llvm-project/issues/104175)",""
+"[P1651R0](https://wg21.link/P1651R0)","bind_front should not unwrap reference_wrapper","2019-07 (Cologne)","{{Complete}}","13","[#104176](https://github.com/llvm/llvm-project/issues/104176)",""
+"[P1652R1](https://wg21.link/P1652R1)","Printf corner cases in std::format","2019-07 (Cologne)","{{Complete}}","14","[#104177](https://github.com/llvm/llvm-project/issues/104177)",""
+"[P1661R1](https://wg21.link/P1661R1)","Remove dedicated precalculated hash lookup interface","2019-07 (Cologne)","{{NothingToDo}}","","[#104178](https://github.com/llvm/llvm-project/issues/104178)",""
+"[P1754R1](https://wg21.link/P1754R1)","Rename concepts to standard_case for C++20, while we still can","2019-07 (Cologne)","{{Complete}}","15","[#104179](https://github.com/llvm/llvm-project/issues/104179)",""
"","","","","","",""
-"`P0883R2 <https://wg21.link/P0883R2>`__","Fixing Atomic Initialization","2019-11 (Belfast)","|Complete|","14","`#104180 <https://github.com/llvm/llvm-project/issues/104180>`__","shared_ptr and floating-point changes weren't applied as they themselves aren't implemented yet. Also, ``ATOMIC_FLAG_INIT`` was marked deprecated in version 14, but was undeprecated with the implementation of LWG3659 in version 15."
-"`P1391R4 <https://wg21.link/P1391R4>`__","Range constructor for std::string_view","2019-11 (Belfast)","|Complete|","14","`#104181 <https://github.com/llvm/llvm-project/issues/104181>`__",""
-"`P1394R4 <https://wg21.link/P1394R4>`__","Range constructor for std::span","2019-11 (Belfast)","|Complete|","14","`#104182 <https://github.com/llvm/llvm-project/issues/104182>`__",""
-"`P1456R1 <https://wg21.link/P1456R1>`__","Move-only views","2019-11 (Belfast)","|Complete|","15","`#104183 <https://github.com/llvm/llvm-project/issues/104183>`__",""
-"`P1622R3 <https://wg21.link/P1622R3>`__","Mandating the Standard Library: Clause 32 - Thread support library","2019-11 (Belfast)","","","`#100020 <https://github.com/llvm/llvm-project/issues/100020>`__",""
-"`P1645R1 <https://wg21.link/P1645R1>`__","constexpr for numeric algorithms","2019-11 (Belfast)","|Complete|","12","`#104184 <https://github.com/llvm/llvm-project/issues/104184>`__",""
-"`P1686R2 <https://wg21.link/P1686R2>`__","Mandating the Standard Library: Clause 27 - Time library","2019-11 (Belfast)","","","`#100021 <https://github.com/llvm/llvm-project/issues/100021>`__",""
-"`P1690R1 <https://wg21.link/P1690R1>`__","Refinement Proposal for P0919 Heterogeneous lookup for unordered containers","2019-11 (Belfast)","|Complete|","12","`#104185 <https://github.com/llvm/llvm-project/issues/104185>`__",""
-"`P1716R3 <https://wg21.link/P1716R3>`__","ranges compare algorithm are over-constrained","2019-11 (Belfast)","|Complete|","15","`#104186 <https://github.com/llvm/llvm-project/issues/104186>`__",""
-"`P1718R2 <https://wg21.link/P1718R2>`__","Mandating the Standard Library: Clause 25 - Algorithms library","2019-11 (Belfast)","","","`#100022 <https://github.com/llvm/llvm-project/issues/100022>`__",""
-"`P1719R2 <https://wg21.link/P1719R2>`__","Mandating the Standard Library: Clause 26 - Numerics library","2019-11 (Belfast)","","","`#100023 <https://github.com/llvm/llvm-project/issues/100023>`__",""
-"`P1720R2 <https://wg21.link/P1720R2>`__","Mandating the Standard Library: Clause 28 - Localization library","2019-11 (Belfast)","","","`#100025 <https://github.com/llvm/llvm-project/issues/100025>`__",""
-"`P1721R2 <https://wg21.link/P1721R2>`__","Mandating the Standard Library: Clause 29 - Input/Output library","2019-11 (Belfast)","","","`#100026 <https://github.com/llvm/llvm-project/issues/100026>`__",""
-"`P1722R2 <https://wg21.link/P1722R2>`__","Mandating the Standard Library: Clause 30 - Regular Expression library","2019-11 (Belfast)","","","`#100027 <https://github.com/llvm/llvm-project/issues/100027>`__",""
-"`P1723R2 <https://wg21.link/P1723R2>`__","Mandating the Standard Library: Clause 31 - Atomics library","2019-11 (Belfast)","","","`#100029 <https://github.com/llvm/llvm-project/issues/100029>`__",""
-"`P1855R0 <https://wg21.link/P1855R0>`__","Make ``<compare>``\ freestanding","2019-11 (Belfast)","","","`#100030 <https://github.com/llvm/llvm-project/issues/100030>`__",""
-"`P1862R1 <https://wg21.link/P1862R1>`__","Ranges adaptors for non-copyable iterators","2019-11 (Belfast)","|Complete|","16","`#104187 <https://github.com/llvm/llvm-project/issues/104187>`__",""
-"`P1865R1 <https://wg21.link/P1865R1>`__","Add max() to latch and barrier","2019-11 (Belfast)","|Complete|","11","`#104188 <https://github.com/llvm/llvm-project/issues/104188>`__",""
-"`P1869R1 <https://wg21.link/P1869R1>`__","Rename 'condition_variable_any' interruptible wait methods","2019-11 (Belfast)","|Complete|","18","`#100031 <https://github.com/llvm/llvm-project/issues/100031>`__",""
-"`P1870R1 <https://wg21.link/P1870R1>`__","forwarding-range is too subtle","2019-11 (Belfast)","|Complete|","15","`#104190 <https://github.com/llvm/llvm-project/issues/104190>`__",""
-"`P1871R1 <https://wg21.link/P1871R1>`__","Concept traits should be named after concepts","2019-11 (Belfast)","|Complete|","14","`#104191 <https://github.com/llvm/llvm-project/issues/104191>`__",""
-"`P1872R0 <https://wg21.link/P1872R0>`__","span should have size_type, not index_type","2019-11 (Belfast)","|Complete|","10","`#104192 <https://github.com/llvm/llvm-project/issues/104192>`__",""
-"`P1878R1 <https://wg21.link/P1878R1>`__","Constraining Readable Types","2019-11 (Belfast)","|Complete|","15","`#104194 <https://github.com/llvm/llvm-project/issues/104194>`__",""
-"`P1892R1 <https://wg21.link/P1892R1>`__","Extended locale-specific presentation specifiers for std::format","2019-11 (Belfast)","|Complete|","14","`#104196 <https://github.com/llvm/llvm-project/issues/104196>`__",""
-"`P1902R1 <https://wg21.link/P1902R1>`__","Missing feature-test macros 2018-2019","2019-11 (Belfast)","","","`#100032 <https://github.com/llvm/llvm-project/issues/100032>`__",""
-"`P1959R0 <https://wg21.link/P1959R0>`__","Remove std::weak_equality and std::strong_equality","2019-11 (Belfast)","|Nothing To Do|","","`#104198 <https://github.com/llvm/llvm-project/issues/104198>`__",""
-"`P1960R0 <https://wg21.link/P1960R0>`__","NB Comment Changes Reviewed by SG1","2019-11 (Belfast)","","","`#100033 <https://github.com/llvm/llvm-project/issues/100033>`__",""
-"`P1961R0 <https://wg21.link/P1961R0>`__","Harmonizing the definitions of total order for pointers","2019-11 (Belfast)","","","`#100611 <https://github.com/llvm/llvm-project/issues/100611>`__",""
-"`P1965R0 <https://wg21.link/P1965R0>`__","Blanket Wording for Specifying ""Hidden Friends""","2019-11 (Belfast)","","","`#100034 <https://github.com/llvm/llvm-project/issues/100034>`__",""
+"[P0883R2](https://wg21.link/P0883R2)","Fixing Atomic Initialization","2019-11 (Belfast)","{{Complete}}","14","[#104180](https://github.com/llvm/llvm-project/issues/104180)","shared_ptr and floating-point changes weren't applied as they themselves aren't implemented yet. Also, `ATOMIC_FLAG_INIT` was marked deprecated in version 14, but was undeprecated with the implementation of LWG3659 in version 15."
+"[P1391R4](https://wg21.link/P1391R4)","Range constructor for std::string_view","2019-11 (Belfast)","{{Complete}}","14","[#104181](https://github.com/llvm/llvm-project/issues/104181)",""
+"[P1394R4](https://wg21.link/P1394R4)","Range constructor for std::span","2019-11 (Belfast)","{{Complete}}","14","[#104182](https://github.com/llvm/llvm-project/issues/104182)",""
+"[P1456R1](https://wg21.link/P1456R1)","Move-only views","2019-11 (Belfast)","{{Complete}}","15","[#104183](https://github.com/llvm/llvm-project/issues/104183)",""
+"[P1622R3](https://wg21.link/P1622R3)","Mandating the Standard Library: Clause 32 - Thread support library","2019-11 (Belfast)","","","[#100020](https://github.com/llvm/llvm-project/issues/100020)",""
+"[P1645R1](https://wg21.link/P1645R1)","constexpr for numeric algorithms","2019-11 (Belfast)","{{Complete}}","12","[#104184](https://github.com/llvm/llvm-project/issues/104184)",""
+"[P1686R2](https://wg21.link/P1686R2)","Mandating the Standard Library: Clause 27 - Time library","2019-11 (Belfast)","","","[#100021](https://github.com/llvm/llvm-project/issues/100021)",""
+"[P1690R1](https://wg21.link/P1690R1)","Refinement Proposal for P0919 Heterogeneous lookup for unordered containers","2019-11 (Belfast)","{{Complete}}","12","[#104185](https://github.com/llvm/llvm-project/issues/104185)",""
+"[P1716R3](https://wg21.link/P1716R3)","ranges compare algorithm are over-constrained","2019-11 (Belfast)","{{Complete}}","15","[#104186](https://github.com/llvm/llvm-project/issues/104186)",""
+"[P1718R2](https://wg21.link/P1718R2)","Mandating the Standard Library: Clause 25 - Algorithms library","2019-11 (Belfast)","","","[#100022](https://github.com/llvm/llvm-project/issues/100022)",""
+"[P1719R2](https://wg21.link/P1719R2)","Mandating the Standard Library: Clause 26 - Numerics library","2019-11 (Belfast)","","","[#100023](https://github.com/llvm/llvm-project/issues/100023)",""
+"[P1720R2](https://wg21.link/P1720R2)","Mandating the Standard Library: Clause 28 - Localization library","2019-11 (Belfast)","","","[#100025](https://github.com/llvm/llvm-project/issues/100025)",""
+"[P1721R2](https://wg21.link/P1721R2)","Mandating the Standard Library: Clause 29 - Input/Output library","2019-11 (Belfast)","","","[#100026](https://github.com/llvm/llvm-project/issues/100026)",""
+"[P1722R2](https://wg21.link/P1722R2)","Mandating the Standard Library: Clause 30 - Regular Expression library","2019-11 (Belfast)","","","[#100027](https://github.com/llvm/llvm-project/issues/100027)",""
+"[P1723R2](https://wg21.link/P1723R2)","Mandating the Standard Library: Clause 31 - Atomics library","2019-11 (Belfast)","","","[#100029](https://github.com/llvm/llvm-project/issues/100029)",""
+"[P1855R0](https://wg21.link/P1855R0)","Make `<compare>` freestanding","2019-11 (Belfast)","","","[#100030](https://github.com/llvm/llvm-project/issues/100030)",""
+"[P1862R1](https://wg21.link/P1862R1)","Ranges adaptors for non-copyable iterators","2019-11 (Belfast)","{{Complete}}","16","[#104187](https://github.com/llvm/llvm-project/issues/104187)",""
+"[P1865R1](https://wg21.link/P1865R1)","Add max() to latch and barrier","2019-11 (Belfast)","{{Complete}}","11","[#104188](https://github.com/llvm/llvm-project/issues/104188)",""
+"[P1869R1](https://wg21.link/P1869R1)","Rename 'condition_variable_any' interruptible wait methods","2019-11 (Belfast)","{{Complete}}","18","[#100031](https://github.com/llvm/llvm-project/issues/100031)",""
+"[P1870R1](https://wg21.link/P1870R1)","forwarding-range is too subtle","2019-11 (Belfast)","{{Complete}}","15","[#104190](https://github.com/llvm/llvm-project/issues/104190)",""
+"[P1871R1](https://wg21.link/P1871R1)","Concept traits should be named after concepts","2019-11 (Belfast)","{{Complete}}","14","[#104191](https://github.com/llvm/llvm-project/issues/104191)",""
+"[P1872R0](https://wg21.link/P1872R0)","span should have size_type, not index_type","2019-11 (Belfast)","{{Complete}}","10","[#104192](https://github.com/llvm/llvm-project/issues/104192)",""
+"[P1878R1](https://wg21.link/P1878R1)","Constraining Readable Types","2019-11 (Belfast)","{{Complete}}","15","[#104194](https://github.com/llvm/llvm-project/issues/104194)",""
+"[P1892R1](https://wg21.link/P1892R1)","Extended locale-specific presentation specifiers for std::format","2019-11 (Belfast)","{{Complete}}","14","[#104196](https://github.com/llvm/llvm-project/issues/104196)",""
+"[P1902R1](https://wg21.link/P1902R1)","Missing feature-test macros 2018-2019","2019-11 (Belfast)","","","[#100032](https://github.com/llvm/llvm-project/issues/100032)",""
+"[P1959R0](https://wg21.link/P1959R0)","Remove std::weak_equality and std::strong_equality","2019-11 (Belfast)","{{NothingToDo}}","","[#104198](https://github.com/llvm/llvm-project/issues/104198)",""
+"[P1960R0](https://wg21.link/P1960R0)","NB Comment Changes Reviewed by SG1","2019-11 (Belfast)","","","[#100033](https://github.com/llvm/llvm-project/issues/100033)",""
+"[P1961R0](https://wg21.link/P1961R0)","Harmonizing the definitions of total order for pointers","2019-11 (Belfast)","","","[#100611](https://github.com/llvm/llvm-project/issues/100611)",""
+"[P1965R0](https://wg21.link/P1965R0)","Blanket Wording for Specifying ""Hidden Friends""","2019-11 (Belfast)","","","[#100034](https://github.com/llvm/llvm-project/issues/100034)",""
"","","","","","",""
-"`P0586R2 <https://wg21.link/P0586R2>`__","Safe integral comparisons","2020-02 (Prague)","|Complete|","13","`#104199 <https://github.com/llvm/llvm-project/issues/104199>`__",""
-"`P0593R6 <https://wg21.link/P0593R6>`__","Implicit creation of objects for low-level object manipulation","2020-02 (Prague)","","","`#100035 <https://github.com/llvm/llvm-project/issues/100035>`__",""
-"`P1115R3 <https://wg21.link/P1115R3>`__","Improving the Return Value of Erase-Like Algorithms II: Free erase/erase if","2020-02 (Prague)","|Complete|","11","`#104200 <https://github.com/llvm/llvm-project/issues/104200>`__",""
-"`P1243R4 <https://wg21.link/P1243R4>`__","Rangify New Algorithms","2020-02 (Prague)","|Complete|","15","`#104201 <https://github.com/llvm/llvm-project/issues/104201>`__",""
-"`P1460R1 <https://wg21.link/P1460R1>`__","Mandating the Standard Library: Clause 20 - Utilities library","2020-02 (Prague)","","","`#100037 <https://github.com/llvm/llvm-project/issues/100037>`__",""
-"`P1739R4 <https://wg21.link/P1739R4>`__","Avoid template bloat for safe_ranges in combination with ""subrange-y"" view adaptors","2020-02 (Prague)","|Complete|","15","`#104202 <https://github.com/llvm/llvm-project/issues/104202>`__",""
-"`P1831R1 <https://wg21.link/P1831R1>`__","Deprecating volatile: library","2020-02 (Prague)","","","`#100038 <https://github.com/llvm/llvm-project/issues/100038>`__",""
-"`P1868R2 <https://wg21.link/P1868R2>`__","width: clarifying units of width and precision in std::format","2020-02 (Prague)","|Complete|","14","`#104203 <https://github.com/llvm/llvm-project/issues/104203>`__",""
-"`P1956R1 <https://wg21.link/P1956R1>`__","On the names of low-level bit manipulation functions","2020-02 (Prague)","|Complete|","12","`#104204 <https://github.com/llvm/llvm-project/issues/104204>`__",""
-"`P1957R2 <https://wg21.link/P1957R2>`__","Converting from ``T*``\ to bool should be considered narrowing (re: US 212)","2020-02 (Prague)","|Complete|","18","`#104205 <https://github.com/llvm/llvm-project/issues/104205>`__",""
-"`P1963R0 <https://wg21.link/P1963R0>`__","P1963R0: Fixing US 313","2020-02 (Prague)","|Nothing To Do|","","`#100039 <https://github.com/llvm/llvm-project/issues/100039>`__",""
-"`P1964R2 <https://wg21.link/P1964R2>`__","Wording for boolean-testable","2020-02 (Prague)","|Complete|","13","`#104206 <https://github.com/llvm/llvm-project/issues/104206>`__",""
-"`P1970R2 <https://wg21.link/P1970R2>`__","Consistency for size() functions: Add ranges::ssize","2020-02 (Prague)","|Complete|","13","`#104207 <https://github.com/llvm/llvm-project/issues/104207>`__",""
-"`P1973R1 <https://wg21.link/P1973R1>`__","Rename ""_default_init"" Functions, Rev1","2020-02 (Prague)","|Complete|","16","`#104208 <https://github.com/llvm/llvm-project/issues/104208>`__","The feature-test macro was not set until LLVM 20."
-"`P1976R2 <https://wg21.link/P1976R2>`__","Fixed-size span construction from dynamic range","2020-02 (Prague)","|Complete|","11","`#104209 <https://github.com/llvm/llvm-project/issues/104209>`__",""
-"`P1981R0 <https://wg21.link/P1981R0>`__","Rename leap to leap_second","2020-02 (Prague)","|Complete|","19","`#104210 <https://github.com/llvm/llvm-project/issues/104210>`__",""
-"`P1982R0 <https://wg21.link/P1982R0>`__","Rename link to time_zone_link","2020-02 (Prague)","|Complete|","19","`#104211 <https://github.com/llvm/llvm-project/issues/104211>`__",""
-"`P1983R0 <https://wg21.link/P1983R0>`__","Wording for GB301, US296, US292, US291, and US283","2020-02 (Prague)","|Complete|","15","`#104212 <https://github.com/llvm/llvm-project/issues/104212>`__",""
-"`P1994R1 <https://wg21.link/P1994R1>`__","elements_view needs its own sentinel","2020-02 (Prague)","|Complete|","16","`#104213 <https://github.com/llvm/llvm-project/issues/104213>`__",""
-"`P2002R1 <https://wg21.link/P2002R1>`__","Defaulted comparison specification cleanups","2020-02 (Prague)","|Complete|","7","`#100615 <https://github.com/llvm/llvm-project/issues/100615>`__",""
-"`P2045R1 <https://wg21.link/P2045R1>`__","P2045R1: Missing Mandates for the standard library","2020-02 (Prague)","|Nothing To Do|","","`#100041 <https://github.com/llvm/llvm-project/issues/100041>`__",""
-"`P2091R0 <https://wg21.link/P2091R0>`__","Issues with range access CPOs","2020-02 (Prague)","|Complete|","15","`#104214 <https://github.com/llvm/llvm-project/issues/104214>`__",""
-"`P2101R0 <https://wg21.link/P2101R0>`__","P2101R0: 'Models' subsumes 'satisfies' (Wording for US298 and US300)","2020-02 (Prague)","|Nothing To Do|","","`#100618 <https://github.com/llvm/llvm-project/issues/100618>`__",""
-"`P2102R0 <https://wg21.link/P2102R0>`__","Make 'implicit expression variations' more explicit (Wording for US185)","2020-02 (Prague)","|Complete|","15","`#100042 <https://github.com/llvm/llvm-project/issues/100042>`__",""
-"`P2106R0 <https://wg21.link/P2106R0>`__","Alternative wording for GB315 and GB316","2020-02 (Prague)","|Complete|","15","`#104215 <https://github.com/llvm/llvm-project/issues/104215>`__",""
-"`P2116R0 <https://wg21.link/P2116R0>`__","Remove tuple-like protocol support from fixed-extent span","2020-02 (Prague)","|Complete|","11","`#104216 <https://github.com/llvm/llvm-project/issues/104216>`__",""
+"[P0586R2](https://wg21.link/P0586R2)","Safe integral comparisons","2020-02 (Prague)","{{Complete}}","13","[#104199](https://github.com/llvm/llvm-project/issues/104199)",""
+"[P0593R6](https://wg21.link/P0593R6)","Implicit creation of objects for low-level object manipulation","2020-02 (Prague)","","","[#100035](https://github.com/llvm/llvm-project/issues/100035)",""
+"[P1115R3](https://wg21.link/P1115R3)","Improving the Return Value of Erase-Like Algorithms II: Free erase/erase if","2020-02 (Prague)","{{Complete}}","11","[#104200](https://github.com/llvm/llvm-project/issues/104200)",""
+"[P1243R4](https://wg21.link/P1243R4)","Rangify New Algorithms","2020-02 (Prague)","{{Complete}}","15","[#104201](https://github.com/llvm/llvm-project/issues/104201)",""
+"[P1460R1](https://wg21.link/P1460R1)","Mandating the Standard Library: Clause 20 - Utilities library","2020-02 (Prague)","","","[#100037](https://github.com/llvm/llvm-project/issues/100037)",""
+"[P1739R4](https://wg21.link/P1739R4)","Avoid template bloat for safe_ranges in combination with ""subrange-y"" view adaptors","2020-02 (Prague)","{{Complete}}","15","[#104202](https://github.com/llvm/llvm-project/issues/104202)",""
+"[P1831R1](https://wg21.link/P1831R1)","Deprecating volatile: library","2020-02 (Prague)","","","[#100038](https://github.com/llvm/llvm-project/issues/100038)",""
+"[P1868R2](https://wg21.link/P1868R2)","width: clarifying units of width and precision in std::format","2020-02 (Prague)","{{Complete}}","14","[#104203](https://github.com/llvm/llvm-project/issues/104203)",""
+"[P1956R1](https://wg21.link/P1956R1)","On the names of low-level bit manipulation functions","2020-02 (Prague)","{{Complete}}","12","[#104204](https://github.com/llvm/llvm-project/issues/104204)",""
+"[P1957R2](https://wg21.link/P1957R2)","Converting from `T*` to bool should be considered narrowing (re: US 212)","2020-02 (Prague)","{{Complete}}","18","[#104205](https://github.com/llvm/llvm-project/issues/104205)",""
+"[P1963R0](https://wg21.link/P1963R0)","P1963R0: Fixing US 313","2020-02 (Prague)","{{NothingToDo}}","","[#100039](https://github.com/llvm/llvm-project/issues/100039)",""
+"[P1964R2](https://wg21.link/P1964R2)","Wording for boolean-testable","2020-02 (Prague)","{{Complete}}","13","[#104206](https://github.com/llvm/llvm-project/issues/104206)",""
+"[P1970R2](https://wg21.link/P1970R2)","Consistency for size() functions: Add ranges::ssize","2020-02 (Prague)","{{Complete}}","13","[#104207](https://github.com/llvm/llvm-project/issues/104207)",""
+"[P1973R1](https://wg21.link/P1973R1)","Rename ""_default_init"" Functions, Rev1","2020-02 (Prague)","{{Complete}}","16","[#104208](https://github.com/llvm/llvm-project/issues/104208)","The feature-test macro was not set until LLVM 20."
+"[P1976R2](https://wg21.link/P1976R2)","Fixed-size span construction from dynamic range","2020-02 (Prague)","{{Complete}}","11","[#104209](https://github.com/llvm/llvm-project/issues/104209)",""
+"[P1981R0](https://wg21.link/P1981R0)","Rename leap to leap_second","2020-02 (Prague)","{{Complete}}","19","[#104210](https://github.com/llvm/llvm-project/issues/104210)",""
+"[P1982R0](https://wg21.link/P1982R0)","Rename link to time_zone_link","2020-02 (Prague)","{{Complete}}","19","[#104211](https://github.com/llvm/llvm-project/issues/104211)",""
+"[P1983R0](https://wg21.link/P1983R0)","Wording for GB301, US296, US292, US291, and US283","2020-02 (Prague)","{{Complete}}","15","[#104212](https://github.com/llvm/llvm-project/issues/104212)",""
+"[P1994R1](https://wg21.link/P1994R1)","elements_view needs its own sentinel","2020-02 (Prague)","{{Complete}}","16","[#104213](https://github.com/llvm/llvm-project/issues/104213)",""
+"[P2002R1](https://wg21.link/P2002R1)","Defaulted comparison specification cleanups","2020-02 (Prague)","{{Complete}}","7","[#100615](https://github.com/llvm/llvm-project/issues/100615)",""
+"[P2045R1](https://wg21.link/P2045R1)","P2045R1: Missing Mandates for the standard library","2020-02 (Prague)","{{NothingToDo}}","","[#100041](https://github.com/llvm/llvm-project/issues/100041)",""
+"[P2091R0](https://wg21.link/P2091R0)","Issues with range access CPOs","2020-02 (Prague)","{{Complete}}","15","[#104214](https://github.com/llvm/llvm-project/issues/104214)",""
+"[P2101R0](https://wg21.link/P2101R0)","P2101R0: 'Models' subsumes 'satisfies' (Wording for US298 and US300)","2020-02 (Prague)","{{NothingToDo}}","","[#100618](https://github.com/llvm/llvm-project/issues/100618)",""
+"[P2102R0](https://wg21.link/P2102R0)","Make 'implicit expression variations' more explicit (Wording for US185)","2020-02 (Prague)","{{Complete}}","15","[#100042](https://github.com/llvm/llvm-project/issues/100042)",""
+"[P2106R0](https://wg21.link/P2106R0)","Alternative wording for GB315 and GB316","2020-02 (Prague)","{{Complete}}","15","[#104215](https://github.com/llvm/llvm-project/issues/104215)",""
+"[P2116R0](https://wg21.link/P2116R0)","Remove tuple-like protocol support from fixed-extent span","2020-02 (Prague)","{{Complete}}","11","[#104216](https://github.com/llvm/llvm-project/issues/104216)",""
"","","","","","",""
-"`P2231R1 <https://wg21.link/P2231R1>`__","Missing constexpr in std::optional and std::variant","2021-06 (Virtual)","|Complete|","19","`#104217 <https://github.com/llvm/llvm-project/issues/104217>`__","Changes of feature-test macros are completed in LLVM 20."
-"`P2325R3 <https://wg21.link/P2325R3>`__","Views should not be required to be default constructible","2021-06 (Virtual)","|Complete|","16","`#104218 <https://github.com/llvm/llvm-project/issues/104218>`__",""
-"`P2210R2 <https://wg21.link/P2210R2>`__","Superior String Splitting","2021-06 (Virtual)","|Complete|","16","`#104219 <https://github.com/llvm/llvm-project/issues/104219>`__",""
-"`P2216R3 <https://wg21.link/P2216R3>`__","std::format improvements","2021-06 (Virtual)","|Complete|","15","`#104220 <https://github.com/llvm/llvm-project/issues/104220>`__",""
-"`P2281R1 <https://wg21.link/P2281R1>`__","Clarifying range adaptor objects","2021-06 (Virtual)","|Complete|","14","`#104221 <https://github.com/llvm/llvm-project/issues/104221>`__",""
-"`P2328R1 <https://wg21.link/P2328R1>`__","join_view should join all views of ranges","2021-06 (Virtual)","|Complete|","15","`#104222 <https://github.com/llvm/llvm-project/issues/104222>`__",""
-"`P2367R0 <https://wg21.link/P2367R0>`__","Remove misuses of list-initialization from Clause 24","2021-06 (Virtual)","|Complete|","15","`#104223 <https://github.com/llvm/llvm-project/issues/104223>`__",""
+"[P2231R1](https://wg21.link/P2231R1)","Missing constexpr in std::optional and std::variant","2021-06 (Virtual)","{{Complete}}","19","[#104217](https://github.com/llvm/llvm-project/issues/104217)","Changes of feature-test macros are completed in LLVM 20."
+"[P2325R3](https://wg21.link/P2325R3)","Views should not be required to be default constructible","2021-06 (Virtual)","{{Complete}}","16","[#104218](https://github.com/llvm/llvm-project/issues/104218)",""
+"[P2210R2](https://wg21.link/P2210R2)","Superior String Splitting","2021-06 (Virtual)","{{Complete}}","16","[#104219](https://github.com/llvm/llvm-project/issues/104219)",""
+"[P2216R3](https://wg21.link/P2216R3)","std::format improvements","2021-06 (Virtual)","{{Complete}}","15","[#104220](https://github.com/llvm/llvm-project/issues/104220)",""
+"[P2281R1](https://wg21.link/P2281R1)","Clarifying range adaptor objects","2021-06 (Virtual)","{{Complete}}","14","[#104221](https://github.com/llvm/llvm-project/issues/104221)",""
+"[P2328R1](https://wg21.link/P2328R1)","join_view should join all views of ranges","2021-06 (Virtual)","{{Complete}}","15","[#104222](https://github.com/llvm/llvm-project/issues/104222)",""
+"[P2367R0](https://wg21.link/P2367R0)","Remove misuses of list-initialization from Clause 24","2021-06 (Virtual)","{{Complete}}","15","[#104223](https://github.com/llvm/llvm-project/issues/104223)",""
"","","","","","",""
-"`P2372R3 <https://wg21.link/P2372R3>`__","Fixing locale handling in chrono formatters","2021-10 (Virtual)","|Complete|","21","`#100043 <https://github.com/llvm/llvm-project/issues/100043>`__",""
-"`P2415R2 <https://wg21.link/P2415R2>`__","What is a ``view``","2021-10 (Virtual)","|Complete|","14","`#104224 <https://github.com/llvm/llvm-project/issues/104224>`__",""
-"`P2418R2 <https://wg21.link/P2418R2>`__","Add support for ``std::generator``-like types to ``std::format``","2021-10 (Virtual)","|Complete|","15","`#104225 <https://github.com/llvm/llvm-project/issues/104225>`__",""
-"`P2432R1 <https://wg21.link/P2432R1>`__","Fix ``istream_view``","2021-10 (Virtual)","|Complete|","16","`#104226 <https://github.com/llvm/llvm-project/issues/104226>`__",""
+"[P2372R3](https://wg21.link/P2372R3)","Fixing locale handling in chrono formatters","2021-10 (Virtual)","{{Complete}}","21","[#100043](https://github.com/llvm/llvm-project/issues/100043)",""
+"[P2415R2](https://wg21.link/P2415R2)","What is a `view`","2021-10 (Virtual)","{{Complete}}","14","[#104224](https://github.com/llvm/llvm-project/issues/104224)",""
+"[P2418R2](https://wg21.link/P2418R2)","Add support for `std::generator`-like types to `std::format`","2021-10 (Virtual)","{{Complete}}","15","[#104225](https://github.com/llvm/llvm-project/issues/104225)",""
+"[P2432R1](https://wg21.link/P2432R1)","Fix `istream_view`","2021-10 (Virtual)","{{Complete}}","16","[#104226](https://github.com/llvm/llvm-project/issues/104226)",""
diff --git a/libcxx/docs/Status/Cxx23.md b/libcxx/docs/Status/Cxx23.md
index 9a9088fe02921..e9d4d1ccd37e2 100644
--- a/libcxx/docs/Status/Cxx23.md
+++ b/libcxx/docs/Status/Cxx23.md
@@ -2,13 +2,12 @@
# libc++ C++23 Status
-```{eval-rst}
-.. include:: ../Helpers/Styles.md
-```
+:::{include} ../Helpers/Styles.md
+:::
-```{contents}
+:::{contents}
:local: true
-```
+:::
## Overview
@@ -30,18 +29,24 @@ The groups that have contributed papers:
## Paper Status
```{eval-rst}
-.. csv-table::
- :file: Cxx23Papers.csv
- :header-rows: 1
- :widths: auto
+.. role:: notstarted
+.. role:: nothingtodo
+.. role:: inprogress
+.. role:: inreview
+.. role:: partial
+.. role:: complete
```
-## Library Working Group Issues Status
+:::{csv-table}
+:file: Cxx23Papers.csv
+:header-rows: 1
+:widths: auto
+:::
-```{eval-rst}
-.. csv-table::
- :file: Cxx23Issues.csv
- :header-rows: 1
- :widths: auto
-```
+## Library Working Group Issues Status
+:::{csv-table}
+:file: Cxx23Issues.csv
+:header-rows: 1
+:widths: auto
+:::
diff --git a/libcxx/docs/Status/Cxx23Issues.csv b/libcxx/docs/Status/Cxx23Issues.csv
index 68420a74f4878..0abef31b1953a 100644
--- a/libcxx/docs/Status/Cxx23Issues.csv
+++ b/libcxx/docs/Status/Cxx23Issues.csv
@@ -1,308 +1,308 @@
"Issue #","Issue Name","Meeting","Status","First released version","GitHub issue","Notes"
-"`LWG2839 <https://wg21.link/LWG2839>`__","Self-move-assignment of library types, again","2020-11 (Virtual)","|Nothing To Do|","","`#104255 <https://github.com/llvm/llvm-project/issues/104255>`__",""
-"`LWG3117 <https://wg21.link/LWG3117>`__","Missing ``packaged_task`` deduction guides","2020-11 (Virtual)","|Complete|","16","`#104256 <https://github.com/llvm/llvm-project/issues/104256>`__",""
-"`LWG3143 <https://wg21.link/LWG3143>`__","``monotonic_buffer_resource`` growth policy is unclear","2020-11 (Virtual)","|Complete|","16","`#104258 <https://github.com/llvm/llvm-project/issues/104258>`__",""
-"`LWG3195 <https://wg21.link/LWG3195>`__","What is the stored pointer value of an empty ``weak_ptr``?","2020-11 (Virtual)","|Nothing To Do|","","`#104259 <https://github.com/llvm/llvm-project/issues/104259>`__",""
-"`LWG3211 <https://wg21.link/LWG3211>`__","``std::tuple<>`` should be trivially constructible","2020-11 (Virtual)","|Complete|","9","`#104260 <https://github.com/llvm/llvm-project/issues/104260>`__",""
-"`LWG3236 <https://wg21.link/LWG3236>`__","Random access iterator requirements lack limiting relational operators domain to comparing those from the same range","2020-11 (Virtual)","|Nothing To Do|","","`#104261 <https://github.com/llvm/llvm-project/issues/104261>`__",""
-"`LWG3265 <https://wg21.link/LWG3265>`__","``move_iterator``'s conversions are more broken after P1207","2020-11 (Virtual)","|Nothing To Do|","","`#104262 <https://github.com/llvm/llvm-project/issues/104262>`__","Resolved by `LWG3435 <https://wg21.link/LWG3435>`__"
-"`LWG3435 <https://wg21.link/LWG3435>`__","``three_way_comparable_with<reverse_iterator<int*>, reverse_iterator<const int*>>``","2020-11 (Virtual)","|Complete|","13","`#104263 <https://github.com/llvm/llvm-project/issues/104263>`__",""
-"`LWG3432 <https://wg21.link/LWG3432>`__","Missing requirement for ``comparison_category``","2020-11 (Virtual)","|Complete|","16","`#104265 <https://github.com/llvm/llvm-project/issues/104265>`__",""
-"`LWG3447 <https://wg21.link/LWG3447>`__","Deduction guides for ``take_view`` and ``drop_view`` have different constraints","2020-11 (Virtual)","|Complete|","14","`#104266 <https://github.com/llvm/llvm-project/issues/104266>`__",""
-"`LWG3450 <https://wg21.link/LWG3450>`__","The const overloads of ``take_while_view::begin/end`` are underconstrained","2020-11 (Virtual)","|Complete|","16","`#104267 <https://github.com/llvm/llvm-project/issues/104267>`__",""
-"`LWG3464 <https://wg21.link/LWG3464>`__","``istream::gcount()`` can overflow","2020-11 (Virtual)","|Complete|","18","`#104269 <https://github.com/llvm/llvm-project/issues/104269>`__",""
-"`LWG2731 <https://wg21.link/LWG2731>`__","Existence of ``lock_guard<MutexTypes...>::mutex_type`` typedef unclear","2020-11 (Virtual)","|Complete|","5","`#104270 <https://github.com/llvm/llvm-project/issues/104270>`__",""
-"`LWG2743 <https://wg21.link/LWG2743>`__","P0083R3 ``node_handle`` private members missing ""exposition only"" comment","2020-11 (Virtual)","|Nothing To Do|","","`#104272 <https://github.com/llvm/llvm-project/issues/104272>`__",""
-"`LWG2820 <https://wg21.link/LWG2820>`__","Clarify ``<cstdint>`` macros","2020-11 (Virtual)","|Nothing To Do|","","`#104273 <https://github.com/llvm/llvm-project/issues/104273>`__",""
-"`LWG3120 <https://wg21.link/LWG3120>`__","Unclear behavior of ``monotonic_buffer_resource::release()``","2020-11 (Virtual)","|Complete|","16","`#104274 <https://github.com/llvm/llvm-project/issues/104274>`__",""
-"`LWG3170 <https://wg21.link/LWG3170>`__","``is_always_equal`` added to ``std::allocator`` makes the standard library treat derived types as always equal","2020-11 (Virtual)","|Complete|","18","`#104275 <https://github.com/llvm/llvm-project/issues/104275>`__",""
-"`LWG3036 <https://wg21.link/LWG3036>`__","``polymorphic_allocator::destroy`` is extraneous","2020-11 (Virtual)","|Nothing To Do|","","`#104276 <https://github.com/llvm/llvm-project/issues/104276>`__","Reverted by P2875R4"
-"`LWG3171 <https://wg21.link/LWG3171>`__","LWG2989 breaks ``directory_entry`` stream insertion","2020-11 (Virtual)","|Complete|","14","`#104277 <https://github.com/llvm/llvm-project/issues/104277>`__",""
-"`LWG3306 <https://wg21.link/LWG3306>`__","``ranges::advance`` violates its preconditions","2020-11 (Virtual)","|Complete|","14","`#104279 <https://github.com/llvm/llvm-project/issues/104279>`__",""
-"`LWG3403 <https://wg21.link/LWG3403>`__","Domain of ``ranges::ssize(E)`` doesn't ``match ranges::size(E)``","2020-11 (Virtual)","|Complete|","13","`#104280 <https://github.com/llvm/llvm-project/issues/104280>`__",""
-"`LWG3404 <https://wg21.link/LWG3404>`__","Finish removing subrange's conversions from pair-like","2020-11 (Virtual)","|Complete|","13","`#104282 <https://github.com/llvm/llvm-project/issues/104282>`__",""
-"`LWG3405 <https://wg21.link/LWG3405>`__","``common_view``'s converting constructor is bad, too","2020-11 (Virtual)","|Complete|","14","`#104283 <https://github.com/llvm/llvm-project/issues/104283>`__",""
-"`LWG3406 <https://wg21.link/LWG3406>`__","``elements_view::begin()`` and ``elements_view::end()`` have incompatible constraints","2020-11 (Virtual)","|Complete|","16","`#104284 <https://github.com/llvm/llvm-project/issues/104284>`__",""
-"`LWG3419 <https://wg21.link/LWG3419>`__","[algorithms.requirements]/15 doesn't reserve as many rights as it intends to","2020-11 (Virtual)","|Nothing To Do|","","`#104286 <https://github.com/llvm/llvm-project/issues/104286>`__",""
-"`LWG3420 <https://wg21.link/LWG3420>`__","cpp17-iterator should check that the type looks like an iterator first","2020-11 (Virtual)","|Complete|","14","`#104287 <https://github.com/llvm/llvm-project/issues/104287>`__",""
-"`LWG3421 <https://wg21.link/LWG3421>`__","Imperfect ADL emulation for boolean-testable","2020-11 (Virtual)","|Nothing To Do|","","`#104288 <https://github.com/llvm/llvm-project/issues/104288>`__",""
-"`LWG3425 <https://wg21.link/LWG3425>`__","``condition_variable_any`` fails to constrain its Lock parameters","2020-11 (Virtual)","|Nothing To Do|","","`#104289 <https://github.com/llvm/llvm-project/issues/104289>`__",""
-"`LWG3426 <https://wg21.link/LWG3426>`__","``operator<=>(const unique_ptr<T, D>&, nullptr_t)`` can't get no satisfaction","2020-11 (Virtual)","|Complete|","16","`#104290 <https://github.com/llvm/llvm-project/issues/104290>`__",""
-"`LWG3427 <https://wg21.link/LWG3427>`__","``operator<=>(const shared_ptr<T>&, nullptr_t)`` definition ill-formed","2020-11 (Virtual)","|Complete|","16","`#104291 <https://github.com/llvm/llvm-project/issues/104291>`__",""
-"`LWG3428 <https://wg21.link/LWG3428>`__","``single_view``'s in place constructor should be explicit","2020-11 (Virtual)","|Complete|","14","`#104292 <https://github.com/llvm/llvm-project/issues/104292>`__",""
-"`LWG3434 <https://wg21.link/LWG3434>`__","``ios_base`` never reclaims memory for iarray and parray","2020-11 (Virtual)","|Nothing To Do|","","`#104293 <https://github.com/llvm/llvm-project/issues/104293>`__",""
-"`LWG3437 <https://wg21.link/LWG3437>`__","``__cpp_lib_polymorphic_allocator`` is in the wrong header","2020-11 (Virtual)","|Complete|","14","`#104294 <https://github.com/llvm/llvm-project/issues/104294>`__",""
-"`LWG3446 <https://wg21.link/LWG3446>`__","``indirectly_readable_traits`` ambiguity for types with both ``value_type`` and ``element_type``","2020-11 (Virtual)","|Complete|","14","`#103998 <https://github.com/llvm/llvm-project/issues/103998>`__",""
-"`LWG3448 <https://wg21.link/LWG3448>`__","``transform_view``'s ``sentinel<false>`` not comparable with ``iterator<true>``","2020-11 (Virtual)","","","`#104295 <https://github.com/llvm/llvm-project/issues/104295>`__",""
-"`LWG3449 <https://wg21.link/LWG3449>`__","``take_view`` and ``take_while_view``'s ``sentinel<false>`` not comparable with their ``const iterator``","2020-11 (Virtual)","|Complete|","16","`#104296 <https://github.com/llvm/llvm-project/issues/104296>`__",""
-"`LWG3453 <https://wg21.link/LWG3453>`__","Generic code cannot call ``ranges::advance(i, s)``","2020-11 (Virtual)","|Nothing To Do|","","`#104297 <https://github.com/llvm/llvm-project/issues/104297>`__",""
-"`LWG3455 <https://wg21.link/LWG3455>`__","Incorrect Postconditions on ``unique_ptr`` move assignment","2020-11 (Virtual)","|Nothing To Do|","","`#104298 <https://github.com/llvm/llvm-project/issues/104298>`__",""
-"`LWG3460 <https://wg21.link/LWG3460>`__","Unimplementable ``noop_coroutine_handle`` guarantees","2020-11 (Virtual)","|Complete|","14","`#104299 <https://github.com/llvm/llvm-project/issues/104299>`__",""
-"`LWG3461 <https://wg21.link/LWG3461>`__","``convertible_to``'s description mishandles cv-qualified ``void``","2020-11 (Virtual)","|Nothing To Do|","","`#104300 <https://github.com/llvm/llvm-project/issues/104300>`__",""
-"`LWG3465 <https://wg21.link/LWG3465>`__","``compare_partial_order_fallback`` requires ``F < E``","2020-11 (Virtual)","|Complete|","14","`#104301 <https://github.com/llvm/llvm-project/issues/104301>`__",""
-"`LWG3466 <https://wg21.link/LWG3466>`__","Specify the requirements for ``promise``/``future``/``shared_future`` consistently","2020-11 (Virtual)","|Nothing To Do|","","`#104302 <https://github.com/llvm/llvm-project/issues/104302>`__",""
-"`LWG3467 <https://wg21.link/LWG3467>`__","``bool`` can't be an integer-like type","2020-11 (Virtual)","|Complete|","14","`#104303 <https://github.com/llvm/llvm-project/issues/104303>`__",""
-"`LWG3472 <https://wg21.link/LWG3472>`__","``counted_iterator`` is missing preconditions","2020-11 (Virtual)","|Complete|","14","`#104304 <https://github.com/llvm/llvm-project/issues/104304>`__",""
-"`LWG3473 <https://wg21.link/LWG3473>`__","Normative encouragement in non-normative note","2020-11 (Virtual)","|Complete|","15","`#104305 <https://github.com/llvm/llvm-project/issues/104305>`__",""
-"`LWG3474 <https://wg21.link/LWG3474>`__","Nesting ``join_views`` is broken because of CTAD","2020-11 (Virtual)","|Complete|","15","`#104306 <https://github.com/llvm/llvm-project/issues/104306>`__",""
-"`LWG3476 <https://wg21.link/LWG3476>`__","``thread`` and ``jthread`` constructors require that the parameters be move-constructible but never move construct the parameters","2020-11 (Virtual)","|Complete|","22","`#104307 <https://github.com/llvm/llvm-project/issues/104307>`__",""
-"`LWG3477 <https://wg21.link/LWG3477>`__","Simplify constraints for ``semiregular-box``","2020-11 (Virtual)","|Complete|","13","`#104308 <https://github.com/llvm/llvm-project/issues/104308>`__",""
-"`LWG3482 <https://wg21.link/LWG3482>`__","``drop_view``'s const begin should additionally require ``sized_range``","2020-11 (Virtual)","|Complete|","14","`#104309 <https://github.com/llvm/llvm-project/issues/104309>`__",""
-"`LWG3483 <https://wg21.link/LWG3483>`__","``transform_view::iterator``'s difference is overconstrained","2020-11 (Virtual)","|Complete|","14","`#104310 <https://github.com/llvm/llvm-project/issues/104310>`__",""
+"[LWG2839](https://wg21.link/LWG2839)","Self-move-assignment of library types, again","2020-11 (Virtual)","{{NothingToDo}}","","[#104255](https://github.com/llvm/llvm-project/issues/104255)",""
+"[LWG3117](https://wg21.link/LWG3117)","Missing `packaged_task` deduction guides","2020-11 (Virtual)","{{Complete}}","16","[#104256](https://github.com/llvm/llvm-project/issues/104256)",""
+"[LWG3143](https://wg21.link/LWG3143)","`monotonic_buffer_resource` growth policy is unclear","2020-11 (Virtual)","{{Complete}}","16","[#104258](https://github.com/llvm/llvm-project/issues/104258)",""
+"[LWG3195](https://wg21.link/LWG3195)","What is the stored pointer value of an empty `weak_ptr`?","2020-11 (Virtual)","{{NothingToDo}}","","[#104259](https://github.com/llvm/llvm-project/issues/104259)",""
+"[LWG3211](https://wg21.link/LWG3211)","`std::tuple<>` should be trivially constructible","2020-11 (Virtual)","{{Complete}}","9","[#104260](https://github.com/llvm/llvm-project/issues/104260)",""
+"[LWG3236](https://wg21.link/LWG3236)","Random access iterator requirements lack limiting relational operators domain to comparing those from the same range","2020-11 (Virtual)","{{NothingToDo}}","","[#104261](https://github.com/llvm/llvm-project/issues/104261)",""
+"[LWG3265](https://wg21.link/LWG3265)","`move_iterator`'s conversions are more broken after P1207","2020-11 (Virtual)","{{NothingToDo}}","","[#104262](https://github.com/llvm/llvm-project/issues/104262)","Resolved by [LWG3435](https://wg21.link/LWG3435)"
+"[LWG3435](https://wg21.link/LWG3435)","`three_way_comparable_with<reverse_iterator<int*>, reverse_iterator<const int*>>`","2020-11 (Virtual)","{{Complete}}","13","[#104263](https://github.com/llvm/llvm-project/issues/104263)",""
+"[LWG3432](https://wg21.link/LWG3432)","Missing requirement for `comparison_category`","2020-11 (Virtual)","{{Complete}}","16","[#104265](https://github.com/llvm/llvm-project/issues/104265)",""
+"[LWG3447](https://wg21.link/LWG3447)","Deduction guides for `take_view` and `drop_view` have different constraints","2020-11 (Virtual)","{{Complete}}","14","[#104266](https://github.com/llvm/llvm-project/issues/104266)",""
+"[LWG3450](https://wg21.link/LWG3450)","The const overloads of `take_while_view::begin/end` are underconstrained","2020-11 (Virtual)","{{Complete}}","16","[#104267](https://github.com/llvm/llvm-project/issues/104267)",""
+"[LWG3464](https://wg21.link/LWG3464)","`istream::gcount()` can overflow","2020-11 (Virtual)","{{Complete}}","18","[#104269](https://github.com/llvm/llvm-project/issues/104269)",""
+"[LWG2731](https://wg21.link/LWG2731)","Existence of `lock_guard<MutexTypes...>::mutex_type` typedef unclear","2020-11 (Virtual)","{{Complete}}","5","[#104270](https://github.com/llvm/llvm-project/issues/104270)",""
+"[LWG2743](https://wg21.link/LWG2743)","P0083R3 `node_handle` private members missing ""exposition only"" comment","2020-11 (Virtual)","{{NothingToDo}}","","[#104272](https://github.com/llvm/llvm-project/issues/104272)",""
+"[LWG2820](https://wg21.link/LWG2820)","Clarify `<cstdint>` macros","2020-11 (Virtual)","{{NothingToDo}}","","[#104273](https://github.com/llvm/llvm-project/issues/104273)",""
+"[LWG3120](https://wg21.link/LWG3120)","Unclear behavior of `monotonic_buffer_resource::release()`","2020-11 (Virtual)","{{Complete}}","16","[#104274](https://github.com/llvm/llvm-project/issues/104274)",""
+"[LWG3170](https://wg21.link/LWG3170)","`is_always_equal` added to `std::allocator` makes the standard library treat derived types as always equal","2020-11 (Virtual)","{{Complete}}","18","[#104275](https://github.com/llvm/llvm-project/issues/104275)",""
+"[LWG3036](https://wg21.link/LWG3036)","`polymorphic_allocator::destroy` is extraneous","2020-11 (Virtual)","{{NothingToDo}}","","[#104276](https://github.com/llvm/llvm-project/issues/104276)","Reverted by P2875R4"
+"[LWG3171](https://wg21.link/LWG3171)","LWG2989 breaks `directory_entry` stream insertion","2020-11 (Virtual)","{{Complete}}","14","[#104277](https://github.com/llvm/llvm-project/issues/104277)",""
+"[LWG3306](https://wg21.link/LWG3306)","`ranges::advance` violates its preconditions","2020-11 (Virtual)","{{Complete}}","14","[#104279](https://github.com/llvm/llvm-project/issues/104279)",""
+"[LWG3403](https://wg21.link/LWG3403)","Domain of `ranges::ssize(E)` doesn't `match ranges::size(E)`","2020-11 (Virtual)","{{Complete}}","13","[#104280](https://github.com/llvm/llvm-project/issues/104280)",""
+"[LWG3404](https://wg21.link/LWG3404)","Finish removing subrange's conversions from pair-like","2020-11 (Virtual)","{{Complete}}","13","[#104282](https://github.com/llvm/llvm-project/issues/104282)",""
+"[LWG3405](https://wg21.link/LWG3405)","`common_view`'s converting constructor is bad, too","2020-11 (Virtual)","{{Complete}}","14","[#104283](https://github.com/llvm/llvm-project/issues/104283)",""
+"[LWG3406](https://wg21.link/LWG3406)","`elements_view::begin()` and `elements_view::end()` have incompatible constraints","2020-11 (Virtual)","{{Complete}}","16","[#104284](https://github.com/llvm/llvm-project/issues/104284)",""
+"[LWG3419](https://wg21.link/LWG3419)","[algorithms.requirements]/15 doesn't reserve as many rights as it intends to","2020-11 (Virtual)","{{NothingToDo}}","","[#104286](https://github.com/llvm/llvm-project/issues/104286)",""
+"[LWG3420](https://wg21.link/LWG3420)","cpp17-iterator should check that the type looks like an iterator first","2020-11 (Virtual)","{{Complete}}","14","[#104287](https://github.com/llvm/llvm-project/issues/104287)",""
+"[LWG3421](https://wg21.link/LWG3421)","Imperfect ADL emulation for boolean-testable","2020-11 (Virtual)","{{NothingToDo}}","","[#104288](https://github.com/llvm/llvm-project/issues/104288)",""
+"[LWG3425](https://wg21.link/LWG3425)","`condition_variable_any` fails to constrain its Lock parameters","2020-11 (Virtual)","{{NothingToDo}}","","[#104289](https://github.com/llvm/llvm-project/issues/104289)",""
+"[LWG3426](https://wg21.link/LWG3426)","`operator<=>(const unique_ptr<T, D>&, nullptr_t)` can't get no satisfaction","2020-11 (Virtual)","{{Complete}}","16","[#104290](https://github.com/llvm/llvm-project/issues/104290)",""
+"[LWG3427](https://wg21.link/LWG3427)","`operator<=>(const shared_ptr<T>&, nullptr_t)` definition ill-formed","2020-11 (Virtual)","{{Complete}}","16","[#104291](https://github.com/llvm/llvm-project/issues/104291)",""
+"[LWG3428](https://wg21.link/LWG3428)","`single_view`'s in place constructor should be explicit","2020-11 (Virtual)","{{Complete}}","14","[#104292](https://github.com/llvm/llvm-project/issues/104292)",""
+"[LWG3434](https://wg21.link/LWG3434)","`ios_base` never reclaims memory for iarray and parray","2020-11 (Virtual)","{{NothingToDo}}","","[#104293](https://github.com/llvm/llvm-project/issues/104293)",""
+"[LWG3437](https://wg21.link/LWG3437)","`__cpp_lib_polymorphic_allocator` is in the wrong header","2020-11 (Virtual)","{{Complete}}","14","[#104294](https://github.com/llvm/llvm-project/issues/104294)",""
+"[LWG3446](https://wg21.link/LWG3446)","`indirectly_readable_traits` ambiguity for types with both `value_type` and `element_type`","2020-11 (Virtual)","{{Complete}}","14","[#103998](https://github.com/llvm/llvm-project/issues/103998)",""
+"[LWG3448](https://wg21.link/LWG3448)","`transform_view`'s `sentinel<false>` not comparable with `iterator<true>`","2020-11 (Virtual)","","","[#104295](https://github.com/llvm/llvm-project/issues/104295)",""
+"[LWG3449](https://wg21.link/LWG3449)","`take_view` and `take_while_view`'s `sentinel<false>` not comparable with their `const iterator`","2020-11 (Virtual)","{{Complete}}","16","[#104296](https://github.com/llvm/llvm-project/issues/104296)",""
+"[LWG3453](https://wg21.link/LWG3453)","Generic code cannot call `ranges::advance(i, s)`","2020-11 (Virtual)","{{NothingToDo}}","","[#104297](https://github.com/llvm/llvm-project/issues/104297)",""
+"[LWG3455](https://wg21.link/LWG3455)","Incorrect Postconditions on `unique_ptr` move assignment","2020-11 (Virtual)","{{NothingToDo}}","","[#104298](https://github.com/llvm/llvm-project/issues/104298)",""
+"[LWG3460](https://wg21.link/LWG3460)","Unimplementable `noop_coroutine_handle` guarantees","2020-11 (Virtual)","{{Complete}}","14","[#104299](https://github.com/llvm/llvm-project/issues/104299)",""
+"[LWG3461](https://wg21.link/LWG3461)","`convertible_to`'s description mishandles cv-qualified `void`","2020-11 (Virtual)","{{NothingToDo}}","","[#104300](https://github.com/llvm/llvm-project/issues/104300)",""
+"[LWG3465](https://wg21.link/LWG3465)","`compare_partial_order_fallback` requires `F < E`","2020-11 (Virtual)","{{Complete}}","14","[#104301](https://github.com/llvm/llvm-project/issues/104301)",""
+"[LWG3466](https://wg21.link/LWG3466)","Specify the requirements for `promise`/`future`/`shared_future` consistently","2020-11 (Virtual)","{{NothingToDo}}","","[#104302](https://github.com/llvm/llvm-project/issues/104302)",""
+"[LWG3467](https://wg21.link/LWG3467)","`bool` can't be an integer-like type","2020-11 (Virtual)","{{Complete}}","14","[#104303](https://github.com/llvm/llvm-project/issues/104303)",""
+"[LWG3472](https://wg21.link/LWG3472)","`counted_iterator` is missing preconditions","2020-11 (Virtual)","{{Complete}}","14","[#104304](https://github.com/llvm/llvm-project/issues/104304)",""
+"[LWG3473](https://wg21.link/LWG3473)","Normative encouragement in non-normative note","2020-11 (Virtual)","{{Complete}}","15","[#104305](https://github.com/llvm/llvm-project/issues/104305)",""
+"[LWG3474](https://wg21.link/LWG3474)","Nesting `join_views` is broken because of CTAD","2020-11 (Virtual)","{{Complete}}","15","[#104306](https://github.com/llvm/llvm-project/issues/104306)",""
+"[LWG3476](https://wg21.link/LWG3476)","`thread` and `jthread` constructors require that the parameters be move-constructible but never move construct the parameters","2020-11 (Virtual)","{{Complete}}","22","[#104307](https://github.com/llvm/llvm-project/issues/104307)",""
+"[LWG3477](https://wg21.link/LWG3477)","Simplify constraints for `semiregular-box`","2020-11 (Virtual)","{{Complete}}","13","[#104308](https://github.com/llvm/llvm-project/issues/104308)",""
+"[LWG3482](https://wg21.link/LWG3482)","`drop_view`'s const begin should additionally require `sized_range`","2020-11 (Virtual)","{{Complete}}","14","[#104309](https://github.com/llvm/llvm-project/issues/104309)",""
+"[LWG3483](https://wg21.link/LWG3483)","`transform_view::iterator`'s difference is overconstrained","2020-11 (Virtual)","{{Complete}}","14","[#104310](https://github.com/llvm/llvm-project/issues/104310)",""
"","","","","","",""
-"`LWG3391 <https://wg21.link/LWG3391>`__","Problems with ``counted_iterator``/``move_iterator::base() const &``","2021-02 (Virtual)","","","`#104311 <https://github.com/llvm/llvm-project/issues/104311>`__",""
-"`LWG3433 <https://wg21.link/LWG3433>`__","``subrange::advance(n)`` has UB when ``n < 0``","2021-02 (Virtual)","|Complete|","14","`#104312 <https://github.com/llvm/llvm-project/issues/104312>`__",""
-"`LWG3490 <https://wg21.link/LWG3490>`__","``ranges::drop_while_view::begin()`` is missing a precondition","2021-02 (Virtual)","|Nothing To Do|","","`#104313 <https://github.com/llvm/llvm-project/issues/104313>`__",""
-"`LWG3492 <https://wg21.link/LWG3492>`__","Minimal improvements to ``elements_view::iterator``","2021-02 (Virtual)","|Complete|","16","`#104314 <https://github.com/llvm/llvm-project/issues/104314>`__",""
-"`LWG3494 <https://wg21.link/LWG3494>`__","Allow ranges to be conditionally borrowed","2021-02 (Virtual)","|Nothing To Do|","","`#104315 <https://github.com/llvm/llvm-project/issues/104315>`__","Superseded by `P2017R1 <https://wg21.link/P2017R1>`__"
-"`LWG3495 <https://wg21.link/LWG3495>`__","``constexpr launder`` makes pointers to inactive members of unions usable","2021-02 (Virtual)","|Nothing To Do|","","`#104316 <https://github.com/llvm/llvm-project/issues/104316>`__",""
-"`LWG3500 <https://wg21.link/LWG3500>`__","``join_view::iterator::operator->()`` is bogus","2021-02 (Virtual)","|Complete|","14","`#104318 <https://github.com/llvm/llvm-project/issues/104318>`__",""
-"`LWG3502 <https://wg21.link/LWG3502>`__","``elements_view`` should not be allowed to return dangling reference","2021-02 (Virtual)","|Complete|","16","`#104319 <https://github.com/llvm/llvm-project/issues/104319>`__",""
-"`LWG3505 <https://wg21.link/LWG3505>`__","``split_view::outer-iterator::operator++`` misspecified","2021-02 (Virtual)","|Complete|","15","`#104320 <https://github.com/llvm/llvm-project/issues/104320>`__",""
+"[LWG3391](https://wg21.link/LWG3391)","Problems with `counted_iterator`/`move_iterator::base() const &`","2021-02 (Virtual)","","","[#104311](https://github.com/llvm/llvm-project/issues/104311)",""
+"[LWG3433](https://wg21.link/LWG3433)","`subrange::advance(n)` has UB when `n < 0`","2021-02 (Virtual)","{{Complete}}","14","[#104312](https://github.com/llvm/llvm-project/issues/104312)",""
+"[LWG3490](https://wg21.link/LWG3490)","`ranges::drop_while_view::begin()` is missing a precondition","2021-02 (Virtual)","{{NothingToDo}}","","[#104313](https://github.com/llvm/llvm-project/issues/104313)",""
+"[LWG3492](https://wg21.link/LWG3492)","Minimal improvements to `elements_view::iterator`","2021-02 (Virtual)","{{Complete}}","16","[#104314](https://github.com/llvm/llvm-project/issues/104314)",""
+"[LWG3494](https://wg21.link/LWG3494)","Allow ranges to be conditionally borrowed","2021-02 (Virtual)","{{NothingToDo}}","","[#104315](https://github.com/llvm/llvm-project/issues/104315)","Superseded by [P2017R1](https://wg21.link/P2017R1)"
+"[LWG3495](https://wg21.link/LWG3495)","`constexpr launder` makes pointers to inactive members of unions usable","2021-02 (Virtual)","{{NothingToDo}}","","[#104316](https://github.com/llvm/llvm-project/issues/104316)",""
+"[LWG3500](https://wg21.link/LWG3500)","`join_view::iterator::operator->()` is bogus","2021-02 (Virtual)","{{Complete}}","14","[#104318](https://github.com/llvm/llvm-project/issues/104318)",""
+"[LWG3502](https://wg21.link/LWG3502)","`elements_view` should not be allowed to return dangling reference","2021-02 (Virtual)","{{Complete}}","16","[#104319](https://github.com/llvm/llvm-project/issues/104319)",""
+"[LWG3505](https://wg21.link/LWG3505)","`split_view::outer-iterator::operator++` misspecified","2021-02 (Virtual)","{{Complete}}","15","[#104320](https://github.com/llvm/llvm-project/issues/104320)",""
"","","","","","",""
-"`LWG2774 <https://wg21.link/LWG2774>`__","``std::function`` construction vs assignment","2021-06 (Virtual)","","","`#104321 <https://github.com/llvm/llvm-project/issues/104321>`__",""
-"`LWG2818 <https://wg21.link/LWG2818>`__","``::std::`` everywhere rule needs tweaking","2021-06 (Virtual)","|Nothing To Do|","","`#104322 <https://github.com/llvm/llvm-project/issues/104322>`__",""
-"`LWG2997 <https://wg21.link/LWG2997>`__","LWG 491 and the specification of ``{forward_,}list::unique``","2021-06 (Virtual)","","","`#104323 <https://github.com/llvm/llvm-project/issues/104323>`__",""
-"`LWG3410 <https://wg21.link/LWG3410>`__","``lexicographical_compare_three_way`` is overspecified","2021-06 (Virtual)","|Complete|","17","`#104324 <https://github.com/llvm/llvm-project/issues/104324>`__",""
-"`LWG3430 <https://wg21.link/LWG3430>`__","``std::fstream`` & co. should be constructible from string_view","2021-06 (Virtual)","|Complete|","19","`#104325 <https://github.com/llvm/llvm-project/issues/104325>`__",""
-"`LWG3462 <https://wg21.link/LWG3462>`__","§[formatter.requirements]: Formatter requirements forbid use of ``fc.arg()``","2021-06 (Virtual)","|Nothing To Do|","","`#104326 <https://github.com/llvm/llvm-project/issues/104326>`__",""
-"`LWG3481 <https://wg21.link/LWG3481>`__","``viewable_range`` mishandles lvalue move-only views","2021-06 (Virtual)","|Nothing To Do|","","`#104327 <https://github.com/llvm/llvm-project/issues/104327>`__","Superseded by `P2415R2 <https://wg21.link/P2415R2>`__"
-"`LWG3506 <https://wg21.link/LWG3506>`__","Missing allocator-extended constructors for ``priority_queue``","2021-06 (Virtual)","|Complete|","14","`#104329 <https://github.com/llvm/llvm-project/issues/104329>`__",""
-"`LWG3517 <https://wg21.link/LWG3517>`__","``join_view::iterator``'s ``iter_swap`` is underconstrained","2021-06 (Virtual)","|Complete|","14","`#104330 <https://github.com/llvm/llvm-project/issues/104330>`__",""
-"`LWG3518 <https://wg21.link/LWG3518>`__","Exception requirements on char trait operations unclear","2021-06 (Virtual)","|Nothing To Do|","","`#104331 <https://github.com/llvm/llvm-project/issues/104331>`__",""
-"`LWG3519 <https://wg21.link/LWG3519>`__","Incomplete synopses for ``<random>`` classes","2021-06 (Virtual)","","","`#104332 <https://github.com/llvm/llvm-project/issues/104332>`__",""
-"`LWG3520 <https://wg21.link/LWG3520>`__","``iter_move`` and ``iter_swap`` are inconsistent for ``transform_view::iterator``","2021-06 (Virtual)","|Complete|","14","`#104333 <https://github.com/llvm/llvm-project/issues/104333>`__",""
-"`LWG3521 <https://wg21.link/LWG3521>`__","Overly strict requirements on ``qsort`` and ``bsearch``","2021-06 (Virtual)","|Nothing To Do|","","`#104334 <https://github.com/llvm/llvm-project/issues/104334>`__",""
-"`LWG3522 <https://wg21.link/LWG3522>`__","Missing requirement on ``InputIterator`` template parameter for ``priority_queue`` constructors","2021-06 (Virtual)","|Complete|","14","`#104335 <https://github.com/llvm/llvm-project/issues/104335>`__",""
-"`LWG3523 <https://wg21.link/LWG3523>`__","``iota_view::sentinel`` is not always ``iota_view``'s sentinel","2021-06 (Virtual)","|Complete|","17","`#104336 <https://github.com/llvm/llvm-project/issues/104336>`__",""
-"`LWG3526 <https://wg21.link/LWG3526>`__","Return types of ``uses_allocator_construction_args`` unspecified","2021-06 (Virtual)","","","`#104337 <https://github.com/llvm/llvm-project/issues/104337>`__",""
-"`LWG3527 <https://wg21.link/LWG3527>`__","``uses_allocator_construction_args`` handles rvalue pairs of rvalue references incorrectly","2021-06 (Virtual)","","","`#104338 <https://github.com/llvm/llvm-project/issues/104338>`__",""
-"`LWG3528 <https://wg21.link/LWG3528>`__","``make_from_tuple`` can perform (the equivalent of) a C-style cast","2021-06 (Virtual)","|Complete|","19","`#104339 <https://github.com/llvm/llvm-project/issues/104339>`__",""
-"`LWG3529 <https://wg21.link/LWG3529>`__","``priority_queue(first, last)`` should construct ``c`` with ``(first, last)``","2021-06 (Virtual)","|Complete|","14","`#104340 <https://github.com/llvm/llvm-project/issues/104340>`__",""
-"`LWG3530 <https://wg21.link/LWG3530>`__","``BUILTIN-PTR-MEOW`` should not opt the type out of syntactic checks","2021-06 (Virtual)","","","`#104341 <https://github.com/llvm/llvm-project/issues/104341>`__",""
-"`LWG3532 <https://wg21.link/LWG3532>`__","``split_view<V, P>::inner-iterator<true>::operator++(int)`` should depend on ``Base``","2021-06 (Virtual)","","","`#104342 <https://github.com/llvm/llvm-project/issues/104342>`__",""
-"`LWG3533 <https://wg21.link/LWG3533>`__","Make ``base() const &`` consistent across iterator wrappers that supports ``input_iterators``","2021-06 (Virtual)","|Complete|","14","`#104343 <https://github.com/llvm/llvm-project/issues/104343>`__",""
-"`LWG3536 <https://wg21.link/LWG3536>`__","Should ``chrono::from_stream()`` assign zero to duration for failure?","2021-06 (Virtual)","","","`#104344 <https://github.com/llvm/llvm-project/issues/104344>`__",""
-"`LWG3539 <https://wg21.link/LWG3539>`__","``format_to`` must not copy models of ``output_iterator<const charT&>``","2021-06 (Virtual)","|Complete|","14","`#104345 <https://github.com/llvm/llvm-project/issues/104345>`__",""
-"`LWG3540 <https://wg21.link/LWG3540>`__","§[format.arg] There should be no const in ``basic_format_arg(const T* p)``","2021-06 (Virtual)","|Complete|","14","`#104348 <https://github.com/llvm/llvm-project/issues/104348>`__",""
-"`LWG3541 <https://wg21.link/LWG3541>`__","``indirectly_readable_traits`` should be SFINAE-friendly for all types","2021-06 (Virtual)","|Complete|","14","`#104349 <https://github.com/llvm/llvm-project/issues/104349>`__",""
-"`LWG3542 <https://wg21.link/LWG3542>`__","``basic_format_arg`` mishandles ``basic_string_view`` with custom traits","2021-06 (Virtual)","|Complete|","14","`#104350 <https://github.com/llvm/llvm-project/issues/104350>`__",""
-"`LWG3543 <https://wg21.link/LWG3543>`__","Definition of when ``counted_iterators`` refer to the same sequence isn't quite right","2021-06 (Virtual)","|Nothing To Do|","","`#104351 <https://github.com/llvm/llvm-project/issues/104351>`__",""
-"`LWG3544 <https://wg21.link/LWG3544>`__","``format-arg-store::args`` is unintentionally not exposition-only","2021-06 (Virtual)","|Complete|","14","`#104352 <https://github.com/llvm/llvm-project/issues/104352>`__",""
-"`LWG3546 <https://wg21.link/LWG3546>`__","``common_iterator``'s postfix-proxy is not quite right","2021-06 (Virtual)","","","`#104353 <https://github.com/llvm/llvm-project/issues/104353>`__",""
-"`LWG3548 <https://wg21.link/LWG3548>`__","``shared_ptr`` construction from ``unique_ptr`` should move (not copy) the deleter","2021-06 (Virtual)","|Complete|","15","`#104354 <https://github.com/llvm/llvm-project/issues/104354>`__",""
-"`LWG3549 <https://wg21.link/LWG3549>`__","``view_interface`` is overspecified to derive from ``view_base``","2021-06 (Virtual)","|Complete|","14","`#104355 <https://github.com/llvm/llvm-project/issues/104355>`__",""
-"`LWG3551 <https://wg21.link/LWG3551>`__","``borrowed_{iterator,subrange}_t`` are overspecified","2021-06 (Virtual)","|Nothing To Do|","","`#104356 <https://github.com/llvm/llvm-project/issues/104356>`__",""
-"`LWG3552 <https://wg21.link/LWG3552>`__","Parallel specialized memory algorithms should require forward iterators","2021-06 (Virtual)","","","`#104357 <https://github.com/llvm/llvm-project/issues/104357>`__",""
-"`LWG3553 <https://wg21.link/LWG3553>`__","Useless constraint in ``split_view::outer-iterator::value_type::begin()``","2021-06 (Virtual)","","","`#104358 <https://github.com/llvm/llvm-project/issues/104358>`__",""
-"`LWG3555 <https://wg21.link/LWG3555>`__","``{transform,elements}_view::iterator::iterator_concept`` should consider const-qualification of the underlying range","2021-06 (Virtual)","","","`#104359 <https://github.com/llvm/llvm-project/issues/104359>`__",""
+"[LWG2774](https://wg21.link/LWG2774)","`std::function` construction vs assignment","2021-06 (Virtual)","","","[#104321](https://github.com/llvm/llvm-project/issues/104321)",""
+"[LWG2818](https://wg21.link/LWG2818)","`::std::` everywhere rule needs tweaking","2021-06 (Virtual)","{{NothingToDo}}","","[#104322](https://github.com/llvm/llvm-project/issues/104322)",""
+"[LWG2997](https://wg21.link/LWG2997)","LWG 491 and the specification of `{forward_,}list::unique`","2021-06 (Virtual)","","","[#104323](https://github.com/llvm/llvm-project/issues/104323)",""
+"[LWG3410](https://wg21.link/LWG3410)","`lexicographical_compare_three_way` is overspecified","2021-06 (Virtual)","{{Complete}}","17","[#104324](https://github.com/llvm/llvm-project/issues/104324)",""
+"[LWG3430](https://wg21.link/LWG3430)","`std::fstream` & co. should be constructible from string_view","2021-06 (Virtual)","{{Complete}}","19","[#104325](https://github.com/llvm/llvm-project/issues/104325)",""
+"[LWG3462](https://wg21.link/LWG3462)","§[formatter.requirements]: Formatter requirements forbid use of `fc.arg()`","2021-06 (Virtual)","{{NothingToDo}}","","[#104326](https://github.com/llvm/llvm-project/issues/104326)",""
+"[LWG3481](https://wg21.link/LWG3481)","`viewable_range` mishandles lvalue move-only views","2021-06 (Virtual)","{{NothingToDo}}","","[#104327](https://github.com/llvm/llvm-project/issues/104327)","Superseded by [P2415R2](https://wg21.link/P2415R2)"
+"[LWG3506](https://wg21.link/LWG3506)","Missing allocator-extended constructors for `priority_queue`","2021-06 (Virtual)","{{Complete}}","14","[#104329](https://github.com/llvm/llvm-project/issues/104329)",""
+"[LWG3517](https://wg21.link/LWG3517)","`join_view::iterator`'s `iter_swap` is underconstrained","2021-06 (Virtual)","{{Complete}}","14","[#104330](https://github.com/llvm/llvm-project/issues/104330)",""
+"[LWG3518](https://wg21.link/LWG3518)","Exception requirements on char trait operations unclear","2021-06 (Virtual)","{{NothingToDo}}","","[#104331](https://github.com/llvm/llvm-project/issues/104331)",""
+"[LWG3519](https://wg21.link/LWG3519)","Incomplete synopses for `<random>` classes","2021-06 (Virtual)","","","[#104332](https://github.com/llvm/llvm-project/issues/104332)",""
+"[LWG3520](https://wg21.link/LWG3520)","`iter_move` and `iter_swap` are inconsistent for `transform_view::iterator`","2021-06 (Virtual)","{{Complete}}","14","[#104333](https://github.com/llvm/llvm-project/issues/104333)",""
+"[LWG3521](https://wg21.link/LWG3521)","Overly strict requirements on `qsort` and `bsearch`","2021-06 (Virtual)","{{NothingToDo}}","","[#104334](https://github.com/llvm/llvm-project/issues/104334)",""
+"[LWG3522](https://wg21.link/LWG3522)","Missing requirement on `InputIterator` template parameter for `priority_queue` constructors","2021-06 (Virtual)","{{Complete}}","14","[#104335](https://github.com/llvm/llvm-project/issues/104335)",""
+"[LWG3523](https://wg21.link/LWG3523)","`iota_view::sentinel` is not always `iota_view`'s sentinel","2021-06 (Virtual)","{{Complete}}","17","[#104336](https://github.com/llvm/llvm-project/issues/104336)",""
+"[LWG3526](https://wg21.link/LWG3526)","Return types of `uses_allocator_construction_args` unspecified","2021-06 (Virtual)","","","[#104337](https://github.com/llvm/llvm-project/issues/104337)",""
+"[LWG3527](https://wg21.link/LWG3527)","`uses_allocator_construction_args` handles rvalue pairs of rvalue references incorrectly","2021-06 (Virtual)","","","[#104338](https://github.com/llvm/llvm-project/issues/104338)",""
+"[LWG3528](https://wg21.link/LWG3528)","`make_from_tuple` can perform (the equivalent of) a C-style cast","2021-06 (Virtual)","{{Complete}}","19","[#104339](https://github.com/llvm/llvm-project/issues/104339)",""
+"[LWG3529](https://wg21.link/LWG3529)","`priority_queue(first, last)` should construct `c` with `(first, last)`","2021-06 (Virtual)","{{Complete}}","14","[#104340](https://github.com/llvm/llvm-project/issues/104340)",""
+"[LWG3530](https://wg21.link/LWG3530)","`BUILTIN-PTR-MEOW` should not opt the type out of syntactic checks","2021-06 (Virtual)","","","[#104341](https://github.com/llvm/llvm-project/issues/104341)",""
+"[LWG3532](https://wg21.link/LWG3532)","`split_view<V, P>::inner-iterator<true>::operator++(int)` should depend on `Base`","2021-06 (Virtual)","","","[#104342](https://github.com/llvm/llvm-project/issues/104342)",""
+"[LWG3533](https://wg21.link/LWG3533)","Make `base() const &` consistent across iterator wrappers that supports `input_iterators`","2021-06 (Virtual)","{{Complete}}","14","[#104343](https://github.com/llvm/llvm-project/issues/104343)",""
+"[LWG3536](https://wg21.link/LWG3536)","Should `chrono::from_stream()` assign zero to duration for failure?","2021-06 (Virtual)","","","[#104344](https://github.com/llvm/llvm-project/issues/104344)",""
+"[LWG3539](https://wg21.link/LWG3539)","`format_to` must not copy models of `output_iterator<const charT&>`","2021-06 (Virtual)","{{Complete}}","14","[#104345](https://github.com/llvm/llvm-project/issues/104345)",""
+"[LWG3540](https://wg21.link/LWG3540)","§[format.arg] There should be no const in `basic_format_arg(const T* p)`","2021-06 (Virtual)","{{Complete}}","14","[#104348](https://github.com/llvm/llvm-project/issues/104348)",""
+"[LWG3541](https://wg21.link/LWG3541)","`indirectly_readable_traits` should be SFINAE-friendly for all types","2021-06 (Virtual)","{{Complete}}","14","[#104349](https://github.com/llvm/llvm-project/issues/104349)",""
+"[LWG3542](https://wg21.link/LWG3542)","`basic_format_arg` mishandles `basic_string_view` with custom traits","2021-06 (Virtual)","{{Complete}}","14","[#104350](https://github.com/llvm/llvm-project/issues/104350)",""
+"[LWG3543](https://wg21.link/LWG3543)","Definition of when `counted_iterators` refer to the same sequence isn't quite right","2021-06 (Virtual)","{{NothingToDo}}","","[#104351](https://github.com/llvm/llvm-project/issues/104351)",""
+"[LWG3544](https://wg21.link/LWG3544)","`format-arg-store::args` is unintentionally not exposition-only","2021-06 (Virtual)","{{Complete}}","14","[#104352](https://github.com/llvm/llvm-project/issues/104352)",""
+"[LWG3546](https://wg21.link/LWG3546)","`common_iterator`'s postfix-proxy is not quite right","2021-06 (Virtual)","","","[#104353](https://github.com/llvm/llvm-project/issues/104353)",""
+"[LWG3548](https://wg21.link/LWG3548)","`shared_ptr` construction from `unique_ptr` should move (not copy) the deleter","2021-06 (Virtual)","{{Complete}}","15","[#104354](https://github.com/llvm/llvm-project/issues/104354)",""
+"[LWG3549](https://wg21.link/LWG3549)","`view_interface` is overspecified to derive from `view_base`","2021-06 (Virtual)","{{Complete}}","14","[#104355](https://github.com/llvm/llvm-project/issues/104355)",""
+"[LWG3551](https://wg21.link/LWG3551)","`borrowed_{iterator,subrange}_t` are overspecified","2021-06 (Virtual)","{{NothingToDo}}","","[#104356](https://github.com/llvm/llvm-project/issues/104356)",""
+"[LWG3552](https://wg21.link/LWG3552)","Parallel specialized memory algorithms should require forward iterators","2021-06 (Virtual)","","","[#104357](https://github.com/llvm/llvm-project/issues/104357)",""
+"[LWG3553](https://wg21.link/LWG3553)","Useless constraint in `split_view::outer-iterator::value_type::begin()`","2021-06 (Virtual)","","","[#104358](https://github.com/llvm/llvm-project/issues/104358)",""
+"[LWG3555](https://wg21.link/LWG3555)","`{transform,elements}_view::iterator::iterator_concept` should consider const-qualification of the underlying range","2021-06 (Virtual)","","","[#104359](https://github.com/llvm/llvm-project/issues/104359)",""
"","","","","","",""
-"`LWG2191 <https://wg21.link/LWG2191>`__","Incorrect specification of ``match_results(match_results&&)``","2021-10 (Virtual)","|Nothing To Do|","","`#104360 <https://github.com/llvm/llvm-project/issues/104360>`__",""
-"`LWG2381 <https://wg21.link/LWG2381>`__","Inconsistency in parsing floating point numbers","2021-10 (Virtual)","|Complete|","19","`#104361 <https://github.com/llvm/llvm-project/issues/104361>`__",""
-"`LWG2762 <https://wg21.link/LWG2762>`__","``unique_ptr operator*()`` should be ``noexcept``","2021-10 (Virtual)","|Complete|","19","`#104362 <https://github.com/llvm/llvm-project/issues/104362>`__",""
-"`LWG3121 <https://wg21.link/LWG3121>`__","``tuple`` constructor constraints for ``UTypes&&...`` overloads","2021-10 (Virtual)","","","`#104364 <https://github.com/llvm/llvm-project/issues/104364>`__",""
-"`LWG3123 <https://wg21.link/LWG3123>`__","``duration`` constructor from representation shouldn't be effectively non-throwing","2021-10 (Virtual)","","","`#104365 <https://github.com/llvm/llvm-project/issues/104365>`__",""
-"`LWG3146 <https://wg21.link/LWG3146>`__","Excessive unwrapping in ``std::ref/cref``","2021-10 (Virtual)","|Complete|","14","`#104366 <https://github.com/llvm/llvm-project/issues/104366>`__",""
-"`LWG3152 <https://wg21.link/LWG3152>`__","``common_type`` and ``common_reference`` have flaws in common","2021-10 (Virtual)","","","`#104367 <https://github.com/llvm/llvm-project/issues/104367>`__",""
-"`LWG3293 <https://wg21.link/LWG3293>`__","``move_iterator operator+()`` has incorrect constraints","2021-10 (Virtual)","|Complete|","15","`#104368 <https://github.com/llvm/llvm-project/issues/104368>`__",""
-"`LWG3361 <https://wg21.link/LWG3361>`__","``safe_range<SomeRange&>`` case","2021-10 (Virtual)","|Nothing To Do|","","`#104369 <https://github.com/llvm/llvm-project/issues/104369>`__",""
-"`LWG3392 <https://wg21.link/LWG3392>`__","``ranges::distance()`` cannot be used on a move-only iterator with a sized sentinel","2021-10 (Virtual)","|Complete|","14","`#104370 <https://github.com/llvm/llvm-project/issues/104370>`__",""
-"`LWG3407 <https://wg21.link/LWG3407>`__","Some problems with the wording changes of P1739R4","2021-10 (Virtual)","|Complete|","15","`#104371 <https://github.com/llvm/llvm-project/issues/104371>`__",""
-"`LWG3422 <https://wg21.link/LWG3422>`__","Issues of ``seed_seq``'s constructors","2021-10 (Virtual)","|Complete|","14","`#104372 <https://github.com/llvm/llvm-project/issues/104372>`__",""
-"`LWG3470 <https://wg21.link/LWG3470>`__","``convertible-to-non-slicing`` seems to reject valid case","2021-10 (Virtual)","|Complete|","14","`#104373 <https://github.com/llvm/llvm-project/issues/104373>`__",""
-"`LWG3480 <https://wg21.link/LWG3480>`__","``directory_iterator`` and ``recursive_directory_iterator`` are not C++20 ranges","2021-10 (Virtual)","|Complete|","14","`#104374 <https://github.com/llvm/llvm-project/issues/104374>`__",""
-"`LWG3498 <https://wg21.link/LWG3498>`__","Inconsistent ``noexcept``-specifiers for ``basic_syncbuf``","2021-10 (Virtual)","|Complete|","18","`#104375 <https://github.com/llvm/llvm-project/issues/104375>`__",""
-"`LWG3535 <https://wg21.link/LWG3535>`__","``join_view::iterator::iterator_category`` and ``::iterator_concept`` lie","2021-10 (Virtual)","|Complete|","15","`#104376 <https://github.com/llvm/llvm-project/issues/104376>`__",""
-"`LWG3554 <https://wg21.link/LWG3554>`__","``chrono::parse`` needs ``const charT*`` and ``basic_string_view<charT>`` overloads","2021-10 (Virtual)","","","`#104377 <https://github.com/llvm/llvm-project/issues/104377>`__",""
-"`LWG3557 <https://wg21.link/LWG3557>`__","The ``static_cast`` expression in ``convertible_to`` has the wrong operand","2021-10 (Virtual)","|Complete|","14","`#104378 <https://github.com/llvm/llvm-project/issues/104378>`__",""
-"`LWG3559 <https://wg21.link/LWG3559>`__","Semantic requirements of ``sized_range`` is circular","2021-10 (Virtual)","|Nothing To Do|","","`#104379 <https://github.com/llvm/llvm-project/issues/104379>`__",""
-"`LWG3560 <https://wg21.link/LWG3560>`__","``ranges::equal`` and ``ranges::is_permutation`` should short-circuit for ``sized_ranges``","2021-10 (Virtual)","","","`#104380 <https://github.com/llvm/llvm-project/issues/104380>`__",""
-"`LWG3561 <https://wg21.link/LWG3561>`__","Issue with internal counter in ``discard_block_engine``","2021-10 (Virtual)","","","`#104381 <https://github.com/llvm/llvm-project/issues/104381>`__",""
-"`LWG3563 <https://wg21.link/LWG3563>`__","``keys_view`` example is broken","2021-10 (Virtual)","","","`#104382 <https://github.com/llvm/llvm-project/issues/104382>`__",""
-"`LWG3566 <https://wg21.link/LWG3566>`__","Constraint recursion for ``operator<=>(optional<T>, U)``","2021-10 (Virtual)","|Complete|","17","`#104383 <https://github.com/llvm/llvm-project/issues/104383>`__",""
-"`LWG3567 <https://wg21.link/LWG3567>`__","Formatting move-only iterators take two","2021-10 (Virtual)","|Complete|","16","`#104384 <https://github.com/llvm/llvm-project/issues/104384>`__",""
-"`LWG3568 <https://wg21.link/LWG3568>`__","``basic_istream_view`` needs to initialize ``value_``","2021-10 (Virtual)","|Complete|","16","`#104385 <https://github.com/llvm/llvm-project/issues/104385>`__",""
-"`LWG3570 <https://wg21.link/LWG3570>`__","``basic_osyncstream::emit`` should be an unformatted output function","2021-10 (Virtual)","|Complete|","18","`#104386 <https://github.com/llvm/llvm-project/issues/104386>`__",""
-"`LWG3571 <https://wg21.link/LWG3571>`__","``flush_emit`` should set ``badbit`` if the ``emit`` call fails","2021-10 (Virtual)","","","`#104387 <https://github.com/llvm/llvm-project/issues/104387>`__",""
-"`LWG3572 <https://wg21.link/LWG3572>`__","``copyable-box`` should be fully ``constexpr``","2021-10 (Virtual)","|Complete|","14","`#104388 <https://github.com/llvm/llvm-project/issues/104388>`__",""
-"`LWG3573 <https://wg21.link/LWG3573>`__","Missing Throws element for ``basic_string_view(It begin, End end)``","2021-10 (Virtual)","|Complete|","14","`#104389 <https://github.com/llvm/llvm-project/issues/104389>`__",""
-"`LWG3574 <https://wg21.link/LWG3574>`__","``common_iterator`` should be completely ``constexpr``-able","2021-10 (Virtual)","|Complete|","14","`#104931 <https://github.com/llvm/llvm-project/issues/104931>`__",""
-"`LWG3580 <https://wg21.link/LWG3580>`__","``iota_view``'s ``iterator``'s binary ``operator+`` should be improved","2021-10 (Virtual)","|Complete|","14","`#104932 <https://github.com/llvm/llvm-project/issues/104932>`__",""
-"`LWG3581 <https://wg21.link/LWG3581>`__","The range constructor makes ``basic_string_view`` not trivially move constructible","2021-10 (Virtual)","|Complete|","14","`#104933 <https://github.com/llvm/llvm-project/issues/104933>`__",""
-"`LWG3585 <https://wg21.link/LWG3585>`__","``variant`` converting assignment with immovable alternative","2021-10 (Virtual)","|Complete|","4","`#104934 <https://github.com/llvm/llvm-project/issues/104934>`__",""
-"`LWG3589 <https://wg21.link/LWG3589>`__","The ``const`` lvalue reference overload of ``get`` for ``subrange`` does not constrain ``I`` to be ``copyable`` when ``N == 0``","2021-10 (Virtual)","|Complete|","14","`#104935 <https://github.com/llvm/llvm-project/issues/104935>`__",""
-"`LWG3590 <https://wg21.link/LWG3590>`__","``split_view::base() const &`` is overconstrained","2021-10 (Virtual)","|Complete|","16","`#104936 <https://github.com/llvm/llvm-project/issues/104936>`__",""
-"`LWG3591 <https://wg21.link/LWG3591>`__","``lazy_split_view<input_view>::inner-iterator::base() &&`` invalidates outer iterators","2021-10 (Virtual)","","","`#104937 <https://github.com/llvm/llvm-project/issues/104937>`__",""
-"`LWG3592 <https://wg21.link/LWG3592>`__","``lazy_split_view`` needs to check the simpleness of Pattern","2021-10 (Virtual)","","","`#104938 <https://github.com/llvm/llvm-project/issues/104938>`__",""
-"`LWG3593 <https://wg21.link/LWG3593>`__","Several iterators' ``base() const &`` and ``lazy_split_view::outer-iterator::value_type::end()`` missing ``noexcept``","2021-10 (Virtual)","","","`#104939 <https://github.com/llvm/llvm-project/issues/104939>`__",""
-"`LWG3595 <https://wg21.link/LWG3595>`__","Exposition-only classes proxy and postfix-proxy for ``common_iterator`` should be fully ``constexpr``","2021-10 (Virtual)","|Complete|","14","`#104940 <https://github.com/llvm/llvm-project/issues/104940>`__",""
+"[LWG2191](https://wg21.link/LWG2191)","Incorrect specification of `match_results(match_results&&)`","2021-10 (Virtual)","{{NothingToDo}}","","[#104360](https://github.com/llvm/llvm-project/issues/104360)",""
+"[LWG2381](https://wg21.link/LWG2381)","Inconsistency in parsing floating point numbers","2021-10 (Virtual)","{{Complete}}","19","[#104361](https://github.com/llvm/llvm-project/issues/104361)",""
+"[LWG2762](https://wg21.link/LWG2762)","`unique_ptr operator*()` should be `noexcept`","2021-10 (Virtual)","{{Complete}}","19","[#104362](https://github.com/llvm/llvm-project/issues/104362)",""
+"[LWG3121](https://wg21.link/LWG3121)","`tuple` constructor constraints for `UTypes&&...` overloads","2021-10 (Virtual)","","","[#104364](https://github.com/llvm/llvm-project/issues/104364)",""
+"[LWG3123](https://wg21.link/LWG3123)","`duration` constructor from representation shouldn't be effectively non-throwing","2021-10 (Virtual)","","","[#104365](https://github.com/llvm/llvm-project/issues/104365)",""
+"[LWG3146](https://wg21.link/LWG3146)","Excessive unwrapping in `std::ref/cref`","2021-10 (Virtual)","{{Complete}}","14","[#104366](https://github.com/llvm/llvm-project/issues/104366)",""
+"[LWG3152](https://wg21.link/LWG3152)","`common_type` and `common_reference` have flaws in common","2021-10 (Virtual)","","","[#104367](https://github.com/llvm/llvm-project/issues/104367)",""
+"[LWG3293](https://wg21.link/LWG3293)","`move_iterator operator+()` has incorrect constraints","2021-10 (Virtual)","{{Complete}}","15","[#104368](https://github.com/llvm/llvm-project/issues/104368)",""
+"[LWG3361](https://wg21.link/LWG3361)","`safe_range<SomeRange&>` case","2021-10 (Virtual)","{{NothingToDo}}","","[#104369](https://github.com/llvm/llvm-project/issues/104369)",""
+"[LWG3392](https://wg21.link/LWG3392)","`ranges::distance()` cannot be used on a move-only iterator with a sized sentinel","2021-10 (Virtual)","{{Complete}}","14","[#104370](https://github.com/llvm/llvm-project/issues/104370)",""
+"[LWG3407](https://wg21.link/LWG3407)","Some problems with the wording changes of P1739R4","2021-10 (Virtual)","{{Complete}}","15","[#104371](https://github.com/llvm/llvm-project/issues/104371)",""
+"[LWG3422](https://wg21.link/LWG3422)","Issues of `seed_seq`'s constructors","2021-10 (Virtual)","{{Complete}}","14","[#104372](https://github.com/llvm/llvm-project/issues/104372)",""
+"[LWG3470](https://wg21.link/LWG3470)","`convertible-to-non-slicing` seems to reject valid case","2021-10 (Virtual)","{{Complete}}","14","[#104373](https://github.com/llvm/llvm-project/issues/104373)",""
+"[LWG3480](https://wg21.link/LWG3480)","`directory_iterator` and `recursive_directory_iterator` are not C++20 ranges","2021-10 (Virtual)","{{Complete}}","14","[#104374](https://github.com/llvm/llvm-project/issues/104374)",""
+"[LWG3498](https://wg21.link/LWG3498)","Inconsistent `noexcept`-specifiers for `basic_syncbuf`","2021-10 (Virtual)","{{Complete}}","18","[#104375](https://github.com/llvm/llvm-project/issues/104375)",""
+"[LWG3535](https://wg21.link/LWG3535)","`join_view::iterator::iterator_category` and `::iterator_concept` lie","2021-10 (Virtual)","{{Complete}}","15","[#104376](https://github.com/llvm/llvm-project/issues/104376)",""
+"[LWG3554](https://wg21.link/LWG3554)","`chrono::parse` needs `const charT*` and `basic_string_view<charT>` overloads","2021-10 (Virtual)","","","[#104377](https://github.com/llvm/llvm-project/issues/104377)",""
+"[LWG3557](https://wg21.link/LWG3557)","The `static_cast` expression in `convertible_to` has the wrong operand","2021-10 (Virtual)","{{Complete}}","14","[#104378](https://github.com/llvm/llvm-project/issues/104378)",""
+"[LWG3559](https://wg21.link/LWG3559)","Semantic requirements of `sized_range` is circular","2021-10 (Virtual)","{{NothingToDo}}","","[#104379](https://github.com/llvm/llvm-project/issues/104379)",""
+"[LWG3560](https://wg21.link/LWG3560)","`ranges::equal` and `ranges::is_permutation` should short-circuit for `sized_ranges`","2021-10 (Virtual)","","","[#104380](https://github.com/llvm/llvm-project/issues/104380)",""
+"[LWG3561](https://wg21.link/LWG3561)","Issue with internal counter in `discard_block_engine`","2021-10 (Virtual)","","","[#104381](https://github.com/llvm/llvm-project/issues/104381)",""
+"[LWG3563](https://wg21.link/LWG3563)","`keys_view` example is broken","2021-10 (Virtual)","","","[#104382](https://github.com/llvm/llvm-project/issues/104382)",""
+"[LWG3566](https://wg21.link/LWG3566)","Constraint recursion for `operator<=>(optional<T>, U)`","2021-10 (Virtual)","{{Complete}}","17","[#104383](https://github.com/llvm/llvm-project/issues/104383)",""
+"[LWG3567](https://wg21.link/LWG3567)","Formatting move-only iterators take two","2021-10 (Virtual)","{{Complete}}","16","[#104384](https://github.com/llvm/llvm-project/issues/104384)",""
+"[LWG3568](https://wg21.link/LWG3568)","`basic_istream_view` needs to initialize `value_`","2021-10 (Virtual)","{{Complete}}","16","[#104385](https://github.com/llvm/llvm-project/issues/104385)",""
+"[LWG3570](https://wg21.link/LWG3570)","`basic_osyncstream::emit` should be an unformatted output function","2021-10 (Virtual)","{{Complete}}","18","[#104386](https://github.com/llvm/llvm-project/issues/104386)",""
+"[LWG3571](https://wg21.link/LWG3571)","`flush_emit` should set `badbit` if the `emit` call fails","2021-10 (Virtual)","","","[#104387](https://github.com/llvm/llvm-project/issues/104387)",""
+"[LWG3572](https://wg21.link/LWG3572)","`copyable-box` should be fully `constexpr`","2021-10 (Virtual)","{{Complete}}","14","[#104388](https://github.com/llvm/llvm-project/issues/104388)",""
+"[LWG3573](https://wg21.link/LWG3573)","Missing Throws element for `basic_string_view(It begin, End end)`","2021-10 (Virtual)","{{Complete}}","14","[#104389](https://github.com/llvm/llvm-project/issues/104389)",""
+"[LWG3574](https://wg21.link/LWG3574)","`common_iterator` should be completely `constexpr`-able","2021-10 (Virtual)","{{Complete}}","14","[#104931](https://github.com/llvm/llvm-project/issues/104931)",""
+"[LWG3580](https://wg21.link/LWG3580)","`iota_view`'s `iterator`'s binary `operator+` should be improved","2021-10 (Virtual)","{{Complete}}","14","[#104932](https://github.com/llvm/llvm-project/issues/104932)",""
+"[LWG3581](https://wg21.link/LWG3581)","The range constructor makes `basic_string_view` not trivially move constructible","2021-10 (Virtual)","{{Complete}}","14","[#104933](https://github.com/llvm/llvm-project/issues/104933)",""
+"[LWG3585](https://wg21.link/LWG3585)","`variant` converting assignment with immovable alternative","2021-10 (Virtual)","{{Complete}}","4","[#104934](https://github.com/llvm/llvm-project/issues/104934)",""
+"[LWG3589](https://wg21.link/LWG3589)","The `const` lvalue reference overload of `get` for `subrange` does not constrain `I` to be `copyable` when `N == 0`","2021-10 (Virtual)","{{Complete}}","14","[#104935](https://github.com/llvm/llvm-project/issues/104935)",""
+"[LWG3590](https://wg21.link/LWG3590)","`split_view::base() const &` is overconstrained","2021-10 (Virtual)","{{Complete}}","16","[#104936](https://github.com/llvm/llvm-project/issues/104936)",""
+"[LWG3591](https://wg21.link/LWG3591)","`lazy_split_view<input_view>::inner-iterator::base() &&` invalidates outer iterators","2021-10 (Virtual)","","","[#104937](https://github.com/llvm/llvm-project/issues/104937)",""
+"[LWG3592](https://wg21.link/LWG3592)","`lazy_split_view` needs to check the simpleness of Pattern","2021-10 (Virtual)","","","[#104938](https://github.com/llvm/llvm-project/issues/104938)",""
+"[LWG3593](https://wg21.link/LWG3593)","Several iterators' `base() const &` and `lazy_split_view::outer-iterator::value_type::end()` missing `noexcept`","2021-10 (Virtual)","","","[#104939](https://github.com/llvm/llvm-project/issues/104939)",""
+"[LWG3595](https://wg21.link/LWG3595)","Exposition-only classes proxy and postfix-proxy for `common_iterator` should be fully `constexpr`","2021-10 (Virtual)","{{Complete}}","14","[#104940](https://github.com/llvm/llvm-project/issues/104940)",""
"","","","","","",""
-"`LWG3088 <https://wg21.link/LWG3088>`__","``forward_list::merge`` behaviour unclear when passed ``*this``","2022-02 (Virtual)","|Complete|","Yes","`#104942 <https://github.com/llvm/llvm-project/issues/104942>`__",""
-"`LWG3471 <https://wg21.link/LWG3471>`__","``polymorphic_allocator::allocate`` does not satisfy ``Cpp17Allocator`` requirements","2022-02 (Virtual)","","","`#104943 <https://github.com/llvm/llvm-project/issues/104943>`__",""
-"`LWG3525 <https://wg21.link/LWG3525>`__","``uses_allocator_construction_args`` fails to handle types convertible to ``pair``","2022-02 (Virtual)","","","`#104944 <https://github.com/llvm/llvm-project/issues/104944>`__",""
-"`LWG3598 <https://wg21.link/LWG3598>`__","``system_category().default_error_condition(0)`` is underspecified","2022-02 (Virtual)","","","`#104945 <https://github.com/llvm/llvm-project/issues/104945>`__",""
-"`LWG3601 <https://wg21.link/LWG3601>`__","common_iterator's postfix-proxy needs ``indirectly_readable`` ","2022-02 (Virtual)","","","`#104946 <https://github.com/llvm/llvm-project/issues/104946>`__",""
-"`LWG3607 <https://wg21.link/LWG3607>`__","``contiguous_iterator`` should not be allowed to have custom ``iter_move`` and ``iter_swap`` behavior","2022-02 (Virtual)","|Nothing To Do|","","`#104947 <https://github.com/llvm/llvm-project/issues/104947>`__",""
-"`LWG3610 <https://wg21.link/LWG3610>`__","``iota_view::size`` sometimes rejects integer-class types","2022-02 (Virtual)","|Complete|","23","`#104948 <https://github.com/llvm/llvm-project/issues/104948>`__",""
-"`LWG3612 <https://wg21.link/LWG3612>`__","Inconsistent pointer alignment in ``std::format`` ","2022-02 (Virtual)","|Complete|","14","`#104949 <https://github.com/llvm/llvm-project/issues/104949>`__",""
-"`LWG3616 <https://wg21.link/LWG3616>`__","LWG 3498 seems to miss the non-member ``swap`` for ``basic_syncbuf`` ","2022-02 (Virtual)","|Complete|","18","`#104950 <https://github.com/llvm/llvm-project/issues/104950>`__",""
-"`LWG3618 <https://wg21.link/LWG3618>`__","Unnecessary ``iter_move`` for ``transform_view::iterator`` ","2022-02 (Virtual)","|Complete|","19","`#104951 <https://github.com/llvm/llvm-project/issues/104951>`__",""
-"`LWG3619 <https://wg21.link/LWG3619>`__","Specification of ``vformat_to`` contains ill-formed ``formatted_size`` calls","2022-02 (Virtual)","|Nothing To Do|","","`#104952 <https://github.com/llvm/llvm-project/issues/104952>`__",""
-"`LWG3621 <https://wg21.link/LWG3621>`__","Remove feature-test macro ``__cpp_lib_monadic_optional`` ","2022-02 (Virtual)","|Complete|","15","`#104953 <https://github.com/llvm/llvm-project/issues/104953>`__",""
-"`LWG3632 <https://wg21.link/LWG3632>`__","``unique_ptr`` ""Mandates: This constructor is not selected by class template argument deduction""","2022-02 (Virtual)","|Nothing To Do|","","`#104954 <https://github.com/llvm/llvm-project/issues/104954>`__",""
-"`LWG3643 <https://wg21.link/LWG3643>`__","Missing ``constexpr`` in ``std::counted_iterator`` ","2022-02 (Virtual)","|Complete|","19","`#104955 <https://github.com/llvm/llvm-project/issues/104955>`__",""
-"`LWG3648 <https://wg21.link/LWG3648>`__","``format`` should not print ``bool`` with ``'c'`` ","2022-02 (Virtual)","|Complete|","15","`#104956 <https://github.com/llvm/llvm-project/issues/104956>`__",""
-"`LWG3649 <https://wg21.link/LWG3649>`__","[fund.ts.v2] Reinstate and bump ``__cpp_lib_experimental_memory_resource`` feature test macro","2022-02 (Virtual)","","","`#104957 <https://github.com/llvm/llvm-project/issues/104957>`__",""
-"`LWG3650 <https://wg21.link/LWG3650>`__","Are ``std::basic_string`` 's ``iterator`` and ``const_iterator`` constexpr iterators?","2022-02 (Virtual)","|Nothing To Do|","","`#104958 <https://github.com/llvm/llvm-project/issues/104958>`__",""
-"`LWG3654 <https://wg21.link/LWG3654>`__","``basic_format_context::arg(size_t)`` should be ``noexcept`` ","2022-02 (Virtual)","|Complete|","15","`#104959 <https://github.com/llvm/llvm-project/issues/104959>`__",""
-"`LWG3657 <https://wg21.link/LWG3657>`__","``std::hash<std::filesystem::path>`` is not enabled","2022-02 (Virtual)","|Complete|","17","`#104960 <https://github.com/llvm/llvm-project/issues/104960>`__",""
-"`LWG3660 <https://wg21.link/LWG3660>`__","``iterator_traits<common_iterator>::pointer`` should conform to §[iterator.traits]","2022-02 (Virtual)","|Complete|","14","`#104961 <https://github.com/llvm/llvm-project/issues/104961>`__",""
-"`LWG3661 <https://wg21.link/LWG3661>`__","``constinit atomic<shared_ptr<T>> a(nullptr);`` should work","2022-02 (Virtual)","","","`#104962 <https://github.com/llvm/llvm-project/issues/104962>`__",""
+"[LWG3088](https://wg21.link/LWG3088)","`forward_list::merge` behaviour unclear when passed `*this`","2022-02 (Virtual)","{{Complete}}","Yes","[#104942](https://github.com/llvm/llvm-project/issues/104942)",""
+"[LWG3471](https://wg21.link/LWG3471)","`polymorphic_allocator::allocate` does not satisfy `Cpp17Allocator` requirements","2022-02 (Virtual)","","","[#104943](https://github.com/llvm/llvm-project/issues/104943)",""
+"[LWG3525](https://wg21.link/LWG3525)","`uses_allocator_construction_args` fails to handle types convertible to `pair`","2022-02 (Virtual)","","","[#104944](https://github.com/llvm/llvm-project/issues/104944)",""
+"[LWG3598](https://wg21.link/LWG3598)","`system_category().default_error_condition(0)` is underspecified","2022-02 (Virtual)","","","[#104945](https://github.com/llvm/llvm-project/issues/104945)",""
+"[LWG3601](https://wg21.link/LWG3601)","common_iterator's postfix-proxy needs `indirectly_readable` ","2022-02 (Virtual)","","","[#104946](https://github.com/llvm/llvm-project/issues/104946)",""
+"[LWG3607](https://wg21.link/LWG3607)","`contiguous_iterator` should not be allowed to have custom `iter_move` and `iter_swap` behavior","2022-02 (Virtual)","{{NothingToDo}}","","[#104947](https://github.com/llvm/llvm-project/issues/104947)",""
+"[LWG3610](https://wg21.link/LWG3610)","`iota_view::size` sometimes rejects integer-class types","2022-02 (Virtual)","{{Complete}}","23","[#104948](https://github.com/llvm/llvm-project/issues/104948)",""
+"[LWG3612](https://wg21.link/LWG3612)","Inconsistent pointer alignment in `std::format` ","2022-02 (Virtual)","{{Complete}}","14","[#104949](https://github.com/llvm/llvm-project/issues/104949)",""
+"[LWG3616](https://wg21.link/LWG3616)","LWG 3498 seems to miss the non-member `swap` for `basic_syncbuf` ","2022-02 (Virtual)","{{Complete}}","18","[#104950](https://github.com/llvm/llvm-project/issues/104950)",""
+"[LWG3618](https://wg21.link/LWG3618)","Unnecessary `iter_move` for `transform_view::iterator` ","2022-02 (Virtual)","{{Complete}}","19","[#104951](https://github.com/llvm/llvm-project/issues/104951)",""
+"[LWG3619](https://wg21.link/LWG3619)","Specification of `vformat_to` contains ill-formed `formatted_size` calls","2022-02 (Virtual)","{{NothingToDo}}","","[#104952](https://github.com/llvm/llvm-project/issues/104952)",""
+"[LWG3621](https://wg21.link/LWG3621)","Remove feature-test macro `__cpp_lib_monadic_optional` ","2022-02 (Virtual)","{{Complete}}","15","[#104953](https://github.com/llvm/llvm-project/issues/104953)",""
+"[LWG3632](https://wg21.link/LWG3632)","`unique_ptr` ""Mandates: This constructor is not selected by class template argument deduction""","2022-02 (Virtual)","{{NothingToDo}}","","[#104954](https://github.com/llvm/llvm-project/issues/104954)",""
+"[LWG3643](https://wg21.link/LWG3643)","Missing `constexpr` in `std::counted_iterator` ","2022-02 (Virtual)","{{Complete}}","19","[#104955](https://github.com/llvm/llvm-project/issues/104955)",""
+"[LWG3648](https://wg21.link/LWG3648)","`format` should not print `bool` with `'c'` ","2022-02 (Virtual)","{{Complete}}","15","[#104956](https://github.com/llvm/llvm-project/issues/104956)",""
+"[LWG3649](https://wg21.link/LWG3649)","[fund.ts.v2] Reinstate and bump `__cpp_lib_experimental_memory_resource` feature test macro","2022-02 (Virtual)","","","[#104957](https://github.com/llvm/llvm-project/issues/104957)",""
+"[LWG3650](https://wg21.link/LWG3650)","Are `std::basic_string` 's `iterator` and `const_iterator` constexpr iterators?","2022-02 (Virtual)","{{NothingToDo}}","","[#104958](https://github.com/llvm/llvm-project/issues/104958)",""
+"[LWG3654](https://wg21.link/LWG3654)","`basic_format_context::arg(size_t)` should be `noexcept` ","2022-02 (Virtual)","{{Complete}}","15","[#104959](https://github.com/llvm/llvm-project/issues/104959)",""
+"[LWG3657](https://wg21.link/LWG3657)","`std::hash<std::filesystem::path>` is not enabled","2022-02 (Virtual)","{{Complete}}","17","[#104960](https://github.com/llvm/llvm-project/issues/104960)",""
+"[LWG3660](https://wg21.link/LWG3660)","`iterator_traits<common_iterator>::pointer` should conform to §[iterator.traits]","2022-02 (Virtual)","{{Complete}}","14","[#104961](https://github.com/llvm/llvm-project/issues/104961)",""
+"[LWG3661](https://wg21.link/LWG3661)","`constinit atomic<shared_ptr<T>> a(nullptr);` should work","2022-02 (Virtual)","","","[#104962](https://github.com/llvm/llvm-project/issues/104962)",""
"","","","","","",""
-"`LWG3564 <https://wg21.link/LWG3564>`__","``transform_view::iterator<true>::value_type`` and ``iterator_category`` should use ``const F&``","2022-07 (Virtual)","|Complete|","20","`#104963 <https://github.com/llvm/llvm-project/issues/104963>`__",""
-"`LWG3617 <https://wg21.link/LWG3617>`__","``function``/``packaged_task`` deduction guides and deducing ``this``","2022-07 (Virtual)","","","`#104965 <https://github.com/llvm/llvm-project/issues/104965>`__",""
-"`LWG3656 <https://wg21.link/LWG3656>`__","Inconsistent bit operations returning a count","2022-07 (Virtual)","|Complete|","15","`#104966 <https://github.com/llvm/llvm-project/issues/104966>`__",""
-"`LWG3659 <https://wg21.link/LWG3659>`__","Consider ``ATOMIC_FLAG_INIT`` undeprecation","2022-07 (Virtual)","|Complete|","15","`#104968 <https://github.com/llvm/llvm-project/issues/104968>`__",""
-"`LWG3670 <https://wg21.link/LWG3670>`__","``Cpp17InputIterators`` don't have integer-class difference types","2022-07 (Virtual)","","","`#104969 <https://github.com/llvm/llvm-project/issues/104969>`__",""
-"`LWG3671 <https://wg21.link/LWG3671>`__","``atomic_fetch_xor`` missing from ``stdatomic.h``","2022-07 (Virtual)","|Complete|","20","`#104970 <https://github.com/llvm/llvm-project/issues/104970>`__",""
-"`LWG3672 <https://wg21.link/LWG3672>`__","``common_iterator::operator->()`` should return by value","2022-07 (Virtual)","|Complete|","19","`#104971 <https://github.com/llvm/llvm-project/issues/104971>`__",""
-"`LWG3683 <https://wg21.link/LWG3683>`__","``operator==`` for ``polymorphic_allocator`` cannot deduce template argument in common cases","2022-07 (Virtual)","|Complete|","20","`#104972 <https://github.com/llvm/llvm-project/issues/104972>`__",""
-"`LWG3687 <https://wg21.link/LWG3687>`__","``expected<cv void, E>`` move constructor should move","2022-07 (Virtual)","|Complete|","16","`#104973 <https://github.com/llvm/llvm-project/issues/104973>`__",""
-"`LWG3692 <https://wg21.link/LWG3692>`__","``zip_view::iterator``'s ``operator<=>`` is overconstrained","2022-07 (Virtual)","|Complete|","20","`#104975 <https://github.com/llvm/llvm-project/issues/104975>`__",""
-"`LWG3701 <https://wg21.link/LWG3701>`__","Make ``formatter<remove_cvref_t<const charT[N]>, charT>`` requirement explicit","2022-07 (Virtual)","|Complete|","15","`#104976 <https://github.com/llvm/llvm-project/issues/104976>`__",""
-"`LWG3702 <https://wg21.link/LWG3702>`__","Should ``zip_transform_view::iterator`` remove ``operator<``","2022-07 (Virtual)","|Complete|","22","`#104977 <https://github.com/llvm/llvm-project/issues/104977>`__",""
-"`LWG3703 <https://wg21.link/LWG3703>`__","Missing requirements for ``expected<T, E>`` requires ``is_void<T>``","2022-07 (Virtual)","|Complete|","16","`#104978 <https://github.com/llvm/llvm-project/issues/104978>`__",""
-"`LWG3704 <https://wg21.link/LWG3704>`__","LWG 2059 added overloads that might be ill-formed for sets","2022-07 (Virtual)","","","`#104979 <https://github.com/llvm/llvm-project/issues/104979>`__",""
-"`LWG3705 <https://wg21.link/LWG3705>`__","Hashability shouldn't depend on basic_string's allocator","2022-07 (Virtual)","|Complete|","16","`#104980 <https://github.com/llvm/llvm-project/issues/104980>`__",""
-"`LWG3707 <https://wg21.link/LWG3707>`__","chunk_view::outer-iterator::value_type::size should return unsigned type","2022-07 (Virtual)","","","`#104981 <https://github.com/llvm/llvm-project/issues/104981>`__",""
-"`LWG3708 <https://wg21.link/LWG3708>`__","``take_while_view::sentinel``'s conversion constructor should move","2022-07 (Virtual)","|Complete|","16","`#104982 <https://github.com/llvm/llvm-project/issues/104982>`__",""
-"`LWG3709 <https://wg21.link/LWG3709>`__","LWG-3703 was underly ambitious","2022-07 (Virtual)","","","`#104983 <https://github.com/llvm/llvm-project/issues/104983>`__",""
-"`LWG3710 <https://wg21.link/LWG3710>`__","The ``end`` of ``chunk_view`` for input ranges can be ``const``","2022-07 (Virtual)","","","`#104985 <https://github.com/llvm/llvm-project/issues/104985>`__",""
-"`LWG3711 <https://wg21.link/LWG3711>`__","Missing preconditions for slide_view constructor","2022-07 (Virtual)","","","`#104987 <https://github.com/llvm/llvm-project/issues/104987>`__",""
-"`LWG3712 <https://wg21.link/LWG3712>`__","``chunk_view`` and ``slide_view`` should not be ``default_initializable``","2022-07 (Virtual)","","","`#104988 <https://github.com/llvm/llvm-project/issues/104988>`__",""
-"`LWG3713 <https://wg21.link/LWG3713>`__","Sorted with respect to comparator (only)","2022-07 (Virtual)","|Nothing To Do|","","`#104989 <https://github.com/llvm/llvm-project/issues/104989>`__",""
-"`LWG3715 <https://wg21.link/LWG3715>`__","``view_interface::empty`` is overconstrained","2022-07 (Virtual)","|Complete|","19","`#104990 <https://github.com/llvm/llvm-project/issues/104990>`__",""
-"`LWG3719 <https://wg21.link/LWG3719>`__","Directory iterators should be usable with default sentinel","2022-07 (Virtual)","|Complete|","17","`#104992 <https://github.com/llvm/llvm-project/issues/104992>`__",""
-"`LWG3721 <https://wg21.link/LWG3721>`__","Allow an ``arg-id`` with a value of zero for ``width`` in ``std-format-spec``","2022-07 (Virtual)","|Complete|","16","`#104993 <https://github.com/llvm/llvm-project/issues/104993>`__",""
-"`LWG3724 <https://wg21.link/LWG3724>`__","``decay-copy`` should be constrained","2022-07 (Virtual)","|Complete|","14","`#104994 <https://github.com/llvm/llvm-project/issues/104994>`__",""
+"[LWG3564](https://wg21.link/LWG3564)","`transform_view::iterator<true>::value_type` and `iterator_category` should use `const F&`","2022-07 (Virtual)","{{Complete}}","20","[#104963](https://github.com/llvm/llvm-project/issues/104963)",""
+"[LWG3617](https://wg21.link/LWG3617)","`function`/`packaged_task` deduction guides and deducing `this`","2022-07 (Virtual)","","","[#104965](https://github.com/llvm/llvm-project/issues/104965)",""
+"[LWG3656](https://wg21.link/LWG3656)","Inconsistent bit operations returning a count","2022-07 (Virtual)","{{Complete}}","15","[#104966](https://github.com/llvm/llvm-project/issues/104966)",""
+"[LWG3659](https://wg21.link/LWG3659)","Consider `ATOMIC_FLAG_INIT` undeprecation","2022-07 (Virtual)","{{Complete}}","15","[#104968](https://github.com/llvm/llvm-project/issues/104968)",""
+"[LWG3670](https://wg21.link/LWG3670)","`Cpp17InputIterators` don't have integer-class difference types","2022-07 (Virtual)","","","[#104969](https://github.com/llvm/llvm-project/issues/104969)",""
+"[LWG3671](https://wg21.link/LWG3671)","`atomic_fetch_xor` missing from `stdatomic.h`","2022-07 (Virtual)","{{Complete}}","20","[#104970](https://github.com/llvm/llvm-project/issues/104970)",""
+"[LWG3672](https://wg21.link/LWG3672)","`common_iterator::operator->()` should return by value","2022-07 (Virtual)","{{Complete}}","19","[#104971](https://github.com/llvm/llvm-project/issues/104971)",""
+"[LWG3683](https://wg21.link/LWG3683)","`operator==` for `polymorphic_allocator` cannot deduce template argument in common cases","2022-07 (Virtual)","{{Complete}}","20","[#104972](https://github.com/llvm/llvm-project/issues/104972)",""
+"[LWG3687](https://wg21.link/LWG3687)","`expected<cv void, E>` move constructor should move","2022-07 (Virtual)","{{Complete}}","16","[#104973](https://github.com/llvm/llvm-project/issues/104973)",""
+"[LWG3692](https://wg21.link/LWG3692)","`zip_view::iterator`'s `operator<=>` is overconstrained","2022-07 (Virtual)","{{Complete}}","20","[#104975](https://github.com/llvm/llvm-project/issues/104975)",""
+"[LWG3701](https://wg21.link/LWG3701)","Make `formatter<remove_cvref_t<const charT[N]>, charT>` requirement explicit","2022-07 (Virtual)","{{Complete}}","15","[#104976](https://github.com/llvm/llvm-project/issues/104976)",""
+"[LWG3702](https://wg21.link/LWG3702)","Should `zip_transform_view::iterator` remove `operator<`","2022-07 (Virtual)","{{Complete}}","22","[#104977](https://github.com/llvm/llvm-project/issues/104977)",""
+"[LWG3703](https://wg21.link/LWG3703)","Missing requirements for `expected<T, E>` requires `is_void<T>`","2022-07 (Virtual)","{{Complete}}","16","[#104978](https://github.com/llvm/llvm-project/issues/104978)",""
+"[LWG3704](https://wg21.link/LWG3704)","LWG 2059 added overloads that might be ill-formed for sets","2022-07 (Virtual)","","","[#104979](https://github.com/llvm/llvm-project/issues/104979)",""
+"[LWG3705](https://wg21.link/LWG3705)","Hashability shouldn't depend on basic_string's allocator","2022-07 (Virtual)","{{Complete}}","16","[#104980](https://github.com/llvm/llvm-project/issues/104980)",""
+"[LWG3707](https://wg21.link/LWG3707)","chunk_view::outer-iterator::value_type::size should return unsigned type","2022-07 (Virtual)","","","[#104981](https://github.com/llvm/llvm-project/issues/104981)",""
+"[LWG3708](https://wg21.link/LWG3708)","`take_while_view::sentinel`'s conversion constructor should move","2022-07 (Virtual)","{{Complete}}","16","[#104982](https://github.com/llvm/llvm-project/issues/104982)",""
+"[LWG3709](https://wg21.link/LWG3709)","LWG-3703 was underly ambitious","2022-07 (Virtual)","","","[#104983](https://github.com/llvm/llvm-project/issues/104983)",""
+"[LWG3710](https://wg21.link/LWG3710)","The `end` of `chunk_view` for input ranges can be `const`","2022-07 (Virtual)","","","[#104985](https://github.com/llvm/llvm-project/issues/104985)",""
+"[LWG3711](https://wg21.link/LWG3711)","Missing preconditions for slide_view constructor","2022-07 (Virtual)","","","[#104987](https://github.com/llvm/llvm-project/issues/104987)",""
+"[LWG3712](https://wg21.link/LWG3712)","`chunk_view` and `slide_view` should not be `default_initializable`","2022-07 (Virtual)","","","[#104988](https://github.com/llvm/llvm-project/issues/104988)",""
+"[LWG3713](https://wg21.link/LWG3713)","Sorted with respect to comparator (only)","2022-07 (Virtual)","{{NothingToDo}}","","[#104989](https://github.com/llvm/llvm-project/issues/104989)",""
+"[LWG3715](https://wg21.link/LWG3715)","`view_interface::empty` is overconstrained","2022-07 (Virtual)","{{Complete}}","19","[#104990](https://github.com/llvm/llvm-project/issues/104990)",""
+"[LWG3719](https://wg21.link/LWG3719)","Directory iterators should be usable with default sentinel","2022-07 (Virtual)","{{Complete}}","17","[#104992](https://github.com/llvm/llvm-project/issues/104992)",""
+"[LWG3721](https://wg21.link/LWG3721)","Allow an `arg-id` with a value of zero for `width` in `std-format-spec`","2022-07 (Virtual)","{{Complete}}","16","[#104993](https://github.com/llvm/llvm-project/issues/104993)",""
+"[LWG3724](https://wg21.link/LWG3724)","`decay-copy` should be constrained","2022-07 (Virtual)","{{Complete}}","14","[#104994](https://github.com/llvm/llvm-project/issues/104994)",""
"","","","","","",""
-"`LWG3028 <https://wg21.link/LWG3028>`__","Container requirements tables should distinguish ``const`` and non-``const`` variables","2022-11 (Kona)","","","`#104995 <https://github.com/llvm/llvm-project/issues/104995>`__",""
-"`LWG3118 <https://wg21.link/LWG3118>`__","``fpos`` equality comparison unspecified","2022-11 (Kona)","","","`#104996 <https://github.com/llvm/llvm-project/issues/104996>`__",""
-"`LWG3177 <https://wg21.link/LWG3177>`__","Limit permission to specialize variable templates to program-defined types","2022-11 (Kona)","|Nothing To Do|","","`#104997 <https://github.com/llvm/llvm-project/issues/104997>`__",""
-"`LWG3515 <https://wg21.link/LWG3515>`__","§[stacktrace.basic.nonmem]: ``operator<<`` should be less templatized","2022-11 (Kona)","","","`#104998 <https://github.com/llvm/llvm-project/issues/104998>`__",""
-"`LWG3545 <https://wg21.link/LWG3545>`__","``std::pointer_traits`` should be SFINAE-friendly","2022-11 (Kona)","|Complete|","18","`#104999 <https://github.com/llvm/llvm-project/issues/104999>`__",""
-"`LWG3569 <https://wg21.link/LWG3569>`__","``join_view`` fails to support ranges of ranges with non-default_initializable iterators","2022-11 (Kona)","","","`#105000 <https://github.com/llvm/llvm-project/issues/105000>`__",""
-"`LWG3594 <https://wg21.link/LWG3594>`__","``inout_ptr`` — inconsistent ``release()`` in destructor","2022-11 (Kona)","|Complete|","19","`#105001 <https://github.com/llvm/llvm-project/issues/105001>`__",""
-"`LWG3597 <https://wg21.link/LWG3597>`__","Unsigned integer types don't model advanceable","2022-11 (Kona)","","","`#105002 <https://github.com/llvm/llvm-project/issues/105002>`__",""
-"`LWG3600 <https://wg21.link/LWG3600>`__","Making ``istream_iterator`` copy constructor trivial is an ABI break","2022-11 (Kona)","|Complete|","","`#105003 <https://github.com/llvm/llvm-project/issues/105003>`__",""
-"`LWG3629 <https://wg21.link/LWG3629>`__","``make_error_code`` and ``make_error_condition`` are customization points","2022-11 (Kona)","|Complete|","16","`#105004 <https://github.com/llvm/llvm-project/issues/105004>`__",""
-"`LWG3636 <https://wg21.link/LWG3636>`__","``formatter<T>::format`` should be ``const``-qualified","2022-11 (Kona)","|Complete|","16","`#105005 <https://github.com/llvm/llvm-project/issues/105005>`__",""
-"`LWG3646 <https://wg21.link/LWG3646>`__","``std::ranges::view_interface::size`` returns a signed type","2022-11 (Kona)","|Complete|","16","`#105006 <https://github.com/llvm/llvm-project/issues/105006>`__",""
-"`LWG3677 <https://wg21.link/LWG3677>`__","Is a cv-qualified ``pair`` specially handled in uses-allocator construction?","2022-11 (Kona)","|Complete|","18","`#105007 <https://github.com/llvm/llvm-project/issues/105007>`__",""
-"`LWG3717 <https://wg21.link/LWG3717>`__","``common_view::end`` should improve ``random_access_range`` case","2022-11 (Kona)","","","`#105008 <https://github.com/llvm/llvm-project/issues/105008>`__",""
-"`LWG3732 <https://wg21.link/LWG3732>`__","``prepend_range`` and ``append_range`` can't be amortized constant time","2022-11 (Kona)","|Nothing To Do|","","`#105011 <https://github.com/llvm/llvm-project/issues/105011>`__",""
-"`LWG3736 <https://wg21.link/LWG3736>`__","``move_iterator`` missing ``disable_sized_sentinel_for`` specialization","2022-11 (Kona)","|Complete|","19","`#105012 <https://github.com/llvm/llvm-project/issues/105012>`__",""
-"`LWG3737 <https://wg21.link/LWG3737>`__","``take_view::sentinel`` should provide ``operator-``","2022-11 (Kona)","","","`#105013 <https://github.com/llvm/llvm-project/issues/105013>`__",""
-"`LWG3738 <https://wg21.link/LWG3738>`__","Missing preconditions for ``take_view`` constructor","2022-11 (Kona)","|Complete|","16","`#105014 <https://github.com/llvm/llvm-project/issues/105014>`__",""
-"`LWG3743 <https://wg21.link/LWG3743>`__","``ranges::to``'s reserve may be ill-formed","2022-11 (Kona)","","","`#105015 <https://github.com/llvm/llvm-project/issues/105015>`__",""
-"`LWG3745 <https://wg21.link/LWG3745>`__","``std::atomic_wait`` and its friends lack ``noexcept``","2022-11 (Kona)","|Complete|","16","`#105016 <https://github.com/llvm/llvm-project/issues/105016>`__",""
-"`LWG3746 <https://wg21.link/LWG3746>`__","``optional``'s spaceship with ``U`` with a type derived from optional causes infinite constraint meta-recursion","2022-11 (Kona)","|Complete|","17","`#105017 <https://github.com/llvm/llvm-project/issues/105017>`__",""
-"`LWG3747 <https://wg21.link/LWG3747>`__","``ranges::uninitialized_copy_n``, ``ranges::uninitialized_move_n``, and ``ranges::destroy_n`` should use ``std::move``","2022-11 (Kona)","","","`#105018 <https://github.com/llvm/llvm-project/issues/105018>`__",""
-"`LWG3750 <https://wg21.link/LWG3750>`__","Too many papers bump ``__cpp_lib_format``","2022-11 (Kona)","|Partial|","","`#105020 <https://github.com/llvm/llvm-project/issues/105020>`__","Only ``__cpp_lib_format_ranges`` is fully implemented"
-"`LWG3751 <https://wg21.link/LWG3751>`__","Missing feature macro for ``flat_set``","2022-11 (Kona)","|Complete|","21","`#105021 <https://github.com/llvm/llvm-project/issues/105021>`__",""
-"`LWG3753 <https://wg21.link/LWG3753>`__","Clarify entity vs. freestanding entity","2022-11 (Kona)","","","`#105022 <https://github.com/llvm/llvm-project/issues/105022>`__",""
-"`LWG3754 <https://wg21.link/LWG3754>`__","Class template expected synopsis contains declarations that do not match the detailed description","2022-11 (Kona)","|Nothing To Do|","","`#105023 <https://github.com/llvm/llvm-project/issues/105023>`__",""
-"`LWG3755 <https://wg21.link/LWG3755>`__","``tuple-for-each`` can call ``user-defined`` ``operator,``","2022-11 (Kona)","|Complete|","17","`#105024 <https://github.com/llvm/llvm-project/issues/105024>`__",""
-"`LWG3757 <https://wg21.link/LWG3757>`__","What's the effect of ``std::forward_like<void>(x)``?","2022-11 (Kona)","|Complete|","","`#105026 <https://github.com/llvm/llvm-project/issues/105026>`__",""
-"`LWG3759 <https://wg21.link/LWG3759>`__","``ranges::rotate_copy`` should use ``std::move``","2022-11 (Kona)","|Complete|","15","`#105027 <https://github.com/llvm/llvm-project/issues/105027>`__",""
-"`LWG3760 <https://wg21.link/LWG3760>`__","``cartesian_product_view::iterator``'s ``parent_`` is never valid","2022-11 (Kona)","","","`#105028 <https://github.com/llvm/llvm-project/issues/105028>`__",""
-"`LWG3761 <https://wg21.link/LWG3761>`__","``cartesian_product_view::iterator::operator-`` should pass by reference","2022-11 (Kona)","","","`#105029 <https://github.com/llvm/llvm-project/issues/105029>`__",""
-"`LWG3762 <https://wg21.link/LWG3762>`__","``generator::iterator::operator==`` should pass by reference","2022-11 (Kona)","","","`#105030 <https://github.com/llvm/llvm-project/issues/105030>`__",""
-"`LWG3764 <https://wg21.link/LWG3764>`__","``reference_wrapper::operator()`` should propagate noexcept","2022-11 (Kona)","|Complete|","17","`#105031 <https://github.com/llvm/llvm-project/issues/105031>`__",""
-"`LWG3765 <https://wg21.link/LWG3765>`__","``const_sentinel`` should be constrained","2022-11 (Kona)","","","`#105032 <https://github.com/llvm/llvm-project/issues/105032>`__",""
-"`LWG3766 <https://wg21.link/LWG3766>`__","``view_interface::cbegin`` is underconstrained","2022-11 (Kona)","","","`#105033 <https://github.com/llvm/llvm-project/issues/105033>`__",""
-"`LWG3770 <https://wg21.link/LWG3770>`__","``const_sentinel_t`` is missing","2022-11 (Kona)","","","`#105034 <https://github.com/llvm/llvm-project/issues/105034>`__",""
-"`LWG3773 <https://wg21.link/LWG3773>`__","``views::zip_transform`` still requires ``F`` to be ``copy_constructible`` when empty pack","2022-11 (Kona)","|Complete|","22","`#105035 <https://github.com/llvm/llvm-project/issues/105035>`__",""
-"`LWG3774 <https://wg21.link/LWG3774>`__","``<flat_set>`` should include ``<compare>``","2022-11 (Kona)","|Complete|","21","`#105036 <https://github.com/llvm/llvm-project/issues/105036>`__",""
-"`LWG3775 <https://wg21.link/LWG3775>`__","Broken dependencies in the ``Cpp17Allocator`` requirements","2022-11 (Kona)","","","`#105038 <https://github.com/llvm/llvm-project/issues/105038>`__",""
-"`LWG3778 <https://wg21.link/LWG3778>`__","``vector<bool>`` missing exception specifications","2022-11 (Kona)","|Complete|","3.7","`#105039 <https://github.com/llvm/llvm-project/issues/105039>`__",""
-"`LWG3781 <https://wg21.link/LWG3781>`__","The exposition-only alias templates ``cont-key-type`` and ``cont-mapped-type`` should be removed","2022-11 (Kona)","|Nothing To Do|","","`#105040 <https://github.com/llvm/llvm-project/issues/105040>`__",""
-"`LWG3782 <https://wg21.link/LWG3782>`__","Should ``<math.h>`` declare ``::lerp``?","2022-11 (Kona)","|Complete|","17","`#105041 <https://github.com/llvm/llvm-project/issues/105041>`__",""
-"`LWG3784 <https://wg21.link/LWG3784>`__","std.compat should not provide ``::byte`` and its friends","2022-11 (Kona)","|Complete|","19","`#105042 <https://github.com/llvm/llvm-project/issues/105042>`__",""
-"`LWG3785 <https://wg21.link/LWG3785>`__","``ranges::to`` is over-constrained on the destination type being a range","2022-11 (Kona)","","","`#105044 <https://github.com/llvm/llvm-project/issues/105044>`__",""
-"`LWG3788 <https://wg21.link/LWG3788>`__","``jthread::operator=(jthread&&)`` postconditions are unimplementable under self-assignment","2022-11 (Kona)","|Complete|","18","`#105045 <https://github.com/llvm/llvm-project/issues/105045>`__",""
-"`LWG3792 <https://wg21.link/LWG3792>`__","``__cpp_lib_constexpr_algorithms`` should also be defined in ``<utility>``","2022-11 (Kona)","|Complete|","16","`#105046 <https://github.com/llvm/llvm-project/issues/105046>`__",""
-"`LWG3795 <https://wg21.link/LWG3795>`__","Self-move-assignment of ``std::future`` and ``std::shared_future`` have unimplementable postconditions","2022-11 (Kona)","","","`#105047 <https://github.com/llvm/llvm-project/issues/105047>`__",""
-"`LWG3796 <https://wg21.link/LWG3796>`__","``movable-box`` as member should use ``default-initialization`` instead of ``copy-initialization``","2022-11 (Kona)","","","`#105048 <https://github.com/llvm/llvm-project/issues/105048>`__",""
-"`LWG3798 <https://wg21.link/LWG3798>`__","Rvalue reference and ``iterator_category``","2022-11 (Kona)","|Complete|","22","`#105049 <https://github.com/llvm/llvm-project/issues/105049>`__",""
-"`LWG3801 <https://wg21.link/LWG3801>`__","``cartesian_product_view::iterator::distance-from`` ignores the size of last underlying range","2022-11 (Kona)","","","`#105051 <https://github.com/llvm/llvm-project/issues/105051>`__",""
-"`LWG3814 <https://wg21.link/LWG3814>`__","Add freestanding items requested by NB comments","2022-11 (Kona)","","","`#105052 <https://github.com/llvm/llvm-project/issues/105052>`__",""
-"`LWG3816 <https://wg21.link/LWG3816>`__","``flat_map`` and ``flat_multimap`` should impose sequence container requirements","2022-11 (Kona)","","","`#105053 <https://github.com/llvm/llvm-project/issues/105053>`__",""
-"`LWG3817 <https://wg21.link/LWG3817>`__","Missing preconditions on ``forward_list`` modifiers","2022-11 (Kona)","","","`#105055 <https://github.com/llvm/llvm-project/issues/105055>`__",""
-"`LWG3818 <https://wg21.link/LWG3818>`__","Exposition-only concepts are not described in library intro","2022-11 (Kona)","|Nothing To Do|","","`#105056 <https://github.com/llvm/llvm-project/issues/105056>`__",""
-"`LWG3822 <https://wg21.link/LWG3822>`__","Avoiding normalization in ``filesystem::weakly_canonical``","2022-11 (Kona)","","","`#105057 <https://github.com/llvm/llvm-project/issues/105057>`__",""
-"`LWG3823 <https://wg21.link/LWG3823>`__","Unnecessary precondition for ``is_aggregate``","2022-11 (Kona)","|Nothing To Do|","","`#105058 <https://github.com/llvm/llvm-project/issues/105058>`__",""
-"`LWG3824 <https://wg21.link/LWG3824>`__","Number of ``bind`` placeholders is underspecified","2022-11 (Kona)","|Nothing To Do|","","`#105060 <https://github.com/llvm/llvm-project/issues/105060>`__",""
-"`LWG3826 <https://wg21.link/LWG3826>`__","Redundant specification [for overload of yield_value]","2022-11 (Kona)","|Nothing To Do|","","`#105061 <https://github.com/llvm/llvm-project/issues/105061>`__",""
+"[LWG3028](https://wg21.link/LWG3028)","Container requirements tables should distinguish `const` and non-`const` variables","2022-11 (Kona)","","","[#104995](https://github.com/llvm/llvm-project/issues/104995)",""
+"[LWG3118](https://wg21.link/LWG3118)","`fpos` equality comparison unspecified","2022-11 (Kona)","","","[#104996](https://github.com/llvm/llvm-project/issues/104996)",""
+"[LWG3177](https://wg21.link/LWG3177)","Limit permission to specialize variable templates to program-defined types","2022-11 (Kona)","{{NothingToDo}}","","[#104997](https://github.com/llvm/llvm-project/issues/104997)",""
+"[LWG3515](https://wg21.link/LWG3515)","§[stacktrace.basic.nonmem]: `operator<<` should be less templatized","2022-11 (Kona)","","","[#104998](https://github.com/llvm/llvm-project/issues/104998)",""
+"[LWG3545](https://wg21.link/LWG3545)","`std::pointer_traits` should be SFINAE-friendly","2022-11 (Kona)","{{Complete}}","18","[#104999](https://github.com/llvm/llvm-project/issues/104999)",""
+"[LWG3569](https://wg21.link/LWG3569)","`join_view` fails to support ranges of ranges with non-default_initializable iterators","2022-11 (Kona)","","","[#105000](https://github.com/llvm/llvm-project/issues/105000)",""
+"[LWG3594](https://wg21.link/LWG3594)","`inout_ptr` — inconsistent `release()` in destructor","2022-11 (Kona)","{{Complete}}","19","[#105001](https://github.com/llvm/llvm-project/issues/105001)",""
+"[LWG3597](https://wg21.link/LWG3597)","Unsigned integer types don't model advanceable","2022-11 (Kona)","","","[#105002](https://github.com/llvm/llvm-project/issues/105002)",""
+"[LWG3600](https://wg21.link/LWG3600)","Making `istream_iterator` copy constructor trivial is an ABI break","2022-11 (Kona)","{{Complete}}","","[#105003](https://github.com/llvm/llvm-project/issues/105003)",""
+"[LWG3629](https://wg21.link/LWG3629)","`make_error_code` and `make_error_condition` are customization points","2022-11 (Kona)","{{Complete}}","16","[#105004](https://github.com/llvm/llvm-project/issues/105004)",""
+"[LWG3636](https://wg21.link/LWG3636)","`formatter<T>::format` should be `const`-qualified","2022-11 (Kona)","{{Complete}}","16","[#105005](https://github.com/llvm/llvm-project/issues/105005)",""
+"[LWG3646](https://wg21.link/LWG3646)","`std::ranges::view_interface::size` returns a signed type","2022-11 (Kona)","{{Complete}}","16","[#105006](https://github.com/llvm/llvm-project/issues/105006)",""
+"[LWG3677](https://wg21.link/LWG3677)","Is a cv-qualified `pair` specially handled in uses-allocator construction?","2022-11 (Kona)","{{Complete}}","18","[#105007](https://github.com/llvm/llvm-project/issues/105007)",""
+"[LWG3717](https://wg21.link/LWG3717)","`common_view::end` should improve `random_access_range` case","2022-11 (Kona)","","","[#105008](https://github.com/llvm/llvm-project/issues/105008)",""
+"[LWG3732](https://wg21.link/LWG3732)","`prepend_range` and `append_range` can't be amortized constant time","2022-11 (Kona)","{{NothingToDo}}","","[#105011](https://github.com/llvm/llvm-project/issues/105011)",""
+"[LWG3736](https://wg21.link/LWG3736)","`move_iterator` missing `disable_sized_sentinel_for` specialization","2022-11 (Kona)","{{Complete}}","19","[#105012](https://github.com/llvm/llvm-project/issues/105012)",""
+"[LWG3737](https://wg21.link/LWG3737)","`take_view::sentinel` should provide `operator-`","2022-11 (Kona)","","","[#105013](https://github.com/llvm/llvm-project/issues/105013)",""
+"[LWG3738](https://wg21.link/LWG3738)","Missing preconditions for `take_view` constructor","2022-11 (Kona)","{{Complete}}","16","[#105014](https://github.com/llvm/llvm-project/issues/105014)",""
+"[LWG3743](https://wg21.link/LWG3743)","`ranges::to`'s reserve may be ill-formed","2022-11 (Kona)","","","[#105015](https://github.com/llvm/llvm-project/issues/105015)",""
+"[LWG3745](https://wg21.link/LWG3745)","`std::atomic_wait` and its friends lack `noexcept`","2022-11 (Kona)","{{Complete}}","16","[#105016](https://github.com/llvm/llvm-project/issues/105016)",""
+"[LWG3746](https://wg21.link/LWG3746)","`optional`'s spaceship with `U` with a type derived from optional causes infinite constraint meta-recursion","2022-11 (Kona)","{{Complete}}","17","[#105017](https://github.com/llvm/llvm-project/issues/105017)",""
+"[LWG3747](https://wg21.link/LWG3747)","`ranges::uninitialized_copy_n`, `ranges::uninitialized_move_n`, and `ranges::destroy_n` should use `std::move`","2022-11 (Kona)","","","[#105018](https://github.com/llvm/llvm-project/issues/105018)",""
+"[LWG3750](https://wg21.link/LWG3750)","Too many papers bump `__cpp_lib_format`","2022-11 (Kona)","{{Partial}}","","[#105020](https://github.com/llvm/llvm-project/issues/105020)","Only `__cpp_lib_format_ranges` is fully implemented"
+"[LWG3751](https://wg21.link/LWG3751)","Missing feature macro for `flat_set`","2022-11 (Kona)","{{Complete}}","21","[#105021](https://github.com/llvm/llvm-project/issues/105021)",""
+"[LWG3753](https://wg21.link/LWG3753)","Clarify entity vs. freestanding entity","2022-11 (Kona)","","","[#105022](https://github.com/llvm/llvm-project/issues/105022)",""
+"[LWG3754](https://wg21.link/LWG3754)","Class template expected synopsis contains declarations that do not match the detailed description","2022-11 (Kona)","{{NothingToDo}}","","[#105023](https://github.com/llvm/llvm-project/issues/105023)",""
+"[LWG3755](https://wg21.link/LWG3755)","`tuple-for-each` can call `user-defined` `operator,`","2022-11 (Kona)","{{Complete}}","17","[#105024](https://github.com/llvm/llvm-project/issues/105024)",""
+"[LWG3757](https://wg21.link/LWG3757)","What's the effect of `std::forward_like<void>(x)`?","2022-11 (Kona)","{{Complete}}","","[#105026](https://github.com/llvm/llvm-project/issues/105026)",""
+"[LWG3759](https://wg21.link/LWG3759)","`ranges::rotate_copy` should use `std::move`","2022-11 (Kona)","{{Complete}}","15","[#105027](https://github.com/llvm/llvm-project/issues/105027)",""
+"[LWG3760](https://wg21.link/LWG3760)","`cartesian_product_view::iterator`'s `parent_` is never valid","2022-11 (Kona)","","","[#105028](https://github.com/llvm/llvm-project/issues/105028)",""
+"[LWG3761](https://wg21.link/LWG3761)","`cartesian_product_view::iterator::operator-` should pass by reference","2022-11 (Kona)","","","[#105029](https://github.com/llvm/llvm-project/issues/105029)",""
+"[LWG3762](https://wg21.link/LWG3762)","`generator::iterator::operator==` should pass by reference","2022-11 (Kona)","","","[#105030](https://github.com/llvm/llvm-project/issues/105030)",""
+"[LWG3764](https://wg21.link/LWG3764)","`reference_wrapper::operator()` should propagate noexcept","2022-11 (Kona)","{{Complete}}","17","[#105031](https://github.com/llvm/llvm-project/issues/105031)",""
+"[LWG3765](https://wg21.link/LWG3765)","`const_sentinel` should be constrained","2022-11 (Kona)","","","[#105032](https://github.com/llvm/llvm-project/issues/105032)",""
+"[LWG3766](https://wg21.link/LWG3766)","`view_interface::cbegin` is underconstrained","2022-11 (Kona)","","","[#105033](https://github.com/llvm/llvm-project/issues/105033)",""
+"[LWG3770](https://wg21.link/LWG3770)","`const_sentinel_t` is missing","2022-11 (Kona)","","","[#105034](https://github.com/llvm/llvm-project/issues/105034)",""
+"[LWG3773](https://wg21.link/LWG3773)","`views::zip_transform` still requires `F` to be `copy_constructible` when empty pack","2022-11 (Kona)","{{Complete}}","22","[#105035](https://github.com/llvm/llvm-project/issues/105035)",""
+"[LWG3774](https://wg21.link/LWG3774)","`<flat_set>` should include `<compare>`","2022-11 (Kona)","{{Complete}}","21","[#105036](https://github.com/llvm/llvm-project/issues/105036)",""
+"[LWG3775](https://wg21.link/LWG3775)","Broken dependencies in the `Cpp17Allocator` requirements","2022-11 (Kona)","","","[#105038](https://github.com/llvm/llvm-project/issues/105038)",""
+"[LWG3778](https://wg21.link/LWG3778)","`vector<bool>` missing exception specifications","2022-11 (Kona)","{{Complete}}","3.7","[#105039](https://github.com/llvm/llvm-project/issues/105039)",""
+"[LWG3781](https://wg21.link/LWG3781)","The exposition-only alias templates `cont-key-type` and `cont-mapped-type` should be removed","2022-11 (Kona)","{{NothingToDo}}","","[#105040](https://github.com/llvm/llvm-project/issues/105040)",""
+"[LWG3782](https://wg21.link/LWG3782)","Should `<math.h>` declare `::lerp`?","2022-11 (Kona)","{{Complete}}","17","[#105041](https://github.com/llvm/llvm-project/issues/105041)",""
+"[LWG3784](https://wg21.link/LWG3784)","std.compat should not provide `::byte` and its friends","2022-11 (Kona)","{{Complete}}","19","[#105042](https://github.com/llvm/llvm-project/issues/105042)",""
+"[LWG3785](https://wg21.link/LWG3785)","`ranges::to` is over-constrained on the destination type being a range","2022-11 (Kona)","","","[#105044](https://github.com/llvm/llvm-project/issues/105044)",""
+"[LWG3788](https://wg21.link/LWG3788)","`jthread::operator=(jthread&&)` postconditions are unimplementable under self-assignment","2022-11 (Kona)","{{Complete}}","18","[#105045](https://github.com/llvm/llvm-project/issues/105045)",""
+"[LWG3792](https://wg21.link/LWG3792)","`__cpp_lib_constexpr_algorithms` should also be defined in `<utility>`","2022-11 (Kona)","{{Complete}}","16","[#105046](https://github.com/llvm/llvm-project/issues/105046)",""
+"[LWG3795](https://wg21.link/LWG3795)","Self-move-assignment of `std::future` and `std::shared_future` have unimplementable postconditions","2022-11 (Kona)","","","[#105047](https://github.com/llvm/llvm-project/issues/105047)",""
+"[LWG3796](https://wg21.link/LWG3796)","`movable-box` as member should use `default-initialization` instead of `copy-initialization`","2022-11 (Kona)","","","[#105048](https://github.com/llvm/llvm-project/issues/105048)",""
+"[LWG3798](https://wg21.link/LWG3798)","Rvalue reference and `iterator_category`","2022-11 (Kona)","{{Complete}}","22","[#105049](https://github.com/llvm/llvm-project/issues/105049)",""
+"[LWG3801](https://wg21.link/LWG3801)","`cartesian_product_view::iterator::distance-from` ignores the size of last underlying range","2022-11 (Kona)","","","[#105051](https://github.com/llvm/llvm-project/issues/105051)",""
+"[LWG3814](https://wg21.link/LWG3814)","Add freestanding items requested by NB comments","2022-11 (Kona)","","","[#105052](https://github.com/llvm/llvm-project/issues/105052)",""
+"[LWG3816](https://wg21.link/LWG3816)","`flat_map` and `flat_multimap` should impose sequence container requirements","2022-11 (Kona)","","","[#105053](https://github.com/llvm/llvm-project/issues/105053)",""
+"[LWG3817](https://wg21.link/LWG3817)","Missing preconditions on `forward_list` modifiers","2022-11 (Kona)","","","[#105055](https://github.com/llvm/llvm-project/issues/105055)",""
+"[LWG3818](https://wg21.link/LWG3818)","Exposition-only concepts are not described in library intro","2022-11 (Kona)","{{NothingToDo}}","","[#105056](https://github.com/llvm/llvm-project/issues/105056)",""
+"[LWG3822](https://wg21.link/LWG3822)","Avoiding normalization in `filesystem::weakly_canonical`","2022-11 (Kona)","","","[#105057](https://github.com/llvm/llvm-project/issues/105057)",""
+"[LWG3823](https://wg21.link/LWG3823)","Unnecessary precondition for `is_aggregate`","2022-11 (Kona)","{{NothingToDo}}","","[#105058](https://github.com/llvm/llvm-project/issues/105058)",""
+"[LWG3824](https://wg21.link/LWG3824)","Number of `bind` placeholders is underspecified","2022-11 (Kona)","{{NothingToDo}}","","[#105060](https://github.com/llvm/llvm-project/issues/105060)",""
+"[LWG3826](https://wg21.link/LWG3826)","Redundant specification [for overload of yield_value]","2022-11 (Kona)","{{NothingToDo}}","","[#105061](https://github.com/llvm/llvm-project/issues/105061)",""
"","","","","","",""
-"`LWG2195 <https://wg21.link/LWG2195>`__","Missing constructors for ``match_results``","2023-02 (Issaquah)","","","`#105062 <https://github.com/llvm/llvm-project/issues/105062>`__",""
-"`LWG2295 <https://wg21.link/LWG2295>`__","Locale name when the provided ``Facet`` is a ``nullptr``","2023-02 (Issaquah)","","","`#105063 <https://github.com/llvm/llvm-project/issues/105063>`__",""
-"`LWG3032 <https://wg21.link/LWG3032>`__","``ValueSwappable`` requirement missing for ``push_heap`` and ``make_heap``","2023-02 (Issaquah)","","","`#105064 <https://github.com/llvm/llvm-project/issues/105064>`__",""
-"`LWG3085 <https://wg21.link/LWG3085>`__","``char_traits::copy`` precondition too weak","2023-02 (Issaquah)","","","`#105065 <https://github.com/llvm/llvm-project/issues/105065>`__",""
-"`LWG3664 <https://wg21.link/LWG3664>`__","`LWG 3392 <https://wg21.link/LWG3392>`__ ``broke std::ranges::distance(a, a+3)``","2023-02 (Issaquah)","|Complete|","14","`#105066 <https://github.com/llvm/llvm-project/issues/105066>`__",""
-"`LWG3720 <https://wg21.link/LWG3720>`__","Restrict the valid types of ``arg-id`` for width and precision in ``std-format-spec``","2023-02 (Issaquah)","|Complete|","17","`#105067 <https://github.com/llvm/llvm-project/issues/105067>`__",""
-"`LWG3756 <https://wg21.link/LWG3756>`__","Is the ``std::atomic_flag`` class signal-safe?","2023-02 (Issaquah)","","","`#105068 <https://github.com/llvm/llvm-project/issues/105068>`__",""
-"`LWG3769 <https://wg21.link/LWG3769>`__","``basic_const_iterator::operator==`` causes infinite constraint recursion","2023-02 (Issaquah)","","","`#105069 <https://github.com/llvm/llvm-project/issues/105069>`__",""
-"`LWG3807 <https://wg21.link/LWG3807>`__","The feature test macro for ``ranges::find_last`` should be renamed","2023-02 (Issaquah)","","","`#105070 <https://github.com/llvm/llvm-project/issues/105070>`__",""
-"`LWG3811 <https://wg21.link/LWG3811>`__","``views::as_const`` on ``ref_view<T>`` should return ``ref_view<const T>``","2023-02 (Issaquah)","","","`#105071 <https://github.com/llvm/llvm-project/issues/105071>`__",""
-"`LWG3820 <https://wg21.link/LWG3820>`__","``cartesian_product_view::iterator::prev`` is not quite right","2023-02 (Issaquah)","","","`#105072 <https://github.com/llvm/llvm-project/issues/105072>`__",""
-"`LWG3825 <https://wg21.link/LWG3825>`__","Missing compile-time argument ``id`` check in ``basic_format_parse_context::next_arg_id``","2023-02 (Issaquah)","|Complete|","17","`#105073 <https://github.com/llvm/llvm-project/issues/105073>`__",""
-"`LWG3204 <https://wg21.link/LWG3204>`__","``sub_match::swap`` only swaps the base class","2023-02 (Issaquah)","|Complete|","17","`#105074 <https://github.com/llvm/llvm-project/issues/105074>`__",""
-"`LWG3733 <https://wg21.link/LWG3733>`__","``ranges::to`` misuses ``cpp17-input-iterator``","2023-02 (Issaquah)","|Complete|","17","`#105075 <https://github.com/llvm/llvm-project/issues/105075>`__",""
-"`LWG3742 <https://wg21.link/LWG3742>`__","``deque::prepend_range`` needs to permute","2023-02 (Issaquah)","","","`#105077 <https://github.com/llvm/llvm-project/issues/105077>`__",""
-"`LWG3790 <https://wg21.link/LWG3790>`__","`P1467 <https://wg21.link/P1467>`__ accidentally changed ``nexttoward``'s signature","2023-02 (Issaquah)","","","`#105078 <https://github.com/llvm/llvm-project/issues/105078>`__",""
-"`LWG3819 <https://wg21.link/LWG3819>`__","``reference_meows_from_temporary`` should not use ``is_meowible``","2023-02 (Issaquah)","","","`#105079 <https://github.com/llvm/llvm-project/issues/105079>`__",""
-"`LWG3821 <https://wg21.link/LWG3821>`__","``uses_allocator_construction_args`` should have overload for ``pair-like``","2023-02 (Issaquah)","|Complete|","18","`#105080 <https://github.com/llvm/llvm-project/issues/105080>`__",""
-"`LWG3834 <https://wg21.link/LWG3834>`__","Missing ``constexpr`` for ``std::intmax_t`` math functions in ``<cinttypes>``","2023-02 (Issaquah)","","","`#105081 <https://github.com/llvm/llvm-project/issues/105081>`__",""
-"`LWG3839 <https://wg21.link/LWG3839>`__","``range_formatter``'s ``set_separator``, ``set_brackets``, and ``underlying`` functions should be ``noexcept``","2023-02 (Issaquah)","|Complete|","17","`#105082 <https://github.com/llvm/llvm-project/issues/105082>`__",""
-"`LWG3841 <https://wg21.link/LWG3841>`__","``<version>`` should not be ""all freestanding""","2023-02 (Issaquah)","","","`#105083 <https://github.com/llvm/llvm-project/issues/105083>`__",""
-"`LWG3842 <https://wg21.link/LWG3842>`__","Unclear wording for ``precision`` in ``chrono-format-spec``","2023-02 (Issaquah)","|Complete|","16","`#105085 <https://github.com/llvm/llvm-project/issues/105085>`__",""
-"`LWG3848 <https://wg21.link/LWG3848>`__","``adjacent_view``, ``adjacent_transform_view`` and ``slide_view`` missing ``base`` accessor","2023-02 (Issaquah)","","","`#105086 <https://github.com/llvm/llvm-project/issues/105086>`__",""
-"`LWG3849 <https://wg21.link/LWG3849>`__","``cartesian_product_view::iterator``'s default constructor is overconstrained","2023-02 (Issaquah)","","","`#105087 <https://github.com/llvm/llvm-project/issues/105087>`__",""
-"`LWG3850 <https://wg21.link/LWG3850>`__","``views::as_const`` on ``empty_view<T>`` should return ``empty_view<const T>``","2023-02 (Issaquah)","","","`#105088 <https://github.com/llvm/llvm-project/issues/105088>`__",""
-"`LWG3851 <https://wg21.link/LWG3851>`__","``chunk_view::inner-iterator`` missing custom ``iter_move`` and ``iter_swap``","2023-02 (Issaquah)","","","`#105089 <https://github.com/llvm/llvm-project/issues/105089>`__",""
-"`LWG3853 <https://wg21.link/LWG3853>`__","``basic_const_iterator<volatile int*>::operator->`` is ill-formed","2023-02 (Issaquah)","","","`#105090 <https://github.com/llvm/llvm-project/issues/105090>`__",""
-"`LWG3857 <https://wg21.link/LWG3857>`__","``basic_string_view`` should allow explicit conversion when only traits vary","2023-02 (Issaquah)","|Complete|","17","`#105092 <https://github.com/llvm/llvm-project/issues/105092>`__",""
-"`LWG3860 <https://wg21.link/LWG3860>`__","``range_common_reference_t`` is missing","2023-02 (Issaquah)","|Complete|","17","`#105094 <https://github.com/llvm/llvm-project/issues/105094>`__",""
-"`LWG3866 <https://wg21.link/LWG3866>`__","Bad Mandates for ``expected::transform_error`` overloads","2023-02 (Issaquah)","|Complete|","17","`#105095 <https://github.com/llvm/llvm-project/issues/105095>`__",""
-"`LWG3867 <https://wg21.link/LWG3867>`__","Should ``std::basic_osyncstream``'s move assignment operator be ``noexcept``?","2023-02 (Issaquah)","|Complete|","18","`#105097 <https://github.com/llvm/llvm-project/issues/105097>`__",""
-"`LWG3441 <https://wg21.link/LWG3441>`__","Misleading note about calls to customization points","2023-02 (Issaquah)","","","`#105098 <https://github.com/llvm/llvm-project/issues/105098>`__",""
-"`LWG3622 <https://wg21.link/LWG3622>`__","Misspecified transitivity of equivalence in §[unord.req.general]","2023-02 (Issaquah)","","","`#105100 <https://github.com/llvm/llvm-project/issues/105100>`__",""
-"`LWG3631 <https://wg21.link/LWG3631>`__","``basic_format_arg(T&&)`` should use ``remove_cvref_t<T>`` throughout","2023-02 (Issaquah)","|Complete|","17","`#105101 <https://github.com/llvm/llvm-project/issues/105101>`__",""
-"`LWG3645 <https://wg21.link/LWG3645>`__","``resize_and_overwrite`` is overspecified to call its callback with lvalues","2023-02 (Issaquah)","|Complete|","14","`#105102 <https://github.com/llvm/llvm-project/issues/105102>`__",""
-"`LWG3655 <https://wg21.link/LWG3655>`__","The ``INVOKE`` operation and union types","2023-02 (Issaquah)","|Complete|","18","`#105103 <https://github.com/llvm/llvm-project/issues/105103>`__",""
-"`LWG3723 <https://wg21.link/LWG3723>`__","``priority_queue::push_range`` needs to ``append_range``","2023-02 (Issaquah)","|Complete|","17","`#105104 <https://github.com/llvm/llvm-project/issues/105104>`__",""
-"`LWG3734 <https://wg21.link/LWG3734>`__","Inconsistency in ``inout_ptr`` and ``out_ptr`` for empty case","2023-02 (Issaquah)","|Complete|","19","`#105105 <https://github.com/llvm/llvm-project/issues/105105>`__",""
-"`LWG3772 <https://wg21.link/LWG3772>`__","``repeat_view``'s ``piecewise`` constructor is missing Postconditions","2023-02 (Issaquah)","|Complete|","17","`#105106 <https://github.com/llvm/llvm-project/issues/105106>`__",""
-"`LWG3786 <https://wg21.link/LWG3786>`__","Flat maps' deduction guide needs to default ``Allocator`` to be useful","2023-02 (Issaquah)","","","`#105107 <https://github.com/llvm/llvm-project/issues/105107>`__",""
-"`LWG3803 <https://wg21.link/LWG3803>`__","``flat_foo`` constructors taking ``KeyContainer`` lack ``KeyCompare`` parameter","2023-02 (Issaquah)","","","`#105108 <https://github.com/llvm/llvm-project/issues/105108>`__",""
-"`LWG3810 <https://wg21.link/LWG3810>`__","CTAD for ``std::basic_format_args``","2023-02 (Issaquah)","|Complete|","17","`#105109 <https://github.com/llvm/llvm-project/issues/105109>`__",""
-"`LWG3827 <https://wg21.link/LWG3827>`__","Deprecate ``<stdalign.h>`` and ``<stdbool.h>`` macros","2023-02 (Issaquah)","","","`#105110 <https://github.com/llvm/llvm-project/issues/105110>`__",""
-"`LWG3828 <https://wg21.link/LWG3828>`__","Sync ``intmax_t`` and ``uintmax_t`` with C2x","2023-02 (Issaquah)","|Nothing To Do|","","`#105111 <https://github.com/llvm/llvm-project/issues/105111>`__",""
-"`LWG3833 <https://wg21.link/LWG3833>`__","Remove specialization ``template<size_t N> struct formatter<const charT[N], charT>``","2023-02 (Issaquah)","|Complete|","17","`#105112 <https://github.com/llvm/llvm-project/issues/105112>`__",""
-"`LWG3836 <https://wg21.link/LWG3836>`__","``std::expected<bool, E1>`` conversion constructor ``expected(const expected<U, G>&)`` should take precedence over ``expected(U&&)`` with operator ``bool``","2023-02 (Issaquah)","|Complete|","18","`#105113 <https://github.com/llvm/llvm-project/issues/105113>`__",""
-"`LWG3843 <https://wg21.link/LWG3843>`__","``std::expected<T,E>::value() &`` assumes ``E`` is copy constructible","2023-02 (Issaquah)","|Complete|","17","`#105114 <https://github.com/llvm/llvm-project/issues/105114>`__",""
-"`LWG3847 <https://wg21.link/LWG3847>`__","``ranges::to`` can still return views","2023-02 (Issaquah)","|Complete|","17","`#105115 <https://github.com/llvm/llvm-project/issues/105115>`__",""
-"`LWG3862 <https://wg21.link/LWG3862>`__","``basic_const_iterator``'s ``common_type`` specialization is underconstrained","2023-02 (Issaquah)","","","`#105116 <https://github.com/llvm/llvm-project/issues/105116>`__",""
-"`LWG3865 <https://wg21.link/LWG3865>`__","Sorting a range of ``pairs``","2023-02 (Issaquah)","|Complete|","17","`#105117 <https://github.com/llvm/llvm-project/issues/105117>`__",""
-"`LWG3869 <https://wg21.link/LWG3869>`__","Deprecate ``std::errc`` constants related to UNIX STREAMS","2023-02 (Issaquah)","|Complete|","19","`#105118 <https://github.com/llvm/llvm-project/issues/105118>`__",""
-"`LWG3870 <https://wg21.link/LWG3870>`__","Remove ``voidify``","2023-02 (Issaquah)","|Complete|","20","`#105119 <https://github.com/llvm/llvm-project/issues/105119>`__",""
-"`LWG3871 <https://wg21.link/LWG3871>`__","Adjust note about ``terminate``","2023-02 (Issaquah)","","","`#105122 <https://github.com/llvm/llvm-project/issues/105122>`__",""
-"`LWG3872 <https://wg21.link/LWG3872>`__","``basic_const_iterator`` should have custom ``iter_move``","2023-02 (Issaquah)","","","`#105123 <https://github.com/llvm/llvm-project/issues/105123>`__",""
-"`LWG3875 <https://wg21.link/LWG3875>`__","``std::ranges::repeat_view<T, IntegerClass>::iterator`` may be ill-formed","2023-02 (Issaquah)","|Complete|","17","`#105124 <https://github.com/llvm/llvm-project/issues/105124>`__",""
-"`LWG3876 <https://wg21.link/LWG3876>`__","Default constructor of ``std::layout_XX::mapping`` misses precondition","2023-02 (Issaquah)","","","`#105125 <https://github.com/llvm/llvm-project/issues/105125>`__",""
-"`LWG3877 <https://wg21.link/LWG3877>`__","Incorrect constraints on ``const``-qualified monadic overloads for ``std::expected``","2023-02 (Issaquah)","|Complete|","17","`#105126 <https://github.com/llvm/llvm-project/issues/105126>`__",""
-"`LWG3878 <https://wg21.link/LWG3878>`__","import ``std;`` should guarantee initialization of standard iostreams objects","2023-02 (Issaquah)","","","`#105127 <https://github.com/llvm/llvm-project/issues/105127>`__",""
-"`LWG3879 <https://wg21.link/LWG3879>`__","``erase_if`` for ``flat_{,multi}set`` is incorrectly specified","2023-02 (Issaquah)","","","`#105128 <https://github.com/llvm/llvm-project/issues/105128>`__",""
-"`LWG3880 <https://wg21.link/LWG3880>`__","Clarify ``operator+=`` complexity for ``{chunk,stride}_view::iterator``","2023-02 (Issaquah)","","","`#105129 <https://github.com/llvm/llvm-project/issues/105129>`__",""
-"`LWG3881 <https://wg21.link/LWG3881>`__","Incorrect formatting of container adapters backed by ``std::string``","2023-02 (Issaquah)","|Complete|","17","`#105130 <https://github.com/llvm/llvm-project/issues/105130>`__",""
+"[LWG2195](https://wg21.link/LWG2195)","Missing constructors for `match_results`","2023-02 (Issaquah)","","","[#105062](https://github.com/llvm/llvm-project/issues/105062)",""
+"[LWG2295](https://wg21.link/LWG2295)","Locale name when the provided `Facet` is a `nullptr`","2023-02 (Issaquah)","","","[#105063](https://github.com/llvm/llvm-project/issues/105063)",""
+"[LWG3032](https://wg21.link/LWG3032)","`ValueSwappable` requirement missing for `push_heap` and `make_heap`","2023-02 (Issaquah)","","","[#105064](https://github.com/llvm/llvm-project/issues/105064)",""
+"[LWG3085](https://wg21.link/LWG3085)","`char_traits::copy` precondition too weak","2023-02 (Issaquah)","","","[#105065](https://github.com/llvm/llvm-project/issues/105065)",""
+"[LWG3664](https://wg21.link/LWG3664)","[LWG 3392](https://wg21.link/LWG3392) `broke std::ranges::distance(a, a+3)`","2023-02 (Issaquah)","{{Complete}}","14","[#105066](https://github.com/llvm/llvm-project/issues/105066)",""
+"[LWG3720](https://wg21.link/LWG3720)","Restrict the valid types of `arg-id` for width and precision in `std-format-spec`","2023-02 (Issaquah)","{{Complete}}","17","[#105067](https://github.com/llvm/llvm-project/issues/105067)",""
+"[LWG3756](https://wg21.link/LWG3756)","Is the `std::atomic_flag` class signal-safe?","2023-02 (Issaquah)","","","[#105068](https://github.com/llvm/llvm-project/issues/105068)",""
+"[LWG3769](https://wg21.link/LWG3769)","`basic_const_iterator::operator==` causes infinite constraint recursion","2023-02 (Issaquah)","","","[#105069](https://github.com/llvm/llvm-project/issues/105069)",""
+"[LWG3807](https://wg21.link/LWG3807)","The feature test macro for `ranges::find_last` should be renamed","2023-02 (Issaquah)","","","[#105070](https://github.com/llvm/llvm-project/issues/105070)",""
+"[LWG3811](https://wg21.link/LWG3811)","`views::as_const` on `ref_view<T>` should return `ref_view<const T>`","2023-02 (Issaquah)","","","[#105071](https://github.com/llvm/llvm-project/issues/105071)",""
+"[LWG3820](https://wg21.link/LWG3820)","`cartesian_product_view::iterator::prev` is not quite right","2023-02 (Issaquah)","","","[#105072](https://github.com/llvm/llvm-project/issues/105072)",""
+"[LWG3825](https://wg21.link/LWG3825)","Missing compile-time argument `id` check in `basic_format_parse_context::next_arg_id`","2023-02 (Issaquah)","{{Complete}}","17","[#105073](https://github.com/llvm/llvm-project/issues/105073)",""
+"[LWG3204](https://wg21.link/LWG3204)","`sub_match::swap` only swaps the base class","2023-02 (Issaquah)","{{Complete}}","17","[#105074](https://github.com/llvm/llvm-project/issues/105074)",""
+"[LWG3733](https://wg21.link/LWG3733)","`ranges::to` misuses `cpp17-input-iterator`","2023-02 (Issaquah)","{{Complete}}","17","[#105075](https://github.com/llvm/llvm-project/issues/105075)",""
+"[LWG3742](https://wg21.link/LWG3742)","`deque::prepend_range` needs to permute","2023-02 (Issaquah)","","","[#105077](https://github.com/llvm/llvm-project/issues/105077)",""
+"[LWG3790](https://wg21.link/LWG3790)","[P1467](https://wg21.link/P1467) accidentally changed `nexttoward`'s signature","2023-02 (Issaquah)","","","[#105078](https://github.com/llvm/llvm-project/issues/105078)",""
+"[LWG3819](https://wg21.link/LWG3819)","`reference_meows_from_temporary` should not use `is_meowible`","2023-02 (Issaquah)","","","[#105079](https://github.com/llvm/llvm-project/issues/105079)",""
+"[LWG3821](https://wg21.link/LWG3821)","`uses_allocator_construction_args` should have overload for `pair-like`","2023-02 (Issaquah)","{{Complete}}","18","[#105080](https://github.com/llvm/llvm-project/issues/105080)",""
+"[LWG3834](https://wg21.link/LWG3834)","Missing `constexpr` for `std::intmax_t` math functions in `<cinttypes>`","2023-02 (Issaquah)","","","[#105081](https://github.com/llvm/llvm-project/issues/105081)",""
+"[LWG3839](https://wg21.link/LWG3839)","`range_formatter`'s `set_separator`, `set_brackets`, and `underlying` functions should be `noexcept`","2023-02 (Issaquah)","{{Complete}}","17","[#105082](https://github.com/llvm/llvm-project/issues/105082)",""
+"[LWG3841](https://wg21.link/LWG3841)","`<version>` should not be ""all freestanding""","2023-02 (Issaquah)","","","[#105083](https://github.com/llvm/llvm-project/issues/105083)",""
+"[LWG3842](https://wg21.link/LWG3842)","Unclear wording for `precision` in `chrono-format-spec`","2023-02 (Issaquah)","{{Complete}}","16","[#105085](https://github.com/llvm/llvm-project/issues/105085)",""
+"[LWG3848](https://wg21.link/LWG3848)","`adjacent_view`, `adjacent_transform_view` and `slide_view` missing `base` accessor","2023-02 (Issaquah)","","","[#105086](https://github.com/llvm/llvm-project/issues/105086)",""
+"[LWG3849](https://wg21.link/LWG3849)","`cartesian_product_view::iterator`'s default constructor is overconstrained","2023-02 (Issaquah)","","","[#105087](https://github.com/llvm/llvm-project/issues/105087)",""
+"[LWG3850](https://wg21.link/LWG3850)","`views::as_const` on `empty_view<T>` should return `empty_view<const T>`","2023-02 (Issaquah)","","","[#105088](https://github.com/llvm/llvm-project/issues/105088)",""
+"[LWG3851](https://wg21.link/LWG3851)","`chunk_view::inner-iterator` missing custom `iter_move` and `iter_swap`","2023-02 (Issaquah)","","","[#105089](https://github.com/llvm/llvm-project/issues/105089)",""
+"[LWG3853](https://wg21.link/LWG3853)","`basic_const_iterator<volatile int*>::operator->` is ill-formed","2023-02 (Issaquah)","","","[#105090](https://github.com/llvm/llvm-project/issues/105090)",""
+"[LWG3857](https://wg21.link/LWG3857)","`basic_string_view` should allow explicit conversion when only traits vary","2023-02 (Issaquah)","{{Complete}}","17","[#105092](https://github.com/llvm/llvm-project/issues/105092)",""
+"[LWG3860](https://wg21.link/LWG3860)","`range_common_reference_t` is missing","2023-02 (Issaquah)","{{Complete}}","17","[#105094](https://github.com/llvm/llvm-project/issues/105094)",""
+"[LWG3866](https://wg21.link/LWG3866)","Bad Mandates for `expected::transform_error` overloads","2023-02 (Issaquah)","{{Complete}}","17","[#105095](https://github.com/llvm/llvm-project/issues/105095)",""
+"[LWG3867](https://wg21.link/LWG3867)","Should `std::basic_osyncstream`'s move assignment operator be `noexcept`?","2023-02 (Issaquah)","{{Complete}}","18","[#105097](https://github.com/llvm/llvm-project/issues/105097)",""
+"[LWG3441](https://wg21.link/LWG3441)","Misleading note about calls to customization points","2023-02 (Issaquah)","","","[#105098](https://github.com/llvm/llvm-project/issues/105098)",""
+"[LWG3622](https://wg21.link/LWG3622)","Misspecified transitivity of equivalence in §[unord.req.general]","2023-02 (Issaquah)","","","[#105100](https://github.com/llvm/llvm-project/issues/105100)",""
+"[LWG3631](https://wg21.link/LWG3631)","`basic_format_arg(T&&)` should use `remove_cvref_t<T>` throughout","2023-02 (Issaquah)","{{Complete}}","17","[#105101](https://github.com/llvm/llvm-project/issues/105101)",""
+"[LWG3645](https://wg21.link/LWG3645)","`resize_and_overwrite` is overspecified to call its callback with lvalues","2023-02 (Issaquah)","{{Complete}}","14","[#105102](https://github.com/llvm/llvm-project/issues/105102)",""
+"[LWG3655](https://wg21.link/LWG3655)","The `INVOKE` operation and union types","2023-02 (Issaquah)","{{Complete}}","18","[#105103](https://github.com/llvm/llvm-project/issues/105103)",""
+"[LWG3723](https://wg21.link/LWG3723)","`priority_queue::push_range` needs to `append_range`","2023-02 (Issaquah)","{{Complete}}","17","[#105104](https://github.com/llvm/llvm-project/issues/105104)",""
+"[LWG3734](https://wg21.link/LWG3734)","Inconsistency in `inout_ptr` and `out_ptr` for empty case","2023-02 (Issaquah)","{{Complete}}","19","[#105105](https://github.com/llvm/llvm-project/issues/105105)",""
+"[LWG3772](https://wg21.link/LWG3772)","`repeat_view`'s `piecewise` constructor is missing Postconditions","2023-02 (Issaquah)","{{Complete}}","17","[#105106](https://github.com/llvm/llvm-project/issues/105106)",""
+"[LWG3786](https://wg21.link/LWG3786)","Flat maps' deduction guide needs to default `Allocator` to be useful","2023-02 (Issaquah)","","","[#105107](https://github.com/llvm/llvm-project/issues/105107)",""
+"[LWG3803](https://wg21.link/LWG3803)","`flat_foo` constructors taking `KeyContainer` lack `KeyCompare` parameter","2023-02 (Issaquah)","","","[#105108](https://github.com/llvm/llvm-project/issues/105108)",""
+"[LWG3810](https://wg21.link/LWG3810)","CTAD for `std::basic_format_args`","2023-02 (Issaquah)","{{Complete}}","17","[#105109](https://github.com/llvm/llvm-project/issues/105109)",""
+"[LWG3827](https://wg21.link/LWG3827)","Deprecate `<stdalign.h>` and `<stdbool.h>` macros","2023-02 (Issaquah)","","","[#105110](https://github.com/llvm/llvm-project/issues/105110)",""
+"[LWG3828](https://wg21.link/LWG3828)","Sync `intmax_t` and `uintmax_t` with C2x","2023-02 (Issaquah)","{{NothingToDo}}","","[#105111](https://github.com/llvm/llvm-project/issues/105111)",""
+"[LWG3833](https://wg21.link/LWG3833)","Remove specialization `template<size_t N> struct formatter<const charT[N], charT>`","2023-02 (Issaquah)","{{Complete}}","17","[#105112](https://github.com/llvm/llvm-project/issues/105112)",""
+"[LWG3836](https://wg21.link/LWG3836)","`std::expected<bool, E1>` conversion constructor `expected(const expected<U, G>&)` should take precedence over `expected(U&&)` with operator `bool`","2023-02 (Issaquah)","{{Complete}}","18","[#105113](https://github.com/llvm/llvm-project/issues/105113)",""
+"[LWG3843](https://wg21.link/LWG3843)","`std::expected<T,E>::value() &` assumes `E` is copy constructible","2023-02 (Issaquah)","{{Complete}}","17","[#105114](https://github.com/llvm/llvm-project/issues/105114)",""
+"[LWG3847](https://wg21.link/LWG3847)","`ranges::to` can still return views","2023-02 (Issaquah)","{{Complete}}","17","[#105115](https://github.com/llvm/llvm-project/issues/105115)",""
+"[LWG3862](https://wg21.link/LWG3862)","`basic_const_iterator`'s `common_type` specialization is underconstrained","2023-02 (Issaquah)","","","[#105116](https://github.com/llvm/llvm-project/issues/105116)",""
+"[LWG3865](https://wg21.link/LWG3865)","Sorting a range of `pairs`","2023-02 (Issaquah)","{{Complete}}","17","[#105117](https://github.com/llvm/llvm-project/issues/105117)",""
+"[LWG3869](https://wg21.link/LWG3869)","Deprecate `std::errc` constants related to UNIX STREAMS","2023-02 (Issaquah)","{{Complete}}","19","[#105118](https://github.com/llvm/llvm-project/issues/105118)",""
+"[LWG3870](https://wg21.link/LWG3870)","Remove `voidify`","2023-02 (Issaquah)","{{Complete}}","20","[#105119](https://github.com/llvm/llvm-project/issues/105119)",""
+"[LWG3871](https://wg21.link/LWG3871)","Adjust note about `terminate`","2023-02 (Issaquah)","","","[#105122](https://github.com/llvm/llvm-project/issues/105122)",""
+"[LWG3872](https://wg21.link/LWG3872)","`basic_const_iterator` should have custom `iter_move`","2023-02 (Issaquah)","","","[#105123](https://github.com/llvm/llvm-project/issues/105123)",""
+"[LWG3875](https://wg21.link/LWG3875)","`std::ranges::repeat_view<T, IntegerClass>::iterator` may be ill-formed","2023-02 (Issaquah)","{{Complete}}","17","[#105124](https://github.com/llvm/llvm-project/issues/105124)",""
+"[LWG3876](https://wg21.link/LWG3876)","Default constructor of `std::layout_XX::mapping` misses precondition","2023-02 (Issaquah)","","","[#105125](https://github.com/llvm/llvm-project/issues/105125)",""
+"[LWG3877](https://wg21.link/LWG3877)","Incorrect constraints on `const`-qualified monadic overloads for `std::expected`","2023-02 (Issaquah)","{{Complete}}","17","[#105126](https://github.com/llvm/llvm-project/issues/105126)",""
+"[LWG3878](https://wg21.link/LWG3878)","import `std;` should guarantee initialization of standard iostreams objects","2023-02 (Issaquah)","","","[#105127](https://github.com/llvm/llvm-project/issues/105127)",""
+"[LWG3879](https://wg21.link/LWG3879)","`erase_if` for `flat_{,multi}set` is incorrectly specified","2023-02 (Issaquah)","","","[#105128](https://github.com/llvm/llvm-project/issues/105128)",""
+"[LWG3880](https://wg21.link/LWG3880)","Clarify `operator+=` complexity for `{chunk,stride}_view::iterator`","2023-02 (Issaquah)","","","[#105129](https://github.com/llvm/llvm-project/issues/105129)",""
+"[LWG3881](https://wg21.link/LWG3881)","Incorrect formatting of container adapters backed by `std::string`","2023-02 (Issaquah)","{{Complete}}","17","[#105130](https://github.com/llvm/llvm-project/issues/105130)",""
diff --git a/libcxx/docs/Status/Cxx23Papers.csv b/libcxx/docs/Status/Cxx23Papers.csv
index 0c608bd2bc1da..0472bf2d03660 100644
--- a/libcxx/docs/Status/Cxx23Papers.csv
+++ b/libcxx/docs/Status/Cxx23Papers.csv
@@ -1,122 +1,122 @@
"Paper #","Paper Name","Meeting","Status","First released version","GitHub issue","Notes"
-"`P0881R7 <https://wg21.link/P0881R7>`__","A Proposal to add stacktrace library","2020-11 (Virtual)","","","`#105131 <https://github.com/llvm/llvm-project/issues/105131>`__",""
-"`P0943R6 <https://wg21.link/P0943R6>`__","Support C atomics in C++","2020-11 (Virtual)","|Complete|","15","`#105132 <https://github.com/llvm/llvm-project/issues/105132>`__",""
-"`P1048R1 <https://wg21.link/P1048R1>`__","A proposal for a type trait to detect scoped enumerations","2020-11 (Virtual)","|Complete|","12","`#105134 <https://github.com/llvm/llvm-project/issues/105134>`__",""
-"`P1679R3 <https://wg21.link/P1679R3>`__","string contains function","2020-11 (Virtual)","|Complete|","12","`#105135 <https://github.com/llvm/llvm-project/issues/105135>`__",""
+"[P0881R7](https://wg21.link/P0881R7)","A Proposal to add stacktrace library","2020-11 (Virtual)","","","[#105131](https://github.com/llvm/llvm-project/issues/105131)",""
+"[P0943R6](https://wg21.link/P0943R6)","Support C atomics in C++","2020-11 (Virtual)","{{Complete}}","15","[#105132](https://github.com/llvm/llvm-project/issues/105132)",""
+"[P1048R1](https://wg21.link/P1048R1)","A proposal for a type trait to detect scoped enumerations","2020-11 (Virtual)","{{Complete}}","12","[#105134](https://github.com/llvm/llvm-project/issues/105134)",""
+"[P1679R3](https://wg21.link/P1679R3)","string contains function","2020-11 (Virtual)","{{Complete}}","12","[#105135](https://github.com/llvm/llvm-project/issues/105135)",""
"","","","","","",""
-"`P1682R3 <https://wg21.link/P1682R3>`__","std::to_underlying for enumerations","2021-02 (Virtual)","|Complete|","13","`#105136 <https://github.com/llvm/llvm-project/issues/105136>`__",""
-"`P2017R1 <https://wg21.link/P2017R1>`__","Conditionally borrowed ranges","2021-02 (Virtual)","|Complete|","16","`#105138 <https://github.com/llvm/llvm-project/issues/105138>`__",""
-"`P2160R1 <https://wg21.link/P2160R1>`__","Locks lock lockables","2021-02 (Virtual)","|Nothing To Do|","","`#105139 <https://github.com/llvm/llvm-project/issues/105139>`__",""
-"`P2162R2 <https://wg21.link/P2162R2>`__","Inheriting from std::variant","2021-02 (Virtual)","|Complete|","13","`#105140 <https://github.com/llvm/llvm-project/issues/105140>`__",""
-"`P2212R2 <https://wg21.link/P2212R2>`__","Relax Requirements for time_point::clock","2021-02 (Virtual)","|Nothing To Do|","","`#105141 <https://github.com/llvm/llvm-project/issues/105141>`__",""
-"`P2259R1 <https://wg21.link/P2259R1>`__","Repairing input range adaptors and counted_iterator","2021-02 (Virtual)","","","`#105142 <https://github.com/llvm/llvm-project/issues/105142>`__",""
+"[P1682R3](https://wg21.link/P1682R3)","std::to_underlying for enumerations","2021-02 (Virtual)","{{Complete}}","13","[#105136](https://github.com/llvm/llvm-project/issues/105136)",""
+"[P2017R1](https://wg21.link/P2017R1)","Conditionally borrowed ranges","2021-02 (Virtual)","{{Complete}}","16","[#105138](https://github.com/llvm/llvm-project/issues/105138)",""
+"[P2160R1](https://wg21.link/P2160R1)","Locks lock lockables","2021-02 (Virtual)","{{NothingToDo}}","","[#105139](https://github.com/llvm/llvm-project/issues/105139)",""
+"[P2162R2](https://wg21.link/P2162R2)","Inheriting from std::variant","2021-02 (Virtual)","{{Complete}}","13","[#105140](https://github.com/llvm/llvm-project/issues/105140)",""
+"[P2212R2](https://wg21.link/P2212R2)","Relax Requirements for time_point::clock","2021-02 (Virtual)","{{NothingToDo}}","","[#105141](https://github.com/llvm/llvm-project/issues/105141)",""
+"[P2259R1](https://wg21.link/P2259R1)","Repairing input range adaptors and counted_iterator","2021-02 (Virtual)","","","[#105142](https://github.com/llvm/llvm-project/issues/105142)",""
"","","","","","",""
-"`P0401R6 <https://wg21.link/P0401R6>`__","Providing size feedback in the Allocator interface","2021-06 (Virtual)","|Complete|","15","`#105144 <https://github.com/llvm/llvm-project/issues/105144>`__",""
-"`P0448R4 <https://wg21.link/P0448R4>`__","A strstream replacement using span<charT> as buffer","2021-06 (Virtual)","","","`#105145 <https://github.com/llvm/llvm-project/issues/105145>`__",""
-"`P1132R8 <https://wg21.link/P1132R8>`__","out_ptr - a scalable output pointer abstraction","2021-06 (Virtual)","|Complete|","19","`#105146 <https://github.com/llvm/llvm-project/issues/105146>`__",""
-"`P1328R1 <https://wg21.link/P1328R1>`__","Making std::type_info::operator== constexpr","2021-06 (Virtual)","|Complete|","17","`#105147 <https://github.com/llvm/llvm-project/issues/105147>`__",""
-"`P1425R4 <https://wg21.link/P1425R4>`__","Iterators pair constructors for stack and queue","2021-06 (Virtual)","|Complete|","14","`#105149 <https://github.com/llvm/llvm-project/issues/105149>`__",""
-"`P1518R2 <https://wg21.link/P1518R2>`__","Stop overconstraining allocators in container deduction guides","2021-06 (Virtual)","|Complete|","13","`#105150 <https://github.com/llvm/llvm-project/issues/105150>`__",""
-"`P1659R3 <https://wg21.link/P1659R3>`__","starts_with and ends_with","2021-06 (Virtual)","|Complete|","19","`#105151 <https://github.com/llvm/llvm-project/issues/105151>`__",""
-"`P1951R1 <https://wg21.link/P1951R1>`__","Default Arguments for pair Forwarding Constructor","2021-06 (Virtual)","|Complete|","14","`#105153 <https://github.com/llvm/llvm-project/issues/105153>`__",""
-"`P1989R2 <https://wg21.link/P1989R2>`__","Range constructor for std::string_view","2021-06 (Virtual)","|Complete|","14","`#105154 <https://github.com/llvm/llvm-project/issues/105154>`__",""
-"`P2136R3 <https://wg21.link/P2136R3>`__","invoke_r","2021-06 (Virtual)","|Complete|","17","`#105155 <https://github.com/llvm/llvm-project/issues/105155>`__",""
-"`P2166R1 <https://wg21.link/P2166R1>`__","A Proposal to Prohibit std::basic_string and std::basic_string_view construction from nullptr","2021-06 (Virtual)","|Complete|","13","`#105156 <https://github.com/llvm/llvm-project/issues/105156>`__",""
+"[P0401R6](https://wg21.link/P0401R6)","Providing size feedback in the Allocator interface","2021-06 (Virtual)","{{Complete}}","15","[#105144](https://github.com/llvm/llvm-project/issues/105144)",""
+"[P0448R4](https://wg21.link/P0448R4)","A strstream replacement using span\<charT\> as buffer","2021-06 (Virtual)","","","[#105145](https://github.com/llvm/llvm-project/issues/105145)",""
+"[P1132R8](https://wg21.link/P1132R8)","out_ptr - a scalable output pointer abstraction","2021-06 (Virtual)","{{Complete}}","19","[#105146](https://github.com/llvm/llvm-project/issues/105146)",""
+"[P1328R1](https://wg21.link/P1328R1)","Making std::type_info::operator== constexpr","2021-06 (Virtual)","{{Complete}}","17","[#105147](https://github.com/llvm/llvm-project/issues/105147)",""
+"[P1425R4](https://wg21.link/P1425R4)","Iterators pair constructors for stack and queue","2021-06 (Virtual)","{{Complete}}","14","[#105149](https://github.com/llvm/llvm-project/issues/105149)",""
+"[P1518R2](https://wg21.link/P1518R2)","Stop overconstraining allocators in container deduction guides","2021-06 (Virtual)","{{Complete}}","13","[#105150](https://github.com/llvm/llvm-project/issues/105150)",""
+"[P1659R3](https://wg21.link/P1659R3)","starts_with and ends_with","2021-06 (Virtual)","{{Complete}}","19","[#105151](https://github.com/llvm/llvm-project/issues/105151)",""
+"[P1951R1](https://wg21.link/P1951R1)","Default Arguments for pair Forwarding Constructor","2021-06 (Virtual)","{{Complete}}","14","[#105153](https://github.com/llvm/llvm-project/issues/105153)",""
+"[P1989R2](https://wg21.link/P1989R2)","Range constructor for std::string_view","2021-06 (Virtual)","{{Complete}}","14","[#105154](https://github.com/llvm/llvm-project/issues/105154)",""
+"[P2136R3](https://wg21.link/P2136R3)","invoke_r","2021-06 (Virtual)","{{Complete}}","17","[#105155](https://github.com/llvm/llvm-project/issues/105155)",""
+"[P2166R1](https://wg21.link/P2166R1)","A Proposal to Prohibit std::basic_string and std::basic_string_view construction from nullptr","2021-06 (Virtual)","{{Complete}}","13","[#105156](https://github.com/llvm/llvm-project/issues/105156)",""
"","","","","","",""
-"`P0288R9 <https://wg21.link/P0288R9>`__","``any_invocable``","2021-10 (Virtual)","","","`#105157 <https://github.com/llvm/llvm-project/issues/105157>`__",""
-"`P0798R8 <https://wg21.link/P0798R8>`__","Monadic operations for ``std::optional``","2021-10 (Virtual)","|Complete|","14","`#105158 <https://github.com/llvm/llvm-project/issues/105158>`__",""
-"`P0849R8 <https://wg21.link/P0849R8>`__","``auto(x)``: ``DECAY_COPY`` in the language","2021-10 (Virtual)","|Complete|","14","`#105159 <https://github.com/llvm/llvm-project/issues/105159>`__",""
-"`P1072R10 <https://wg21.link/P1072R10>`__","``basic_string::resize_and_overwrite``","2021-10 (Virtual)","|Complete|","14","`#105160 <https://github.com/llvm/llvm-project/issues/105160>`__",""
-"`P1147R1 <https://wg21.link/P1147R1>`__","Printing ``volatile`` Pointers","2021-10 (Virtual)","|Complete|","14","`#105161 <https://github.com/llvm/llvm-project/issues/105161>`__",""
-"`P1272R4 <https://wg21.link/P1272R4>`__","Byteswapping for fun&&nuf","2021-10 (Virtual)","|Complete|","14","`#105163 <https://github.com/llvm/llvm-project/issues/105163>`__",""
-"`P1675R2 <https://wg21.link/P1675R2>`__","``rethrow_exception`` must be allowed to copy","2021-10 (Virtual)","|Nothing To Do|","","`#105164 <https://github.com/llvm/llvm-project/issues/105164>`__",""
-"`P2077R3 <https://wg21.link/P2077R3>`__","Heterogeneous erasure overloads for associative containers","2021-10 (Virtual)","","","`#105165 <https://github.com/llvm/llvm-project/issues/105165>`__",""
-"`P2251R1 <https://wg21.link/P2251R1>`__","Require ``span`` & ``basic_string_view`` to be Trivially Copyable","2021-10 (Virtual)","|Complete|","14","`#105166 <https://github.com/llvm/llvm-project/issues/105166>`__",""
-"`P2301R1 <https://wg21.link/P2301R1>`__","Add a ``pmr`` alias for ``std::stacktrace``","2021-10 (Virtual)","","","`#105167 <https://github.com/llvm/llvm-project/issues/105167>`__",""
-"`P2321R2 <https://wg21.link/P2321R2>`__","``zip``","2021-10 (Virtual)","|Complete|","22","`#105169 <https://github.com/llvm/llvm-project/issues/105169>`__",""
-"`P2340R1 <https://wg21.link/P2340R1>`__","Clarifying the status of the 'C headers'","2021-10 (Virtual)","|Nothing To Do|","","`#105170 <https://github.com/llvm/llvm-project/issues/105170>`__",""
-"`P2393R1 <https://wg21.link/P2393R1>`__","Cleaning up ``integer``-class types","2021-10 (Virtual)","","","`#105171 <https://github.com/llvm/llvm-project/issues/105171>`__",""
-"`P2401R0 <https://wg21.link/P2401R0>`__","Add a conditional ``noexcept`` specification to ``std::exchange``","2021-10 (Virtual)","|Complete|","14","`#105172 <https://github.com/llvm/llvm-project/issues/105172>`__",""
+"[P0288R9](https://wg21.link/P0288R9)","`any_invocable`","2021-10 (Virtual)","","","[#105157](https://github.com/llvm/llvm-project/issues/105157)",""
+"[P0798R8](https://wg21.link/P0798R8)","Monadic operations for `std::optional`","2021-10 (Virtual)","{{Complete}}","14","[#105158](https://github.com/llvm/llvm-project/issues/105158)",""
+"[P0849R8](https://wg21.link/P0849R8)","`auto(x)`: `DECAY_COPY` in the language","2021-10 (Virtual)","{{Complete}}","14","[#105159](https://github.com/llvm/llvm-project/issues/105159)",""
+"[P1072R10](https://wg21.link/P1072R10)","`basic_string::resize_and_overwrite`","2021-10 (Virtual)","{{Complete}}","14","[#105160](https://github.com/llvm/llvm-project/issues/105160)",""
+"[P1147R1](https://wg21.link/P1147R1)","Printing `volatile` Pointers","2021-10 (Virtual)","{{Complete}}","14","[#105161](https://github.com/llvm/llvm-project/issues/105161)",""
+"[P1272R4](https://wg21.link/P1272R4)","Byteswapping for fun&&nuf","2021-10 (Virtual)","{{Complete}}","14","[#105163](https://github.com/llvm/llvm-project/issues/105163)",""
+"[P1675R2](https://wg21.link/P1675R2)","`rethrow_exception` must be allowed to copy","2021-10 (Virtual)","{{NothingToDo}}","","[#105164](https://github.com/llvm/llvm-project/issues/105164)",""
+"[P2077R3](https://wg21.link/P2077R3)","Heterogeneous erasure overloads for associative containers","2021-10 (Virtual)","","","[#105165](https://github.com/llvm/llvm-project/issues/105165)",""
+"[P2251R1](https://wg21.link/P2251R1)","Require `span` & `basic_string_view` to be Trivially Copyable","2021-10 (Virtual)","{{Complete}}","14","[#105166](https://github.com/llvm/llvm-project/issues/105166)",""
+"[P2301R1](https://wg21.link/P2301R1)","Add a `pmr` alias for `std::stacktrace`","2021-10 (Virtual)","","","[#105167](https://github.com/llvm/llvm-project/issues/105167)",""
+"[P2321R2](https://wg21.link/P2321R2)","`zip`","2021-10 (Virtual)","{{Complete}}","22","[#105169](https://github.com/llvm/llvm-project/issues/105169)",""
+"[P2340R1](https://wg21.link/P2340R1)","Clarifying the status of the 'C headers'","2021-10 (Virtual)","{{NothingToDo}}","","[#105170](https://github.com/llvm/llvm-project/issues/105170)",""
+"[P2393R1](https://wg21.link/P2393R1)","Cleaning up `integer`-class types","2021-10 (Virtual)","","","[#105171](https://github.com/llvm/llvm-project/issues/105171)",""
+"[P2401R0](https://wg21.link/P2401R0)","Add a conditional `noexcept` specification to `std::exchange`","2021-10 (Virtual)","{{Complete}}","14","[#105172](https://github.com/llvm/llvm-project/issues/105172)",""
"","","","","","",""
-"`P0323R12 <https://wg21.link/P0323R12>`__","``std::expected``","2022-02 (Virtual)","|Complete|","16","`#105173 <https://github.com/llvm/llvm-project/issues/105173>`__",""
-"`P0533R9 <https://wg21.link/P0533R9>`__","``constexpr`` for ``<cmath>`` and ``<cstdlib>``","2022-02 (Virtual)","|In Progress|","","`#105174 <https://github.com/llvm/llvm-project/issues/105174>`__","``isfinite``, ``isinf``, ``isnan`` and ``isnormal`` are implemented"
-"`P0627R6 <https://wg21.link/P0627R6>`__","Function to mark unreachable code","2022-02 (Virtual)","|Complete|","15","`#105175 <https://github.com/llvm/llvm-project/issues/105175>`__",""
-"`P1206R7 <https://wg21.link/P1206R7>`__","``ranges::to``: A function to convert any range to a container","2022-02 (Virtual)","|Complete|","17","`#105176 <https://github.com/llvm/llvm-project/issues/105176>`__",""
-"`P1413R3 <https://wg21.link/P1413R3>`__","Deprecate ``std::aligned_storage`` and ``std::aligned_union``","2022-02 (Virtual)","|Complete|","","`#105177 <https://github.com/llvm/llvm-project/issues/105177>`__","``std::aligned_storage_t`` and ``std::aligned_union_t`` are marked deprecated, but clang doesn't issue a diagnostic for deprecated using template declarations."
-"`P2255R2 <https://wg21.link/P2255R2>`__","A type trait to detect reference binding to temporary","2022-02 (Virtual)","|Partial|","","`#105180 <https://github.com/llvm/llvm-project/issues/105180>`__","Implemented the type traits only."
-"`P2273R3 <https://wg21.link/P2273R3>`__","Making ``std::unique_ptr`` constexpr","2022-02 (Virtual)","|Complete|","16","`#105182 <https://github.com/llvm/llvm-project/issues/105182>`__",""
-"`P2387R3 <https://wg21.link/P2387R3>`__","Pipe support for user-defined range adaptors","2022-02 (Virtual)","|Complete|","19","`#105183 <https://github.com/llvm/llvm-project/issues/105183>`__",""
-"`P2440R1 <https://wg21.link/P2440R1>`__","``ranges::iota``, ``ranges::shift_left`` and ``ranges::shift_right``","2022-02 (Virtual)","|Complete|","23","`#105184 <https://github.com/llvm/llvm-project/issues/105184>`__",""
-"`P2441R2 <https://wg21.link/P2441R2>`__","``views::join_with``","2022-02 (Virtual)","|Complete|","21","`#105185 <https://github.com/llvm/llvm-project/issues/105185>`__",""
-"`P2442R1 <https://wg21.link/P2442R1>`__","Windowing range adaptors: ``views::chunk`` and ``views::slide``","2022-02 (Virtual)","","","`#105187 <https://github.com/llvm/llvm-project/issues/105187>`__",""
-"`P2443R1 <https://wg21.link/P2443R1>`__","``views::chunk_by``","2022-02 (Virtual)","|Complete|","18","`#105188 <https://github.com/llvm/llvm-project/issues/105188>`__",""
+"[P0323R12](https://wg21.link/P0323R12)","`std::expected`","2022-02 (Virtual)","{{Complete}}","16","[#105173](https://github.com/llvm/llvm-project/issues/105173)",""
+"[P0533R9](https://wg21.link/P0533R9)","`constexpr` for `<cmath>` and `<cstdlib>`","2022-02 (Virtual)","{{InProgress}}","","[#105174](https://github.com/llvm/llvm-project/issues/105174)","`isfinite`, `isinf`, `isnan` and `isnormal` are implemented"
+"[P0627R6](https://wg21.link/P0627R6)","Function to mark unreachable code","2022-02 (Virtual)","{{Complete}}","15","[#105175](https://github.com/llvm/llvm-project/issues/105175)",""
+"[P1206R7](https://wg21.link/P1206R7)","`ranges::to`: A function to convert any range to a container","2022-02 (Virtual)","{{Complete}}","17","[#105176](https://github.com/llvm/llvm-project/issues/105176)",""
+"[P1413R3](https://wg21.link/P1413R3)","Deprecate `std::aligned_storage` and `std::aligned_union`","2022-02 (Virtual)","{{Complete}}","","[#105177](https://github.com/llvm/llvm-project/issues/105177)","`std::aligned_storage_t` and `std::aligned_union_t` are marked deprecated, but clang doesn't issue a diagnostic for deprecated using template declarations."
+"[P2255R2](https://wg21.link/P2255R2)","A type trait to detect reference binding to temporary","2022-02 (Virtual)","{{Partial}}","","[#105180](https://github.com/llvm/llvm-project/issues/105180)","Implemented the type traits only."
+"[P2273R3](https://wg21.link/P2273R3)","Making `std::unique_ptr` constexpr","2022-02 (Virtual)","{{Complete}}","16","[#105182](https://github.com/llvm/llvm-project/issues/105182)",""
+"[P2387R3](https://wg21.link/P2387R3)","Pipe support for user-defined range adaptors","2022-02 (Virtual)","{{Complete}}","19","[#105183](https://github.com/llvm/llvm-project/issues/105183)",""
+"[P2440R1](https://wg21.link/P2440R1)","`ranges::iota`, `ranges::shift_left` and `ranges::shift_right`","2022-02 (Virtual)","{{Complete}}","23","[#105184](https://github.com/llvm/llvm-project/issues/105184)",""
+"[P2441R2](https://wg21.link/P2441R2)","`views::join_with`","2022-02 (Virtual)","{{Complete}}","21","[#105185](https://github.com/llvm/llvm-project/issues/105185)",""
+"[P2442R1](https://wg21.link/P2442R1)","Windowing range adaptors: `views::chunk` and `views::slide`","2022-02 (Virtual)","","","[#105187](https://github.com/llvm/llvm-project/issues/105187)",""
+"[P2443R1](https://wg21.link/P2443R1)","`views::chunk_by`","2022-02 (Virtual)","{{Complete}}","18","[#105188](https://github.com/llvm/llvm-project/issues/105188)",""
"","","","","","",""
-"`P0009R18 <https://wg21.link/P0009R18>`__","mdspan: A Non-Owning Multidimensional Array Reference","2022-07 (Virtual)","|Complete|","18","`#105189 <https://github.com/llvm/llvm-project/issues/105189>`__",""
-"`P0429R9 <https://wg21.link/P0429R9>`__","A Standard ``flat_map``","2022-07 (Virtual)","|Complete|","20","`#105190 <https://github.com/llvm/llvm-project/issues/105190>`__",""
-"`P1169R4 <https://wg21.link/P1169R4>`__","``static operator()``","2022-07 (Virtual)","|Complete|","16","`#105192 <https://github.com/llvm/llvm-project/issues/105192>`__",""
-"`P1222R4 <https://wg21.link/P1222R4>`__","A Standard ``flat_set``","2022-07 (Virtual)","|Complete|","21","`#105193 <https://github.com/llvm/llvm-project/issues/105193>`__",""
-"`P1223R5 <https://wg21.link/P1223R5>`__","``ranges::find_last()``, ``ranges::find_last_if()``, and ``ranges::find_last_if_not()``","2022-07 (Virtual)","|Complete|","19","`#105194 <https://github.com/llvm/llvm-project/issues/105194>`__",""
-"`P1467R9 <https://wg21.link/P1467R9>`__","Extended ``floating-point`` types and standard names","2022-07 (Virtual)","","","`#105196 <https://github.com/llvm/llvm-project/issues/105196>`__",""
-"`P1642R11 <https://wg21.link/P1642R11>`__","Freestanding ``[utilities]``, ``[ranges]``, and ``[iterators]``","2022-07 (Virtual)","","","`#105197 <https://github.com/llvm/llvm-project/issues/105197>`__",""
-"`P1899R3 <https://wg21.link/P1899R3>`__","``stride_view``","2022-07 (Virtual)","|Complete|","23","`#105198 <https://github.com/llvm/llvm-project/issues/105198>`__",""
-"`P2093R14 <https://wg21.link/P2093R14>`__","Formatted output","2022-07 (Virtual)","|Complete|","18","`#105199 <https://github.com/llvm/llvm-project/issues/105199>`__",""
-"`P2165R4 <https://wg21.link/P2165R4>`__","Compatibility between ``tuple``, ``pair`` and ``tuple-like`` objects","2022-07 (Virtual)","|Partial|","","`#105200 <https://github.com/llvm/llvm-project/issues/105200>`__","Only the part for ``zip_view`` is implemented."
-"`P2278R4 <https://wg21.link/P2278R4>`__","``cbegin`` should always return a constant iterator","2022-07 (Virtual)","","","`#105201 <https://github.com/llvm/llvm-project/issues/105201>`__",""
-"`P2286R8 <https://wg21.link/P2286R8>`__","Formatting Ranges","2022-07 (Virtual)","|Complete|","16","`#105202 <https://github.com/llvm/llvm-project/issues/105202>`__",""
-"`P2291R3 <https://wg21.link/P2291R3>`__","Add Constexpr Modifiers to Functions ``to_chars`` and ``from_chars`` for Integral Types in ``<charconv>`` Header","2022-07 (Virtual)","|Complete|","16","`#105204 <https://github.com/llvm/llvm-project/issues/105204>`__",""
-"`P2302R4 <https://wg21.link/P2302R4>`__","``std::ranges::contains``","2022-07 (Virtual)","|Complete|","19","`#105206 <https://github.com/llvm/llvm-project/issues/105206>`__",""
-"`P2322R6 <https://wg21.link/P2322R6>`__","``ranges::fold``","2022-07 (Virtual)","|Complete|","23","`#105208 <https://github.com/llvm/llvm-project/issues/105208>`__",""
-"`P2374R4 <https://wg21.link/P2374R4>`__","``views::cartesian_product``","2022-07 (Virtual)","","","`#105209 <https://github.com/llvm/llvm-project/issues/105209>`__",""
-"`P2404R3 <https://wg21.link/P2404R3>`__","Move-only types for ``equality_comparable_with``, ``totally_ordered_with``, and ``three_way_comparable_with``","2022-07 (Virtual)","|Complete|","22","`#105210 <https://github.com/llvm/llvm-project/issues/105210>`__","Implemented as a DR in C++20."
-"`P2408R5 <https://wg21.link/P2408R5>`__","Ranges iterators as inputs to non-Ranges algorithms","2022-07 (Virtual)","","","`#105211 <https://github.com/llvm/llvm-project/issues/105211>`__",""
-"`P2417R2 <https://wg21.link/P2417R2>`__","A more ``constexpr`` ``bitset``","2022-07 (Virtual)","|Complete|","16","`#105212 <https://github.com/llvm/llvm-project/issues/105212>`__",""
-"`P2419R2 <https://wg21.link/P2419R2>`__","Clarify handling of encodings in localized formatting of chrono types","2022-07 (Virtual)","","","`#105213 <https://github.com/llvm/llvm-project/issues/105213>`__",""
-"`P2438R2 <https://wg21.link/P2438R2>`__","``std::string::substr() &&``","2022-07 (Virtual)","|Complete|","16","`#105215 <https://github.com/llvm/llvm-project/issues/105215>`__",""
-"`P2445R1 <https://wg21.link/P2445R1>`__","``forward_like``","2022-07 (Virtual)","|Complete|","16","`#105216 <https://github.com/llvm/llvm-project/issues/105216>`__",""
-"`P2446R2 <https://wg21.link/P2446R2>`__","``views::as_rvalue``","2022-07 (Virtual)","|Complete|","16","`#105217 <https://github.com/llvm/llvm-project/issues/105217>`__",""
-"`P2460R2 <https://wg21.link/P2460R2>`__","Relax requirements on ``wchar_t`` to match existing practices","2022-07 (Virtual)","|Nothing To Do|","","`#105218 <https://github.com/llvm/llvm-project/issues/105218>`__",""
-"`P2465R3 <https://wg21.link/P2465R3>`__","Standard Library Modules ``std`` and ``std.compat``","2022-07 (Virtual)","|Complete|","19","`#105219 <https://github.com/llvm/llvm-project/issues/105219>`__",""
-"`P2467R1 <https://wg21.link/P2467R1>`__","Support exclusive mode for ``fstreams``","2022-07 (Virtual)","|Complete|","18","`#105221 <https://github.com/llvm/llvm-project/issues/105221>`__",""
-"`P2474R2 <https://wg21.link/P2474R2>`__","``views::repeat``","2022-07 (Virtual)","|Complete|","17","`#105222 <https://github.com/llvm/llvm-project/issues/105222>`__",""
-"`P2494R2 <https://wg21.link/P2494R2>`__","Relaxing range adaptors to allow for move only types","2022-07 (Virtual)","|Complete|","17","`#105224 <https://github.com/llvm/llvm-project/issues/105224>`__",""
-"`P2499R0 <https://wg21.link/P2499R0>`__","``string_view`` range constructor should be ``explicit``","2022-07 (Virtual)","|Complete|","16","`#105225 <https://github.com/llvm/llvm-project/issues/105225>`__",""
-"`P2502R2 <https://wg21.link/P2502R2>`__","``std::generator``: Synchronous Coroutine Generator for Ranges","2022-07 (Virtual)","","","`#105226 <https://github.com/llvm/llvm-project/issues/105226>`__",""
-"`P2508R1 <https://wg21.link/P2508R1>`__","Exposing ``std::basic-format-string``","2022-07 (Virtual)","|Complete|","15","`#105227 <https://github.com/llvm/llvm-project/issues/105227>`__",""
-"`P2517R1 <https://wg21.link/P2517R1>`__","Add a conditional ``noexcept`` specification to ``std::apply``","2022-07 (Virtual)","|Complete|","3.9","`#105229 <https://github.com/llvm/llvm-project/issues/105229>`__",""
-"`P2520R0 <https://wg21.link/P2520R0>`__","``move_iterator`` should be a random access iterator","2022-07 (Virtual)","|Complete|","17","`#105230 <https://github.com/llvm/llvm-project/issues/105230>`__","Implemented as a DR in C++20"
-"`P2540R1 <https://wg21.link/P2540R1>`__","Empty Product for certain Views","2022-07 (Virtual)","","","`#105231 <https://github.com/llvm/llvm-project/issues/105231>`__",""
-"`P2549R1 <https://wg21.link/P2549R1>`__","``std::unexpected`` should have ``error()`` as member accessor","2022-07 (Virtual)","|Complete|","16","`#105232 <https://github.com/llvm/llvm-project/issues/105232>`__",""
-"`P2585R0 <https://wg21.link/P2585R0>`__","Improving default container formatting","2022-07 (Virtual)","|Complete|","17","`#105233 <https://github.com/llvm/llvm-project/issues/105233>`__",""
-"`P2590R2 <https://wg21.link/P2590R2>`__","Explicit lifetime management","2022-07 (Virtual)","","","`#105234 <https://github.com/llvm/llvm-project/issues/105234>`__",""
-"`P2599R2 <https://wg21.link/P2599R2>`__","``mdspan::size_type`` should be ``index_type``","2022-07 (Virtual)","|Complete|","18","`#105235 <https://github.com/llvm/llvm-project/issues/105235>`__",""
-"`P2604R0 <https://wg21.link/P2604R0>`__","mdspan: rename pointer and contiguous","2022-07 (Virtual)","|Complete|","18","`#105236 <https://github.com/llvm/llvm-project/issues/105236>`__",""
-"`P2613R1 <https://wg21.link/P2613R1>`__","Add the missing ``empty`` to ``mdspan``","2022-07 (Virtual)","|Complete|","18","`#105237 <https://github.com/llvm/llvm-project/issues/105237>`__",""
+"[P0009R18](https://wg21.link/P0009R18)","mdspan: A Non-Owning Multidimensional Array Reference","2022-07 (Virtual)","{{Complete}}","18","[#105189](https://github.com/llvm/llvm-project/issues/105189)",""
+"[P0429R9](https://wg21.link/P0429R9)","A Standard `flat_map`","2022-07 (Virtual)","{{Complete}}","20","[#105190](https://github.com/llvm/llvm-project/issues/105190)",""
+"[P1169R4](https://wg21.link/P1169R4)","`static operator()`","2022-07 (Virtual)","{{Complete}}","16","[#105192](https://github.com/llvm/llvm-project/issues/105192)",""
+"[P1222R4](https://wg21.link/P1222R4)","A Standard `flat_set`","2022-07 (Virtual)","{{Complete}}","21","[#105193](https://github.com/llvm/llvm-project/issues/105193)",""
+"[P1223R5](https://wg21.link/P1223R5)","`ranges::find_last()`, `ranges::find_last_if()`, and `ranges::find_last_if_not()`","2022-07 (Virtual)","{{Complete}}","19","[#105194](https://github.com/llvm/llvm-project/issues/105194)",""
+"[P1467R9](https://wg21.link/P1467R9)","Extended `floating-point` types and standard names","2022-07 (Virtual)","","","[#105196](https://github.com/llvm/llvm-project/issues/105196)",""
+"[P1642R11](https://wg21.link/P1642R11)","Freestanding `[utilities]`, `[ranges]`, and `[iterators]`","2022-07 (Virtual)","","","[#105197](https://github.com/llvm/llvm-project/issues/105197)",""
+"[P1899R3](https://wg21.link/P1899R3)","`stride_view`","2022-07 (Virtual)","{{Complete}}","23","[#105198](https://github.com/llvm/llvm-project/issues/105198)",""
+"[P2093R14](https://wg21.link/P2093R14)","Formatted output","2022-07 (Virtual)","{{Complete}}","18","[#105199](https://github.com/llvm/llvm-project/issues/105199)",""
+"[P2165R4](https://wg21.link/P2165R4)","Compatibility between `tuple`, `pair` and `tuple-like` objects","2022-07 (Virtual)","{{Partial}}","","[#105200](https://github.com/llvm/llvm-project/issues/105200)","Only the part for `zip_view` is implemented."
+"[P2278R4](https://wg21.link/P2278R4)","`cbegin` should always return a constant iterator","2022-07 (Virtual)","","","[#105201](https://github.com/llvm/llvm-project/issues/105201)",""
+"[P2286R8](https://wg21.link/P2286R8)","Formatting Ranges","2022-07 (Virtual)","{{Complete}}","16","[#105202](https://github.com/llvm/llvm-project/issues/105202)",""
+"[P2291R3](https://wg21.link/P2291R3)","Add Constexpr Modifiers to Functions `to_chars` and `from_chars` for Integral Types in `<charconv>` Header","2022-07 (Virtual)","{{Complete}}","16","[#105204](https://github.com/llvm/llvm-project/issues/105204)",""
+"[P2302R4](https://wg21.link/P2302R4)","`std::ranges::contains`","2022-07 (Virtual)","{{Complete}}","19","[#105206](https://github.com/llvm/llvm-project/issues/105206)",""
+"[P2322R6](https://wg21.link/P2322R6)","`ranges::fold`","2022-07 (Virtual)","{{Complete}}","23","[#105208](https://github.com/llvm/llvm-project/issues/105208)",""
+"[P2374R4](https://wg21.link/P2374R4)","`views::cartesian_product`","2022-07 (Virtual)","","","[#105209](https://github.com/llvm/llvm-project/issues/105209)",""
+"[P2404R3](https://wg21.link/P2404R3)","Move-only types for `equality_comparable_with`, `totally_ordered_with`, and `three_way_comparable_with`","2022-07 (Virtual)","{{Complete}}","22","[#105210](https://github.com/llvm/llvm-project/issues/105210)","Implemented as a DR in C++20."
+"[P2408R5](https://wg21.link/P2408R5)","Ranges iterators as inputs to non-Ranges algorithms","2022-07 (Virtual)","","","[#105211](https://github.com/llvm/llvm-project/issues/105211)",""
+"[P2417R2](https://wg21.link/P2417R2)","A more `constexpr` `bitset`","2022-07 (Virtual)","{{Complete}}","16","[#105212](https://github.com/llvm/llvm-project/issues/105212)",""
+"[P2419R2](https://wg21.link/P2419R2)","Clarify handling of encodings in localized formatting of chrono types","2022-07 (Virtual)","","","[#105213](https://github.com/llvm/llvm-project/issues/105213)",""
+"[P2438R2](https://wg21.link/P2438R2)","`std::string::substr() &&`","2022-07 (Virtual)","{{Complete}}","16","[#105215](https://github.com/llvm/llvm-project/issues/105215)",""
+"[P2445R1](https://wg21.link/P2445R1)","`forward_like`","2022-07 (Virtual)","{{Complete}}","16","[#105216](https://github.com/llvm/llvm-project/issues/105216)",""
+"[P2446R2](https://wg21.link/P2446R2)","`views::as_rvalue`","2022-07 (Virtual)","{{Complete}}","16","[#105217](https://github.com/llvm/llvm-project/issues/105217)",""
+"[P2460R2](https://wg21.link/P2460R2)","Relax requirements on `wchar_t` to match existing practices","2022-07 (Virtual)","{{NothingToDo}}","","[#105218](https://github.com/llvm/llvm-project/issues/105218)",""
+"[P2465R3](https://wg21.link/P2465R3)","Standard Library Modules `std` and `std.compat`","2022-07 (Virtual)","{{Complete}}","19","[#105219](https://github.com/llvm/llvm-project/issues/105219)",""
+"[P2467R1](https://wg21.link/P2467R1)","Support exclusive mode for `fstreams`","2022-07 (Virtual)","{{Complete}}","18","[#105221](https://github.com/llvm/llvm-project/issues/105221)",""
+"[P2474R2](https://wg21.link/P2474R2)","`views::repeat`","2022-07 (Virtual)","{{Complete}}","17","[#105222](https://github.com/llvm/llvm-project/issues/105222)",""
+"[P2494R2](https://wg21.link/P2494R2)","Relaxing range adaptors to allow for move only types","2022-07 (Virtual)","{{Complete}}","17","[#105224](https://github.com/llvm/llvm-project/issues/105224)",""
+"[P2499R0](https://wg21.link/P2499R0)","`string_view` range constructor should be `explicit`","2022-07 (Virtual)","{{Complete}}","16","[#105225](https://github.com/llvm/llvm-project/issues/105225)",""
+"[P2502R2](https://wg21.link/P2502R2)","`std::generator`: Synchronous Coroutine Generator for Ranges","2022-07 (Virtual)","","","[#105226](https://github.com/llvm/llvm-project/issues/105226)",""
+"[P2508R1](https://wg21.link/P2508R1)","Exposing `std::basic-format-string`","2022-07 (Virtual)","{{Complete}}","15","[#105227](https://github.com/llvm/llvm-project/issues/105227)",""
+"[P2517R1](https://wg21.link/P2517R1)","Add a conditional `noexcept` specification to `std::apply`","2022-07 (Virtual)","{{Complete}}","3.9","[#105229](https://github.com/llvm/llvm-project/issues/105229)",""
+"[P2520R0](https://wg21.link/P2520R0)","`move_iterator` should be a random access iterator","2022-07 (Virtual)","{{Complete}}","17","[#105230](https://github.com/llvm/llvm-project/issues/105230)","Implemented as a DR in C++20"
+"[P2540R1](https://wg21.link/P2540R1)","Empty Product for certain Views","2022-07 (Virtual)","","","[#105231](https://github.com/llvm/llvm-project/issues/105231)",""
+"[P2549R1](https://wg21.link/P2549R1)","`std::unexpected` should have `error()` as member accessor","2022-07 (Virtual)","{{Complete}}","16","[#105232](https://github.com/llvm/llvm-project/issues/105232)",""
+"[P2585R0](https://wg21.link/P2585R0)","Improving default container formatting","2022-07 (Virtual)","{{Complete}}","17","[#105233](https://github.com/llvm/llvm-project/issues/105233)",""
+"[P2590R2](https://wg21.link/P2590R2)","Explicit lifetime management","2022-07 (Virtual)","","","[#105234](https://github.com/llvm/llvm-project/issues/105234)",""
+"[P2599R2](https://wg21.link/P2599R2)","`mdspan::size_type` should be `index_type`","2022-07 (Virtual)","{{Complete}}","18","[#105235](https://github.com/llvm/llvm-project/issues/105235)",""
+"[P2604R0](https://wg21.link/P2604R0)","mdspan: rename pointer and contiguous","2022-07 (Virtual)","{{Complete}}","18","[#105236](https://github.com/llvm/llvm-project/issues/105236)",""
+"[P2613R1](https://wg21.link/P2613R1)","Add the missing `empty` to `mdspan`","2022-07 (Virtual)","{{Complete}}","18","[#105237](https://github.com/llvm/llvm-project/issues/105237)",""
"","","","","","",""
-"`P1202R5 <https://wg21.link/P1202R5>`__","Asymmetric Fences","2022-11 (Kona)","","","`#105238 <https://github.com/llvm/llvm-project/issues/105238>`__",""
-"`P1264R2 <https://wg21.link/P1264R2>`__","Revising the wording of ``stream`` input operations","2022-11 (Kona)","|Complete|","9","`#105239 <https://github.com/llvm/llvm-project/issues/105239>`__",""
-"`P1478R8 <https://wg21.link/P1478R8>`__","``Byte-wise`` ``atomic`` ``memcpy``","2022-11 (Kona)","","","`#105240 <https://github.com/llvm/llvm-project/issues/105240>`__",""
-"`P2167R3 <https://wg21.link/P2167R3>`__","Improved Proposed Wording for LWG 2114","2022-11 (Kona)","|Complete|","20","`#105241 <https://github.com/llvm/llvm-project/issues/105241>`__","The `[cmp.alg] <https://eel.is/c++draft/cmp.alg>`__ part is implemented as a DR against C++20."
-"`P2396R1 <https://wg21.link/P2396R1>`__","Concurrency TS 2 fixes ","2022-11 (Kona)","","","`#105242 <https://github.com/llvm/llvm-project/issues/105242>`__",""
-"`P2505R5 <https://wg21.link/P2505R5>`__","Monadic Functions for ``std::expected``","2022-11 (Kona)","|Complete|","17","`#105243 <https://github.com/llvm/llvm-project/issues/105243>`__",""
-"`P2539R4 <https://wg21.link/P2539R4>`__","Should the output of ``std::print`` to a terminal be synchronized with the underlying stream?","2022-11 (Kona)","|Complete|","18","`#105245 <https://github.com/llvm/llvm-project/issues/105245>`__",""
-"`P2602R2 <https://wg21.link/P2602R2>`__","Poison Pills are Too Toxic","2022-11 (Kona)","|Complete|","19","`#105246 <https://github.com/llvm/llvm-project/issues/105246>`__","Implemented as a DR in C++20."
-"`P2708R1 <https://wg21.link/P2708R1>`__","No Further Fundamentals TSes","2022-11 (Kona)","|Nothing To Do|","","`#105247 <https://github.com/llvm/llvm-project/issues/105247>`__",""
+"[P1202R5](https://wg21.link/P1202R5)","Asymmetric Fences","2022-11 (Kona)","","","[#105238](https://github.com/llvm/llvm-project/issues/105238)",""
+"[P1264R2](https://wg21.link/P1264R2)","Revising the wording of `stream` input operations","2022-11 (Kona)","{{Complete}}","9","[#105239](https://github.com/llvm/llvm-project/issues/105239)",""
+"[P1478R8](https://wg21.link/P1478R8)","`Byte-wise` `atomic` `memcpy`","2022-11 (Kona)","","","[#105240](https://github.com/llvm/llvm-project/issues/105240)",""
+"[P2167R3](https://wg21.link/P2167R3)","Improved Proposed Wording for LWG 2114","2022-11 (Kona)","{{Complete}}","20","[#105241](https://github.com/llvm/llvm-project/issues/105241)","The [[cmp.alg]](https://eel.is/c++draft/cmp.alg) part is implemented as a DR against C++20."
+"[P2396R1](https://wg21.link/P2396R1)","Concurrency TS 2 fixes ","2022-11 (Kona)","","","[#105242](https://github.com/llvm/llvm-project/issues/105242)",""
+"[P2505R5](https://wg21.link/P2505R5)","Monadic Functions for `std::expected`","2022-11 (Kona)","{{Complete}}","17","[#105243](https://github.com/llvm/llvm-project/issues/105243)",""
+"[P2539R4](https://wg21.link/P2539R4)","Should the output of `std::print` to a terminal be synchronized with the underlying stream?","2022-11 (Kona)","{{Complete}}","18","[#105245](https://github.com/llvm/llvm-project/issues/105245)",""
+"[P2602R2](https://wg21.link/P2602R2)","Poison Pills are Too Toxic","2022-11 (Kona)","{{Complete}}","19","[#105246](https://github.com/llvm/llvm-project/issues/105246)","Implemented as a DR in C++20."
+"[P2708R1](https://wg21.link/P2708R1)","No Further Fundamentals TSes","2022-11 (Kona)","{{NothingToDo}}","","[#105247](https://github.com/llvm/llvm-project/issues/105247)",""
"","","","","","",""
-"`P0290R4 <https://wg21.link/P0290R4>`__","``apply()`` for ``synchronized_value<T>``","2023-02 (Issaquah)","","","`#105249 <https://github.com/llvm/llvm-project/issues/105249>`__",""
-"`P2770R0 <https://wg21.link/P2770R0>`__","Stashing stashing ``iterators`` for proper flattening","2023-02 (Issaquah)","|Complete|","21","`#105250 <https://github.com/llvm/llvm-project/issues/105250>`__",""
-"`P2164R9 <https://wg21.link/P2164R9>`__","``views::enumerate``","2023-02 (Issaquah)","|Complete|","23","`#105251 <https://github.com/llvm/llvm-project/issues/105251>`__",""
-"`P2711R1 <https://wg21.link/P2711R1>`__","Making multi-param constructors of ``views`` ``explicit``","2023-02 (Issaquah)","|Complete|","21","`#105252 <https://github.com/llvm/llvm-project/issues/105252>`__","Implemented as a DR in C++20 since LLVM 23."
-"`P2609R3 <https://wg21.link/P2609R3>`__","Relaxing Ranges Just A Smidge","2023-02 (Issaquah)","|Complete|","20","`#105253 <https://github.com/llvm/llvm-project/issues/105253>`__","Implemented as a DR in C++20."
-"`P2713R1 <https://wg21.link/P2713R1>`__","Escaping improvements in ``std::format``","2023-02 (Issaquah)","|Complete|","19","`#105254 <https://github.com/llvm/llvm-project/issues/105254>`__",""
-"`P2675R1 <https://wg21.link/P2675R1>`__","``format``'s width estimation is too approximate and not forward compatible","2023-02 (Issaquah)","|Complete|","17","`#105255 <https://github.com/llvm/llvm-project/issues/105255>`__",""
-"`P2572R1 <https://wg21.link/P2572R1>`__","``std::format`` fill character allowances","2023-02 (Issaquah)","|Complete|","17","`#105256 <https://github.com/llvm/llvm-project/issues/105256>`__",""
-"`P2693R1 <https://wg21.link/P2693R1>`__","Formatting ``thread::id`` and ``stacktrace``","2023-02 (Issaquah)","|Partial|","","`#105257 <https://github.com/llvm/llvm-project/issues/105257>`__","The formatter for ``stacktrace`` is not implemented, since ``stacktrace`` is not implemented yet"
-"`P2679R2 <https://wg21.link/P2679R2>`__","Fixing ``std::start_lifetime_as`` for arrays","2023-02 (Issaquah)","","","`#105258 <https://github.com/llvm/llvm-project/issues/105258>`__",""
-"`P2674R1 <https://wg21.link/P2674R1>`__","A trait for implicit lifetime types","2023-02 (Issaquah)","|Complete|","20","`#105259 <https://github.com/llvm/llvm-project/issues/105259>`__",""
-"`P2655R3 <https://wg21.link/P2655R3>`__","``common_reference_t`` of ``reference_wrapper`` Should Be a Reference Type","2023-02 (Issaquah)","|Complete|","21","`#105260 <https://github.com/llvm/llvm-project/issues/105260>`__","The paper is implemented as a DR to C++20"
-"`P2652R2 <https://wg21.link/P2652R2>`__","Disallow User Specialization of ``allocator_traits``","2023-02 (Issaquah)","|Complete|","19","`#105262 <https://github.com/llvm/llvm-project/issues/105262>`__",""
-"`P2787R1 <https://wg21.link/P2787R1>`__","``pmr::generator`` - Promise Types are not Values","2023-02 (Issaquah)","","","`#105263 <https://github.com/llvm/llvm-project/issues/105263>`__",""
-"`P2614R2 <https://wg21.link/P2614R2>`__","Deprecate ``numeric_limits::has_denorm``","2023-02 (Issaquah)","|Complete|","18","`#105264 <https://github.com/llvm/llvm-project/issues/105264>`__",""
-"`P2588R3 <https://wg21.link/P2588R3>`__","``barrier``’s phase completion guarantees","2023-02 (Issaquah)","","","`#105265 <https://github.com/llvm/llvm-project/issues/105265>`__",""
-"`P2763R1 <https://wg21.link/P2763R1>`__","``layout_stride`` static extents default constructor fix","2023-02 (Issaquah)","","","`#105266 <https://github.com/llvm/llvm-project/issues/105266>`__",""
-"`P2736R2 <https://wg21.link/P2736R2>`__","Referencing The Unicode Standard","2023-02 (Issaquah)","|Complete|","19","`#105267 <https://github.com/llvm/llvm-project/issues/105267>`__",""
+"[P0290R4](https://wg21.link/P0290R4)","`apply()` for `synchronized_value<T>`","2023-02 (Issaquah)","","","[#105249](https://github.com/llvm/llvm-project/issues/105249)",""
+"[P2770R0](https://wg21.link/P2770R0)","Stashing stashing `iterators` for proper flattening","2023-02 (Issaquah)","{{Complete}}","21","[#105250](https://github.com/llvm/llvm-project/issues/105250)",""
+"[P2164R9](https://wg21.link/P2164R9)","`views::enumerate`","2023-02 (Issaquah)","{{Complete}}","23","[#105251](https://github.com/llvm/llvm-project/issues/105251)",""
+"[P2711R1](https://wg21.link/P2711R1)","Making multi-param constructors of `views` `explicit`","2023-02 (Issaquah)","{{Complete}}","21","[#105252](https://github.com/llvm/llvm-project/issues/105252)","Implemented as a DR in C++20 since LLVM 23."
+"[P2609R3](https://wg21.link/P2609R3)","Relaxing Ranges Just A Smidge","2023-02 (Issaquah)","{{Complete}}","20","[#105253](https://github.com/llvm/llvm-project/issues/105253)","Implemented as a DR in C++20."
+"[P2713R1](https://wg21.link/P2713R1)","Escaping improvements in `std::format`","2023-02 (Issaquah)","{{Complete}}","19","[#105254](https://github.com/llvm/llvm-project/issues/105254)",""
+"[P2675R1](https://wg21.link/P2675R1)","`format`'s width estimation is too approximate and not forward compatible","2023-02 (Issaquah)","{{Complete}}","17","[#105255](https://github.com/llvm/llvm-project/issues/105255)",""
+"[P2572R1](https://wg21.link/P2572R1)","`std::format` fill character allowances","2023-02 (Issaquah)","{{Complete}}","17","[#105256](https://github.com/llvm/llvm-project/issues/105256)",""
+"[P2693R1](https://wg21.link/P2693R1)","Formatting `thread::id` and `stacktrace`","2023-02 (Issaquah)","{{Partial}}","","[#105257](https://github.com/llvm/llvm-project/issues/105257)","The formatter for `stacktrace` is not implemented, since `stacktrace` is not implemented yet"
+"[P2679R2](https://wg21.link/P2679R2)","Fixing `std::start_lifetime_as` for arrays","2023-02 (Issaquah)","","","[#105258](https://github.com/llvm/llvm-project/issues/105258)",""
+"[P2674R1](https://wg21.link/P2674R1)","A trait for implicit lifetime types","2023-02 (Issaquah)","{{Complete}}","20","[#105259](https://github.com/llvm/llvm-project/issues/105259)",""
+"[P2655R3](https://wg21.link/P2655R3)","`common_reference_t` of `reference_wrapper` Should Be a Reference Type","2023-02 (Issaquah)","{{Complete}}","21","[#105260](https://github.com/llvm/llvm-project/issues/105260)","The paper is implemented as a DR to C++20"
+"[P2652R2](https://wg21.link/P2652R2)","Disallow User Specialization of `allocator_traits`","2023-02 (Issaquah)","{{Complete}}","19","[#105262](https://github.com/llvm/llvm-project/issues/105262)",""
+"[P2787R1](https://wg21.link/P2787R1)","`pmr::generator` - Promise Types are not Values","2023-02 (Issaquah)","","","[#105263](https://github.com/llvm/llvm-project/issues/105263)",""
+"[P2614R2](https://wg21.link/P2614R2)","Deprecate `numeric_limits::has_denorm`","2023-02 (Issaquah)","{{Complete}}","18","[#105264](https://github.com/llvm/llvm-project/issues/105264)",""
+"[P2588R3](https://wg21.link/P2588R3)","`barrier`’s phase completion guarantees","2023-02 (Issaquah)","","","[#105265](https://github.com/llvm/llvm-project/issues/105265)",""
+"[P2763R1](https://wg21.link/P2763R1)","`layout_stride` static extents default constructor fix","2023-02 (Issaquah)","","","[#105266](https://github.com/llvm/llvm-project/issues/105266)",""
+"[P2736R2](https://wg21.link/P2736R2)","Referencing The Unicode Standard","2023-02 (Issaquah)","{{Complete}}","19","[#105267](https://github.com/llvm/llvm-project/issues/105267)",""
diff --git a/libcxx/docs/Status/Cxx26.md b/libcxx/docs/Status/Cxx26.md
index cc49d14884746..67ead556984bf 100644
--- a/libcxx/docs/Status/Cxx26.md
+++ b/libcxx/docs/Status/Cxx26.md
@@ -2,13 +2,12 @@
# libc++ C++26 Status
-```{eval-rst}
-.. include:: ../Helpers/Styles.md
-```
+:::{include} ../Helpers/Styles.md
+:::
-```{contents}
+:::{contents}
:local: true
-```
+:::
## Overview
@@ -33,18 +32,24 @@ The groups that have contributed papers:
## Paper Status
```{eval-rst}
-.. csv-table::
- :file: Cxx26Papers.csv
- :header-rows: 1
- :widths: auto
+.. role:: notstarted
+.. role:: nothingtodo
+.. role:: inprogress
+.. role:: inreview
+.. role:: partial
+.. role:: complete
```
-## Library Working Group Issues Status
+:::{csv-table}
+:file: Cxx26Papers.csv
+:header-rows: 1
+:widths: auto
+:::
-```{eval-rst}
-.. csv-table::
- :file: Cxx26Issues.csv
- :header-rows: 1
- :widths: auto
-```
+## Library Working Group Issues Status
+:::{csv-table}
+:file: Cxx26Issues.csv
+:header-rows: 1
+:widths: auto
+:::
diff --git a/libcxx/docs/Status/Cxx26Issues.csv b/libcxx/docs/Status/Cxx26Issues.csv
index 5c5fba32de855..8190f181f819b 100644
--- a/libcxx/docs/Status/Cxx26Issues.csv
+++ b/libcxx/docs/Status/Cxx26Issues.csv
@@ -1,348 +1,348 @@
"Issue #","Issue Name","Meeting","Status","First released version","GitHub issue","Notes"
-"`LWG2994 <https://wg21.link/LWG2994>`__","Needless UB for ``basic_string`` and ``basic_string_view``","2023-06 (Varna)","|Complete|","5","`#105268 <https://github.com/llvm/llvm-project/issues/105268>`__",""
-"`LWG3884 <https://wg21.link/LWG3884>`__","``flat_foo`` is missing allocator-extended copy/move constructors","2023-06 (Varna)","|Complete|","21","`#105269 <https://github.com/llvm/llvm-project/issues/105269>`__",""
-"`LWG3885 <https://wg21.link/LWG3885>`__","``op`` should be in [zombie.names]","2023-06 (Varna)","|Nothing To Do|","","`#105270 <https://github.com/llvm/llvm-project/issues/105270>`__",""
-"`LWG3887 <https://wg21.link/LWG3887>`__","Version macro for ``allocate_at_least``","2023-06 (Varna)","|Complete|","19","`#105271 <https://github.com/llvm/llvm-project/issues/105271>`__",""
-"`LWG3893 <https://wg21.link/LWG3893>`__","LWG 3661 broke ``atomic<shared_ptr<T>> a; a = nullptr;``","2023-06 (Varna)","","","`#105273 <https://github.com/llvm/llvm-project/issues/105273>`__",""
-"`LWG3894 <https://wg21.link/LWG3894>`__","``generator::promise_type::yield_value(ranges::elements_of<Rng, Alloc>)`` should not be ``noexcept``","2023-06 (Varna)","","","`#105274 <https://github.com/llvm/llvm-project/issues/105274>`__",""
-"`LWG3903 <https://wg21.link/LWG3903>`__","span destructor is redundantly noexcept","2023-06 (Varna)","|Complete|","7","`#105275 <https://github.com/llvm/llvm-project/issues/105275>`__",""
-"`LWG3904 <https://wg21.link/LWG3904>`__","``lazy_split_view::outer-iterator``'s const-converting constructor isn't setting ``trailing_empty_``","2023-06 (Varna)","","","`#105276 <https://github.com/llvm/llvm-project/issues/105276>`__",""
-"`LWG3905 <https://wg21.link/LWG3905>`__","Type of ``std::fexcept_t``","2023-06 (Varna)","|Complete|","3.4","`#105277 <https://github.com/llvm/llvm-project/issues/105277>`__",""
-"`LWG3912 <https://wg21.link/LWG3912>`__","``enumerate_view::iterator::operator-`` should be ``noexcept``","2023-06 (Varna)","|Complete|","23","`#105279 <https://github.com/llvm/llvm-project/issues/105279>`__",""
-"`LWG3914 <https://wg21.link/LWG3914>`__","Inconsistent template-head of ``ranges::enumerate_view``","2023-06 (Varna)","|Complete|","23","`#105280 <https://github.com/llvm/llvm-project/issues/105280>`__",""
-"`LWG3915 <https://wg21.link/LWG3915>`__","Redundant paragraph about expression variations","2023-06 (Varna)","","","`#105281 <https://github.com/llvm/llvm-project/issues/105281>`__",""
-"`LWG3925 <https://wg21.link/LWG3925>`__","Concept ``formattable``'s definition is incorrect","2023-06 (Varna)","|Complete|","17","`#105282 <https://github.com/llvm/llvm-project/issues/105282>`__",""
-"`LWG3927 <https://wg21.link/LWG3927>`__","Unclear preconditions for ``operator[]`` for sequence containers","2023-06 (Varna)","|Nothing To Do|","","`#105283 <https://github.com/llvm/llvm-project/issues/105283>`__",""
-"`LWG3935 <https://wg21.link/LWG3935>`__","``template<class X> constexpr complex& operator=(const complex<X>&)`` has no specification","2023-06 (Varna)","|Complete|","3.4","`#105284 <https://github.com/llvm/llvm-project/issues/105284>`__",""
-"`LWG3938 <https://wg21.link/LWG3938>`__","Cannot use ``std::expected`` monadic ops with move-only ``error_type``","2023-06 (Varna)","|Complete|","18","`#105285 <https://github.com/llvm/llvm-project/issues/105285>`__",""
-"`LWG3940 <https://wg21.link/LWG3940>`__","``std::expected<void, E>::value()`` also needs ``E`` to be copy constructible","2023-06 (Varna)","|Complete|","18","`#105286 <https://github.com/llvm/llvm-project/issues/105286>`__",""
+"[LWG2994](https://wg21.link/LWG2994)","Needless UB for `basic_string` and `basic_string_view`","2023-06 (Varna)","{{Complete}}","5","[#105268](https://github.com/llvm/llvm-project/issues/105268)",""
+"[LWG3884](https://wg21.link/LWG3884)","`flat_foo` is missing allocator-extended copy/move constructors","2023-06 (Varna)","{{Complete}}","21","[#105269](https://github.com/llvm/llvm-project/issues/105269)",""
+"[LWG3885](https://wg21.link/LWG3885)","`op` should be in [zombie.names]","2023-06 (Varna)","{{NothingToDo}}","","[#105270](https://github.com/llvm/llvm-project/issues/105270)",""
+"[LWG3887](https://wg21.link/LWG3887)","Version macro for `allocate_at_least`","2023-06 (Varna)","{{Complete}}","19","[#105271](https://github.com/llvm/llvm-project/issues/105271)",""
+"[LWG3893](https://wg21.link/LWG3893)","LWG 3661 broke `atomic<shared_ptr<T>> a; a = nullptr;`","2023-06 (Varna)","","","[#105273](https://github.com/llvm/llvm-project/issues/105273)",""
+"[LWG3894](https://wg21.link/LWG3894)","`generator::promise_type::yield_value(ranges::elements_of<Rng, Alloc>)` should not be `noexcept`","2023-06 (Varna)","","","[#105274](https://github.com/llvm/llvm-project/issues/105274)",""
+"[LWG3903](https://wg21.link/LWG3903)","span destructor is redundantly noexcept","2023-06 (Varna)","{{Complete}}","7","[#105275](https://github.com/llvm/llvm-project/issues/105275)",""
+"[LWG3904](https://wg21.link/LWG3904)","`lazy_split_view::outer-iterator`'s const-converting constructor isn't setting `trailing_empty_`","2023-06 (Varna)","","","[#105276](https://github.com/llvm/llvm-project/issues/105276)",""
+"[LWG3905](https://wg21.link/LWG3905)","Type of `std::fexcept_t`","2023-06 (Varna)","{{Complete}}","3.4","[#105277](https://github.com/llvm/llvm-project/issues/105277)",""
+"[LWG3912](https://wg21.link/LWG3912)","`enumerate_view::iterator::operator-` should be `noexcept`","2023-06 (Varna)","{{Complete}}","23","[#105279](https://github.com/llvm/llvm-project/issues/105279)",""
+"[LWG3914](https://wg21.link/LWG3914)","Inconsistent template-head of `ranges::enumerate_view`","2023-06 (Varna)","{{Complete}}","23","[#105280](https://github.com/llvm/llvm-project/issues/105280)",""
+"[LWG3915](https://wg21.link/LWG3915)","Redundant paragraph about expression variations","2023-06 (Varna)","","","[#105281](https://github.com/llvm/llvm-project/issues/105281)",""
+"[LWG3925](https://wg21.link/LWG3925)","Concept `formattable`'s definition is incorrect","2023-06 (Varna)","{{Complete}}","17","[#105282](https://github.com/llvm/llvm-project/issues/105282)",""
+"[LWG3927](https://wg21.link/LWG3927)","Unclear preconditions for `operator[]` for sequence containers","2023-06 (Varna)","{{NothingToDo}}","","[#105283](https://github.com/llvm/llvm-project/issues/105283)",""
+"[LWG3935](https://wg21.link/LWG3935)","`template<class X> constexpr complex& operator=(const complex<X>&)` has no specification","2023-06 (Varna)","{{Complete}}","3.4","[#105284](https://github.com/llvm/llvm-project/issues/105284)",""
+"[LWG3938](https://wg21.link/LWG3938)","Cannot use `std::expected` monadic ops with move-only `error_type`","2023-06 (Varna)","{{Complete}}","18","[#105285](https://github.com/llvm/llvm-project/issues/105285)",""
+"[LWG3940](https://wg21.link/LWG3940)","`std::expected<void, E>::value()` also needs `E` to be copy constructible","2023-06 (Varna)","{{Complete}}","18","[#105286](https://github.com/llvm/llvm-project/issues/105286)",""
"","","","","","",""
-"`LWG2392 <https://wg21.link/LWG2392>`__","""character type"" is used but not defined","2023-11 (Kona)","","","`#105287 <https://github.com/llvm/llvm-project/issues/105287>`__",""
-"`LWG3203 <https://wg21.link/LWG3203>`__","``span`` element access invalidation","2023-11 (Kona)","|Nothing To Do|","","`#105288 <https://github.com/llvm/llvm-project/issues/105288>`__",""
-"`LWG3305 <https://wg21.link/LWG3305>`__","``any_cast<void>``","2023-11 (Kona)","|Complete|","18","`#105289 <https://github.com/llvm/llvm-project/issues/105289>`__",""
-"`LWG3431 <https://wg21.link/LWG3431>`__","``<=>`` for containers should require ``three_way_comparable<T>`` instead of ``<=>``","2023-11 (Kona)","","","`#105290 <https://github.com/llvm/llvm-project/issues/105290>`__",""
-"`LWG3749 <https://wg21.link/LWG3749>`__","``common_iterator`` should handle integer-class difference types","2023-11 (Kona)","","","`#105291 <https://github.com/llvm/llvm-project/issues/105291>`__",""
-"`LWG3809 <https://wg21.link/LWG3809>`__","Is ``std::subtract_with_carry_engine<uint16_t>`` supposed to work","2023-11 (Kona)","","","`#105295 <https://github.com/llvm/llvm-project/issues/105295>`__",""
-"`LWG3892 <https://wg21.link/LWG3892>`__","Incorrect formatting of nested ranges and tuples","2023-11 (Kona)","|Complete|","17","`#105296 <https://github.com/llvm/llvm-project/issues/105296>`__",""
-"`LWG3897 <https://wg21.link/LWG3897>`__","``inout_ptr`` will not update raw pointer to 0","2023-11 (Kona)","|Complete|","19","`#105297 <https://github.com/llvm/llvm-project/issues/105297>`__",""
-"`LWG3946 <https://wg21.link/LWG3946>`__","The definition of ``const_iterator_t`` should be reworked","2023-11 (Kona)","","","`#105298 <https://github.com/llvm/llvm-project/issues/105298>`__",""
-"`LWG3947 <https://wg21.link/LWG3947>`__","Unexpected constraints on ``adjacent_transform_view::base()``","2023-11 (Kona)","|Complete|","22","`#105299 <https://github.com/llvm/llvm-project/issues/105299>`__",""
-"`LWG3948 <https://wg21.link/LWG3948>`__","``possibly-const-range and as-const-pointer`` should be ``noexcept``","2023-11 (Kona)","","","`#105300 <https://github.com/llvm/llvm-project/issues/105300>`__",""
-"`LWG3949 <https://wg21.link/LWG3949>`__","``std::atomic<bool>``'s trivial destructor dropped in C++17 spec wording","2023-11 (Kona)","|Nothing To Do|","","`#105301 <https://github.com/llvm/llvm-project/issues/105301>`__",""
-"`LWG3951 <https://wg21.link/LWG3951>`__","[expected.object.swap]: Using ``value()`` instead of ``has_value()``","2023-11 (Kona)","|Complete|","16","`#105302 <https://github.com/llvm/llvm-project/issues/105302>`__",""
-"`LWG3953 <https://wg21.link/LWG3953>`__","``iter_move`` for ``common_iterator`` and ``counted_iterator`` should return ``decltype(auto)``","2023-11 (Kona)","|Complete|","20","`#105303 <https://github.com/llvm/llvm-project/issues/105303>`__",""
-"`LWG3957 <https://wg21.link/LWG3957>`__","[container.alloc.reqmts] The value category of v should be claimed","2023-11 (Kona)","","","`#105304 <https://github.com/llvm/llvm-project/issues/105304>`__",""
-"`LWG3965 <https://wg21.link/LWG3965>`__","Incorrect example in [format.string.escaped] p3 for formatting of combining characters","2023-11 (Kona)","|Complete|","19","`#105305 <https://github.com/llvm/llvm-project/issues/105305>`__",""
-"`LWG3970 <https://wg21.link/LWG3970>`__","[mdspan.syn] Missing definition of ``full_extent_t`` and ``full_extent``","2023-11 (Kona)","","","`#105306 <https://github.com/llvm/llvm-project/issues/105306>`__",""
-"`LWG3973 <https://wg21.link/LWG3973>`__","Monadic operations should be ADL-proof","2023-11 (Kona)","","","`#105307 <https://github.com/llvm/llvm-project/issues/105307>`__",""
-"`LWG3974 <https://wg21.link/LWG3974>`__","``mdspan::operator[]`` should not copy ``OtherIndexTypes``","2023-11 (Kona)","|Complete|","23","`#105308 <https://github.com/llvm/llvm-project/issues/105308>`__",""
-"`LWG3987 <https://wg21.link/LWG3987>`__","Including ``<flat_foo>`` doesn't provide ``std::begin``/``end``","2023-11 (Kona)","|Complete|","","`#105309 <https://github.com/llvm/llvm-project/issues/105309>`__",""
-"`LWG3990 <https://wg21.link/LWG3990>`__","Program-defined specializations of ``std::tuple`` and ``std::variant`` can't be properly supported","2023-11 (Kona)","|Complete|","21","`#105310 <https://github.com/llvm/llvm-project/issues/105310>`__",""
-"`LWG4001 <https://wg21.link/LWG4001>`__","``iota_view`` should provide ``empty``","2023-11 (Kona)","|Complete|","19","`#105311 <https://github.com/llvm/llvm-project/issues/105311>`__",""
+"[LWG2392](https://wg21.link/LWG2392)","""character type"" is used but not defined","2023-11 (Kona)","","","[#105287](https://github.com/llvm/llvm-project/issues/105287)",""
+"[LWG3203](https://wg21.link/LWG3203)","`span` element access invalidation","2023-11 (Kona)","{{NothingToDo}}","","[#105288](https://github.com/llvm/llvm-project/issues/105288)",""
+"[LWG3305](https://wg21.link/LWG3305)","`any_cast<void>`","2023-11 (Kona)","{{Complete}}","18","[#105289](https://github.com/llvm/llvm-project/issues/105289)",""
+"[LWG3431](https://wg21.link/LWG3431)","`<=>` for containers should require `three_way_comparable<T>` instead of `<=>`","2023-11 (Kona)","","","[#105290](https://github.com/llvm/llvm-project/issues/105290)",""
+"[LWG3749](https://wg21.link/LWG3749)","`common_iterator` should handle integer-class difference types","2023-11 (Kona)","","","[#105291](https://github.com/llvm/llvm-project/issues/105291)",""
+"[LWG3809](https://wg21.link/LWG3809)","Is `std::subtract_with_carry_engine<uint16_t>` supposed to work","2023-11 (Kona)","","","[#105295](https://github.com/llvm/llvm-project/issues/105295)",""
+"[LWG3892](https://wg21.link/LWG3892)","Incorrect formatting of nested ranges and tuples","2023-11 (Kona)","{{Complete}}","17","[#105296](https://github.com/llvm/llvm-project/issues/105296)",""
+"[LWG3897](https://wg21.link/LWG3897)","`inout_ptr` will not update raw pointer to 0","2023-11 (Kona)","{{Complete}}","19","[#105297](https://github.com/llvm/llvm-project/issues/105297)",""
+"[LWG3946](https://wg21.link/LWG3946)","The definition of `const_iterator_t` should be reworked","2023-11 (Kona)","","","[#105298](https://github.com/llvm/llvm-project/issues/105298)",""
+"[LWG3947](https://wg21.link/LWG3947)","Unexpected constraints on `adjacent_transform_view::base()`","2023-11 (Kona)","{{Complete}}","22","[#105299](https://github.com/llvm/llvm-project/issues/105299)",""
+"[LWG3948](https://wg21.link/LWG3948)","`possibly-const-range and as-const-pointer` should be `noexcept`","2023-11 (Kona)","","","[#105300](https://github.com/llvm/llvm-project/issues/105300)",""
+"[LWG3949](https://wg21.link/LWG3949)","`std::atomic<bool>`'s trivial destructor dropped in C++17 spec wording","2023-11 (Kona)","{{NothingToDo}}","","[#105301](https://github.com/llvm/llvm-project/issues/105301)",""
+"[LWG3951](https://wg21.link/LWG3951)","[expected.object.swap]: Using `value()` instead of `has_value()`","2023-11 (Kona)","{{Complete}}","16","[#105302](https://github.com/llvm/llvm-project/issues/105302)",""
+"[LWG3953](https://wg21.link/LWG3953)","`iter_move` for `common_iterator` and `counted_iterator` should return `decltype(auto)`","2023-11 (Kona)","{{Complete}}","20","[#105303](https://github.com/llvm/llvm-project/issues/105303)",""
+"[LWG3957](https://wg21.link/LWG3957)","[container.alloc.reqmts] The value category of v should be claimed","2023-11 (Kona)","","","[#105304](https://github.com/llvm/llvm-project/issues/105304)",""
+"[LWG3965](https://wg21.link/LWG3965)","Incorrect example in [format.string.escaped] p3 for formatting of combining characters","2023-11 (Kona)","{{Complete}}","19","[#105305](https://github.com/llvm/llvm-project/issues/105305)",""
+"[LWG3970](https://wg21.link/LWG3970)","[mdspan.syn] Missing definition of `full_extent_t` and `full_extent`","2023-11 (Kona)","","","[#105306](https://github.com/llvm/llvm-project/issues/105306)",""
+"[LWG3973](https://wg21.link/LWG3973)","Monadic operations should be ADL-proof","2023-11 (Kona)","","","[#105307](https://github.com/llvm/llvm-project/issues/105307)",""
+"[LWG3974](https://wg21.link/LWG3974)","`mdspan::operator[]` should not copy `OtherIndexTypes`","2023-11 (Kona)","{{Complete}}","23","[#105308](https://github.com/llvm/llvm-project/issues/105308)",""
+"[LWG3987](https://wg21.link/LWG3987)","Including `<flat_foo>` doesn't provide `std::begin`/`end`","2023-11 (Kona)","{{Complete}}","","[#105309](https://github.com/llvm/llvm-project/issues/105309)",""
+"[LWG3990](https://wg21.link/LWG3990)","Program-defined specializations of `std::tuple` and `std::variant` can't be properly supported","2023-11 (Kona)","{{Complete}}","21","[#105310](https://github.com/llvm/llvm-project/issues/105310)",""
+"[LWG4001](https://wg21.link/LWG4001)","`iota_view` should provide `empty`","2023-11 (Kona)","{{Complete}}","19","[#105311](https://github.com/llvm/llvm-project/issues/105311)",""
"","","","","","",""
-"`LWG3767 <https://wg21.link/LWG3767>`__","``codecvt<charN_t, char8_t, mbstate_t>`` incorrectly added to locale","2024-03 (Tokyo)","|Complete|","23","`#105313 <https://github.com/llvm/llvm-project/issues/105313>`__",""
-"`LWG3919 <https://wg21.link/LWG3919>`__","``enumerate_view`` may invoke UB for sized common non-forward underlying ranges","2024-03 (Tokyo)","|Complete|","23","`#105315 <https://github.com/llvm/llvm-project/issues/105315>`__",""
-"`LWG3950 <https://wg21.link/LWG3950>`__","``std::basic_string_view`` comparison operators are overspecified","2024-03 (Tokyo)","|Complete|","18","`#105316 <https://github.com/llvm/llvm-project/issues/105316>`__",""
-"`LWG3975 <https://wg21.link/LWG3975>`__","Specializations of ``basic_format_context`` should not be permitted","2024-03 (Tokyo)","|Nothing To Do|","","`#105317 <https://github.com/llvm/llvm-project/issues/105317>`__",""
-"`LWG3984 <https://wg21.link/LWG3984>`__","``ranges::to``'s recursion branch may be ill-formed","2024-03 (Tokyo)","|Complete|","19","`#105318 <https://github.com/llvm/llvm-project/issues/105318>`__",""
-"`LWG4011 <https://wg21.link/LWG4011>`__","""``Effects``: Equivalent to return"" in ``[span.elem]``","2024-03 (Tokyo)","|Nothing To Do|","","`#105319 <https://github.com/llvm/llvm-project/issues/105319>`__",""
-"`LWG4012 <https://wg21.link/LWG4012>`__","``common_view::begin/end`` are missing the ``simple-view`` check","2024-03 (Tokyo)","|Complete|","23","`#105320 <https://github.com/llvm/llvm-project/issues/105320>`__",""
-"`LWG4013 <https://wg21.link/LWG4013>`__","``lazy_split_view::outer-iterator::value_type`` should not provide default constructor","2024-03 (Tokyo)","","","`#105321 <https://github.com/llvm/llvm-project/issues/105321>`__",""
-"`LWG4016 <https://wg21.link/LWG4016>`__","container-insertable checks do not match what container-inserter does","2024-03 (Tokyo)","|Complete|","20","`#105322 <https://github.com/llvm/llvm-project/issues/105322>`__",""
-"`LWG4023 <https://wg21.link/LWG4023>`__","Preconditions of ``std::basic_streambuf::setg/setp``","2024-03 (Tokyo)","|Complete|","19","`#105323 <https://github.com/llvm/llvm-project/issues/105323>`__",""
-"`LWG4025 <https://wg21.link/LWG4025>`__","Move assignment operator of ``std::expected<cv void, E>`` should not be conditionally deleted","2024-03 (Tokyo)","|Complete|","20","`#105324 <https://github.com/llvm/llvm-project/issues/105324>`__",""
-"`LWG4030 <https://wg21.link/LWG4030>`__","Clarify whether arithmetic expressions in ``[numeric.sat.func]`` are mathematical or C++","2024-03 (Tokyo)","|Nothing To Do|","","`#105325 <https://github.com/llvm/llvm-project/issues/105325>`__",""
-"`LWG4031 <https://wg21.link/LWG4031>`__","``bad_expected_access<void>`` member functions should be ``noexcept``","2024-03 (Tokyo)","|Complete|","16","`#105326 <https://github.com/llvm/llvm-project/issues/105326>`__",""
-"`LWG4035 <https://wg21.link/LWG4035>`__","``single_view`` should provide ``empty``","2024-03 (Tokyo)","|Complete|","19","`#105328 <https://github.com/llvm/llvm-project/issues/105328>`__",""
-"`LWG4036 <https://wg21.link/LWG4036>`__","``__alignof_is_defined`` is only implicitly specified in C++ and not yet deprecated","2024-03 (Tokyo)","","","`#105329 <https://github.com/llvm/llvm-project/issues/105329>`__",""
-"`LWG4037 <https://wg21.link/LWG4037>`__","Static data members of ``ctype_base`` are not yet required to be usable in constant expressions","2024-03 (Tokyo)","","","`#105330 <https://github.com/llvm/llvm-project/issues/105330>`__",""
-"`LWG4038 <https://wg21.link/LWG4038>`__","``std::text_encoding::aliases_view`` should have constexpr iterators","2024-03 (Tokyo)","|Complete|","23","`#105332 <https://github.com/llvm/llvm-project/issues/105332>`__",""
-"`LWG4043 <https://wg21.link/LWG4043>`__","""ASCII"" is not a registered character encoding","2024-03 (Tokyo)","|Complete|","23","`#105335 <https://github.com/llvm/llvm-project/issues/105335>`__",""
-"`LWG4045 <https://wg21.link/LWG4045>`__","``tuple`` can create dangling references from ``tuple-like``","2024-03 (Tokyo)","","","`#105337 <https://github.com/llvm/llvm-project/issues/105337>`__",""
-"`LWG4053 <https://wg21.link/LWG4053>`__","Unary call to ``std::views::repeat`` does not decay the argument","2024-03 (Tokyo)","|Complete|","19","`#105338 <https://github.com/llvm/llvm-project/issues/105338>`__",""
-"`LWG4054 <https://wg21.link/LWG4054>`__","Repeating a ``repeat_view`` should repeat the view","2024-03 (Tokyo)","|Complete|","19","`#105340 <https://github.com/llvm/llvm-project/issues/105340>`__",""
+"[LWG3767](https://wg21.link/LWG3767)","`codecvt<charN_t, char8_t, mbstate_t>` incorrectly added to locale","2024-03 (Tokyo)","{{Complete}}","23","[#105313](https://github.com/llvm/llvm-project/issues/105313)",""
+"[LWG3919](https://wg21.link/LWG3919)","`enumerate_view` may invoke UB for sized common non-forward underlying ranges","2024-03 (Tokyo)","{{Complete}}","23","[#105315](https://github.com/llvm/llvm-project/issues/105315)",""
+"[LWG3950](https://wg21.link/LWG3950)","`std::basic_string_view` comparison operators are overspecified","2024-03 (Tokyo)","{{Complete}}","18","[#105316](https://github.com/llvm/llvm-project/issues/105316)",""
+"[LWG3975](https://wg21.link/LWG3975)","Specializations of `basic_format_context` should not be permitted","2024-03 (Tokyo)","{{NothingToDo}}","","[#105317](https://github.com/llvm/llvm-project/issues/105317)",""
+"[LWG3984](https://wg21.link/LWG3984)","`ranges::to`'s recursion branch may be ill-formed","2024-03 (Tokyo)","{{Complete}}","19","[#105318](https://github.com/llvm/llvm-project/issues/105318)",""
+"[LWG4011](https://wg21.link/LWG4011)","""`Effects`: Equivalent to return"" in `[span.elem]`","2024-03 (Tokyo)","{{NothingToDo}}","","[#105319](https://github.com/llvm/llvm-project/issues/105319)",""
+"[LWG4012](https://wg21.link/LWG4012)","`common_view::begin/end` are missing the `simple-view` check","2024-03 (Tokyo)","{{Complete}}","23","[#105320](https://github.com/llvm/llvm-project/issues/105320)",""
+"[LWG4013](https://wg21.link/LWG4013)","`lazy_split_view::outer-iterator::value_type` should not provide default constructor","2024-03 (Tokyo)","","","[#105321](https://github.com/llvm/llvm-project/issues/105321)",""
+"[LWG4016](https://wg21.link/LWG4016)","container-insertable checks do not match what container-inserter does","2024-03 (Tokyo)","{{Complete}}","20","[#105322](https://github.com/llvm/llvm-project/issues/105322)",""
+"[LWG4023](https://wg21.link/LWG4023)","Preconditions of `std::basic_streambuf::setg/setp`","2024-03 (Tokyo)","{{Complete}}","19","[#105323](https://github.com/llvm/llvm-project/issues/105323)",""
+"[LWG4025](https://wg21.link/LWG4025)","Move assignment operator of `std::expected<cv void, E>` should not be conditionally deleted","2024-03 (Tokyo)","{{Complete}}","20","[#105324](https://github.com/llvm/llvm-project/issues/105324)",""
+"[LWG4030](https://wg21.link/LWG4030)","Clarify whether arithmetic expressions in `[numeric.sat.func]` are mathematical or C++","2024-03 (Tokyo)","{{NothingToDo}}","","[#105325](https://github.com/llvm/llvm-project/issues/105325)",""
+"[LWG4031](https://wg21.link/LWG4031)","`bad_expected_access<void>` member functions should be `noexcept`","2024-03 (Tokyo)","{{Complete}}","16","[#105326](https://github.com/llvm/llvm-project/issues/105326)",""
+"[LWG4035](https://wg21.link/LWG4035)","`single_view` should provide `empty`","2024-03 (Tokyo)","{{Complete}}","19","[#105328](https://github.com/llvm/llvm-project/issues/105328)",""
+"[LWG4036](https://wg21.link/LWG4036)","`__alignof_is_defined` is only implicitly specified in C++ and not yet deprecated","2024-03 (Tokyo)","","","[#105329](https://github.com/llvm/llvm-project/issues/105329)",""
+"[LWG4037](https://wg21.link/LWG4037)","Static data members of `ctype_base` are not yet required to be usable in constant expressions","2024-03 (Tokyo)","","","[#105330](https://github.com/llvm/llvm-project/issues/105330)",""
+"[LWG4038](https://wg21.link/LWG4038)","`std::text_encoding::aliases_view` should have constexpr iterators","2024-03 (Tokyo)","{{Complete}}","23","[#105332](https://github.com/llvm/llvm-project/issues/105332)",""
+"[LWG4043](https://wg21.link/LWG4043)","""ASCII"" is not a registered character encoding","2024-03 (Tokyo)","{{Complete}}","23","[#105335](https://github.com/llvm/llvm-project/issues/105335)",""
+"[LWG4045](https://wg21.link/LWG4045)","`tuple` can create dangling references from `tuple-like`","2024-03 (Tokyo)","","","[#105337](https://github.com/llvm/llvm-project/issues/105337)",""
+"[LWG4053](https://wg21.link/LWG4053)","Unary call to `std::views::repeat` does not decay the argument","2024-03 (Tokyo)","{{Complete}}","19","[#105338](https://github.com/llvm/llvm-project/issues/105338)",""
+"[LWG4054](https://wg21.link/LWG4054)","Repeating a `repeat_view` should repeat the view","2024-03 (Tokyo)","{{Complete}}","19","[#105340](https://github.com/llvm/llvm-project/issues/105340)",""
"","","","","","",""
-"`LWG3944 <https://wg21.link/LWG3944>`__","Formatters converting sequences of ``char`` to sequences of ``wchar_t``","2024-06 (St. Louis)","|Complete|","21","`#105342 <https://github.com/llvm/llvm-project/issues/105342>`__",""
-"`LWG4060 <https://wg21.link/LWG4060>`__","``submdspan`` preconditions do not forbid creating invalid pointer","2024-06 (St. Louis)","","","`#105343 <https://github.com/llvm/llvm-project/issues/105343>`__",""
-"`LWG4061 <https://wg21.link/LWG4061>`__","Should ``std::basic_format_context`` be default-constructible/copyable/movable?","2024-06 (St. Louis)","|Complete|","19","`#105344 <https://github.com/llvm/llvm-project/issues/105344>`__",""
-"`LWG4071 <https://wg21.link/LWG4071>`__","``reference_wrapper`` comparisons are not SFINAE-friendly","2024-06 (St. Louis)","|Complete|","19","`#105345 <https://github.com/llvm/llvm-project/issues/105345>`__",""
-"`LWG4074 <https://wg21.link/LWG4074>`__","``compatible-joinable-ranges`` is underconstrained","2024-06 (St. Louis)","|Complete|","21","`#105346 <https://github.com/llvm/llvm-project/issues/105346>`__",""
-"`LWG4076 <https://wg21.link/LWG4076>`__","``concat_view`` should be freestanding","2024-06 (St. Louis)","","","`#105347 <https://github.com/llvm/llvm-project/issues/105347>`__",""
-"`LWG4079 <https://wg21.link/LWG4079>`__","Missing Preconditions in ``concat_view::iterator``\`s conversion constructor","2024-06 (St. Louis)","|Complete|","23","`#105348 <https://github.com/llvm/llvm-project/issues/105348>`__",""
-"`LWG4082 <https://wg21.link/LWG4082>`__","``views::concat(r)`` is well-formed when ``r`` is an ``output_range``","2024-06 (St. Louis)","|Complete|","23","`#105349 <https://github.com/llvm/llvm-project/issues/105349>`__",""
-"`LWG4083 <https://wg21.link/LWG4083>`__","``views::as_rvalue`` should reject non-input ranges","2024-06 (St. Louis)","|Complete|","22","`#105351 <https://github.com/llvm/llvm-project/issues/105351>`__",""
-"`LWG4096 <https://wg21.link/LWG4096>`__","``views::iota(views::iota(0))`` should be rejected","2024-06 (St. Louis)","|Complete|","22","`#105352 <https://github.com/llvm/llvm-project/issues/105352>`__",""
-"`LWG4098 <https://wg21.link/LWG4098>`__","``views::adjacent<0>`` should reject non-forward ranges","2024-06 (St. Louis)","|Complete|","22","`#105353 <https://github.com/llvm/llvm-project/issues/105353>`__",""
-"`LWG4105 <https://wg21.link/LWG4105>`__","``ranges::ends_with``\`s Returns misses difference casting","2024-06 (St. Louis)","","","`#105354 <https://github.com/llvm/llvm-project/issues/105354>`__",""
-"`LWG4106 <https://wg21.link/LWG4106>`__","``basic_format_args`` should not be default-constructible","2024-06 (St. Louis)","|Complete|","19","`#105355 <https://github.com/llvm/llvm-project/issues/105355>`__",""
+"[LWG3944](https://wg21.link/LWG3944)","Formatters converting sequences of `char` to sequences of `wchar_t`","2024-06 (St. Louis)","{{Complete}}","21","[#105342](https://github.com/llvm/llvm-project/issues/105342)",""
+"[LWG4060](https://wg21.link/LWG4060)","`submdspan` preconditions do not forbid creating invalid pointer","2024-06 (St. Louis)","","","[#105343](https://github.com/llvm/llvm-project/issues/105343)",""
+"[LWG4061](https://wg21.link/LWG4061)","Should `std::basic_format_context` be default-constructible/copyable/movable?","2024-06 (St. Louis)","{{Complete}}","19","[#105344](https://github.com/llvm/llvm-project/issues/105344)",""
+"[LWG4071](https://wg21.link/LWG4071)","`reference_wrapper` comparisons are not SFINAE-friendly","2024-06 (St. Louis)","{{Complete}}","19","[#105345](https://github.com/llvm/llvm-project/issues/105345)",""
+"[LWG4074](https://wg21.link/LWG4074)","`compatible-joinable-ranges` is underconstrained","2024-06 (St. Louis)","{{Complete}}","21","[#105346](https://github.com/llvm/llvm-project/issues/105346)",""
+"[LWG4076](https://wg21.link/LWG4076)","`concat_view` should be freestanding","2024-06 (St. Louis)","","","[#105347](https://github.com/llvm/llvm-project/issues/105347)",""
+"[LWG4079](https://wg21.link/LWG4079)","Missing Preconditions in `concat_view::iterator`\`s conversion constructor","2024-06 (St. Louis)","{{Complete}}","23","[#105348](https://github.com/llvm/llvm-project/issues/105348)",""
+"[LWG4082](https://wg21.link/LWG4082)","`views::concat(r)` is well-formed when `r` is an `output_range`","2024-06 (St. Louis)","{{Complete}}","23","[#105349](https://github.com/llvm/llvm-project/issues/105349)",""
+"[LWG4083](https://wg21.link/LWG4083)","`views::as_rvalue` should reject non-input ranges","2024-06 (St. Louis)","{{Complete}}","22","[#105351](https://github.com/llvm/llvm-project/issues/105351)",""
+"[LWG4096](https://wg21.link/LWG4096)","`views::iota(views::iota(0))` should be rejected","2024-06 (St. Louis)","{{Complete}}","22","[#105352](https://github.com/llvm/llvm-project/issues/105352)",""
+"[LWG4098](https://wg21.link/LWG4098)","`views::adjacent<0>` should reject non-forward ranges","2024-06 (St. Louis)","{{Complete}}","22","[#105353](https://github.com/llvm/llvm-project/issues/105353)",""
+"[LWG4105](https://wg21.link/LWG4105)","`ranges::ends_with`\`s Returns misses difference casting","2024-06 (St. Louis)","","","[#105354](https://github.com/llvm/llvm-project/issues/105354)",""
+"[LWG4106](https://wg21.link/LWG4106)","`basic_format_args` should not be default-constructible","2024-06 (St. Louis)","{{Complete}}","19","[#105355](https://github.com/llvm/llvm-project/issues/105355)",""
"","","","","","",""
-"`LWG3216 <https://wg21.link/LWG3216>`__","Rebinding the allocator before calling ``construct``/``destroy`` in ``allocate_shared``","2024-11 (Wrocław)","","","`#118332 <https://github.com/llvm/llvm-project/issues/118332>`__",""
-"`LWG3436 <https://wg21.link/LWG3436>`__","``std::construct_at`` should support arrays","2024-11 (Wrocław)","","","`#118335 <https://github.com/llvm/llvm-project/issues/118335>`__",""
-"`LWG3886 <https://wg21.link/LWG3886>`__","Monad mo' problems","2024-11 (Wrocław)","|Complete|","22","`#118336 <https://github.com/llvm/llvm-project/issues/118336>`__",""
-"`LWG3899 <https://wg21.link/LWG3899>`__","``co_yield``\ing elements of an lvalue generator is unnecessarily inefficient","2024-11 (Wrocław)","","","`#118337 <https://github.com/llvm/llvm-project/issues/118337>`__",""
-"`LWG3900 <https://wg21.link/LWG3900>`__","The ``allocator_arg_t`` overloads of ``generator::promise_type::operator new`` should not be constrained","2024-11 (Wrocław)","","","`#118338 <https://github.com/llvm/llvm-project/issues/118338>`__",""
-"`LWG3918 <https://wg21.link/LWG3918>`__","``std::uninitialized_move/_n`` and guaranteed copy elision","2024-11 (Wrocław)","|Complete|","23","`#118339 <https://github.com/llvm/llvm-project/issues/118339>`__",""
-"`LWG4014 <https://wg21.link/LWG4014>`__","LWG 3809 changes behavior of some existing ``std::subtract_with_carry_engine code``","2024-11 (Wrocław)","","","`#118340 <https://github.com/llvm/llvm-project/issues/118340>`__",""
-"`LWG4024 <https://wg21.link/LWG4024>`__","Underspecified destruction of objects created in ``std::make_shared_for_overwrite``/``std::allocate_shared_for_overwrite``","2024-11 (Wrocław)","|Complete|","16","`#118341 <https://github.com/llvm/llvm-project/issues/118341>`__",""
-"`LWG4027 <https://wg21.link/LWG4027>`__","``possibly-const-range`` should prefer returning ``const R&``","2024-11 (Wrocław)","","","`#118342 <https://github.com/llvm/llvm-project/issues/118342>`__",""
-"`LWG4044 <https://wg21.link/LWG4044>`__","Confusing requirements for ``std::print`` on POSIX platforms","2024-11 (Wrocław)","","","`#118343 <https://github.com/llvm/llvm-project/issues/118343>`__",""
-"`LWG4064 <https://wg21.link/LWG4064>`__","Clarify that ``std::launder`` is not needed when using the result of ``std::memcpy``","2024-11 (Wrocław)","","","`#118344 <https://github.com/llvm/llvm-project/issues/118344>`__",""
-"`LWG4072 <https://wg21.link/LWG4072>`__","``std::optional`` comparisons: constrain harder","2024-11 (Wrocław)","|Complete|","24","`#118345 <https://github.com/llvm/llvm-project/issues/118345>`__",""
-"`LWG4084 <https://wg21.link/LWG4084>`__","``std::fixed`` ignores ``std::uppercase``","2024-11 (Wrocław)","|Complete|","","`#118346 <https://github.com/llvm/llvm-project/issues/118346>`__",""
-"`LWG4085 <https://wg21.link/LWG4085>`__","``ranges::generate_random``'s helper lambda should specify the return type","2024-11 (Wrocław)","","","`#118347 <https://github.com/llvm/llvm-project/issues/118347>`__",""
-"`LWG4088 <https://wg21.link/LWG4088>`__","``println`` ignores the locale imbued in ``std::ostream``","2024-11 (Wrocław)","|Complete|","18","`#118348 <https://github.com/llvm/llvm-project/issues/118348>`__",""
-"`LWG4112 <https://wg21.link/LWG4112>`__","``has-arrow`` should required ``operator->()`` to be ``const``-qualified","2024-11 (Wrocław)","","","`#118349 <https://github.com/llvm/llvm-project/issues/118349>`__",""
-"`LWG4113 <https://wg21.link/LWG4113>`__","Disallow ``has_unique_object_representations<Incomplete[]>``","2024-11 (Wrocław)","|Complete|","","`#118350 <https://github.com/llvm/llvm-project/issues/118350>`__",""
-"`LWG4119 <https://wg21.link/LWG4119>`__","``generator::promise_type::yield_value(ranges::elements_of<R, Alloc>)``'s nested ``generator`` may be ill-formed","2024-11 (Wrocław)","","","`#118351 <https://github.com/llvm/llvm-project/issues/118351>`__",""
-"`LWG4124 <https://wg21.link/LWG4124>`__","Cannot format ``zoned_time`` with resolution coarser than ``seconds``","2024-11 (Wrocław)","","","`#118352 <https://github.com/llvm/llvm-project/issues/118352>`__",""
-"`LWG4126 <https://wg21.link/LWG4126>`__","Some feature-test macros for fully freestanding features are not yet marked freestanding","2024-11 (Wrocław)","","","`#118353 <https://github.com/llvm/llvm-project/issues/118353>`__",""
-"`LWG4134 <https://wg21.link/LWG4134>`__","Issue with Philox algorithm specification","2024-11 (Wrocław)","","","`#118354 <https://github.com/llvm/llvm-project/issues/118354>`__",""
-"`LWG4135 <https://wg21.link/LWG4135>`__","The helper lambda of ``std::erase`` for list should specify return type as ``bool``","2024-11 (Wrocław)","|Complete|","21","`#118355 <https://github.com/llvm/llvm-project/issues/118355>`__",""
-"`LWG4140 <https://wg21.link/LWG4140>`__","Useless default constructors for bit reference types","2024-11 (Wrocław)","|Complete|","","`#118356 <https://github.com/llvm/llvm-project/issues/118356>`__",""
-"`LWG4141 <https://wg21.link/LWG4141>`__","Improve prohibitions on ""additional storage""","2024-11 (Wrocław)","","","`#118357 <https://github.com/llvm/llvm-project/issues/118357>`__",""
-"`LWG4142 <https://wg21.link/LWG4142>`__","``format_parse_context::check_dynamic_spec`` should require at least one type","2024-11 (Wrocław)","","","`#118358 <https://github.com/llvm/llvm-project/issues/118358>`__",""
-"`LWG4144 <https://wg21.link/LWG4144>`__","Disallow ``unique_ptr<T&, D>``","2024-11 (Wrocław)","|Complete|","23","`#118359 <https://github.com/llvm/llvm-project/issues/118359>`__",""
-"`LWG4147 <https://wg21.link/LWG4147>`__","Precondition on ``inplace_vector::emplace``","2024-11 (Wrocław)","","","`#118361 <https://github.com/llvm/llvm-project/issues/118361>`__",""
-"`LWG4148 <https://wg21.link/LWG4148>`__","``unique_ptr::operator*`` should not allow dangling references","2024-11 (Wrocław)","|Complete|","24","`#118362 <https://github.com/llvm/llvm-project/issues/118362>`__",""
-"`LWG4153 <https://wg21.link/LWG4153>`__","Fix extra ""-1"" for ``philox_engine::max()``","2024-11 (Wrocław)","","","`#118363 <https://github.com/llvm/llvm-project/issues/118363>`__",""
-"`LWG4154 <https://wg21.link/LWG4154>`__","The Mandates for ``std::packaged_task``'s constructor from a callable entity should consider decaying","2024-11 (Wrocław)","","","`#118364 <https://github.com/llvm/llvm-project/issues/118364>`__",""
-"`LWG4157 <https://wg21.link/LWG4157>`__","The resolution of LWG3465 was damaged by P2167R3","2024-11 (Wrocław)","|Complete|","20","`#118365 <https://github.com/llvm/llvm-project/issues/118365>`__",""
-"`LWG4164 <https://wg21.link/LWG4164>`__","Missing guarantees for ``forward_list`` modifiers","2024-11 (Wrocław)","|Complete|","21","`#118366 <https://github.com/llvm/llvm-project/issues/118366>`__",""
-"`LWG4169 <https://wg21.link/LWG4169>`__","``std::atomic<T>``'s default constructor should be constrained","2024-11 (Wrocław)","|Complete|","24","`#118367 <https://github.com/llvm/llvm-project/issues/118367>`__",""
-"`LWG4170 <https://wg21.link/LWG4170>`__","``contiguous_iterator`` should require ``to_address(I{})``","2024-11 (Wrocław)","","","`#118368 <https://github.com/llvm/llvm-project/issues/118368>`__",""
+"[LWG3216](https://wg21.link/LWG3216)","Rebinding the allocator before calling `construct`/`destroy` in `allocate_shared`","2024-11 (Wrocław)","","","[#118332](https://github.com/llvm/llvm-project/issues/118332)",""
+"[LWG3436](https://wg21.link/LWG3436)","`std::construct_at` should support arrays","2024-11 (Wrocław)","","","[#118335](https://github.com/llvm/llvm-project/issues/118335)",""
+"[LWG3886](https://wg21.link/LWG3886)","Monad mo' problems","2024-11 (Wrocław)","{{Complete}}","22","[#118336](https://github.com/llvm/llvm-project/issues/118336)",""
+"[LWG3899](https://wg21.link/LWG3899)","`co_yield`ing elements of an lvalue generator is unnecessarily inefficient","2024-11 (Wrocław)","","","[#118337](https://github.com/llvm/llvm-project/issues/118337)",""
+"[LWG3900](https://wg21.link/LWG3900)","The `allocator_arg_t` overloads of `generator::promise_type::operator new` should not be constrained","2024-11 (Wrocław)","","","[#118338](https://github.com/llvm/llvm-project/issues/118338)",""
+"[LWG3918](https://wg21.link/LWG3918)","`std::uninitialized_move/_n` and guaranteed copy elision","2024-11 (Wrocław)","{{Complete}}","23","[#118339](https://github.com/llvm/llvm-project/issues/118339)",""
+"[LWG4014](https://wg21.link/LWG4014)","LWG 3809 changes behavior of some existing `std::subtract_with_carry_engine code`","2024-11 (Wrocław)","","","[#118340](https://github.com/llvm/llvm-project/issues/118340)",""
+"[LWG4024](https://wg21.link/LWG4024)","Underspecified destruction of objects created in `std::make_shared_for_overwrite`/`std::allocate_shared_for_overwrite`","2024-11 (Wrocław)","{{Complete}}","16","[#118341](https://github.com/llvm/llvm-project/issues/118341)",""
+"[LWG4027](https://wg21.link/LWG4027)","`possibly-const-range` should prefer returning `const R&`","2024-11 (Wrocław)","","","[#118342](https://github.com/llvm/llvm-project/issues/118342)",""
+"[LWG4044](https://wg21.link/LWG4044)","Confusing requirements for `std::print` on POSIX platforms","2024-11 (Wrocław)","","","[#118343](https://github.com/llvm/llvm-project/issues/118343)",""
+"[LWG4064](https://wg21.link/LWG4064)","Clarify that `std::launder` is not needed when using the result of `std::memcpy`","2024-11 (Wrocław)","","","[#118344](https://github.com/llvm/llvm-project/issues/118344)",""
+"[LWG4072](https://wg21.link/LWG4072)","`std::optional` comparisons: constrain harder","2024-11 (Wrocław)","{{Complete}}","24","[#118345](https://github.com/llvm/llvm-project/issues/118345)",""
+"[LWG4084](https://wg21.link/LWG4084)","`std::fixed` ignores `std::uppercase`","2024-11 (Wrocław)","{{Complete}}","","[#118346](https://github.com/llvm/llvm-project/issues/118346)",""
+"[LWG4085](https://wg21.link/LWG4085)","`ranges::generate_random`'s helper lambda should specify the return type","2024-11 (Wrocław)","","","[#118347](https://github.com/llvm/llvm-project/issues/118347)",""
+"[LWG4088](https://wg21.link/LWG4088)","`println` ignores the locale imbued in `std::ostream`","2024-11 (Wrocław)","{{Complete}}","18","[#118348](https://github.com/llvm/llvm-project/issues/118348)",""
+"[LWG4112](https://wg21.link/LWG4112)","`has-arrow` should required `operator->()` to be `const`-qualified","2024-11 (Wrocław)","","","[#118349](https://github.com/llvm/llvm-project/issues/118349)",""
+"[LWG4113](https://wg21.link/LWG4113)","Disallow `has_unique_object_representations<Incomplete[]>`","2024-11 (Wrocław)","{{Complete}}","","[#118350](https://github.com/llvm/llvm-project/issues/118350)",""
+"[LWG4119](https://wg21.link/LWG4119)","`generator::promise_type::yield_value(ranges::elements_of<R, Alloc>)`'s nested `generator` may be ill-formed","2024-11 (Wrocław)","","","[#118351](https://github.com/llvm/llvm-project/issues/118351)",""
+"[LWG4124](https://wg21.link/LWG4124)","Cannot format `zoned_time` with resolution coarser than `seconds`","2024-11 (Wrocław)","","","[#118352](https://github.com/llvm/llvm-project/issues/118352)",""
+"[LWG4126](https://wg21.link/LWG4126)","Some feature-test macros for fully freestanding features are not yet marked freestanding","2024-11 (Wrocław)","","","[#118353](https://github.com/llvm/llvm-project/issues/118353)",""
+"[LWG4134](https://wg21.link/LWG4134)","Issue with Philox algorithm specification","2024-11 (Wrocław)","","","[#118354](https://github.com/llvm/llvm-project/issues/118354)",""
+"[LWG4135](https://wg21.link/LWG4135)","The helper lambda of `std::erase` for list should specify return type as `bool`","2024-11 (Wrocław)","{{Complete}}","21","[#118355](https://github.com/llvm/llvm-project/issues/118355)",""
+"[LWG4140](https://wg21.link/LWG4140)","Useless default constructors for bit reference types","2024-11 (Wrocław)","{{Complete}}","","[#118356](https://github.com/llvm/llvm-project/issues/118356)",""
+"[LWG4141](https://wg21.link/LWG4141)","Improve prohibitions on ""additional storage""","2024-11 (Wrocław)","","","[#118357](https://github.com/llvm/llvm-project/issues/118357)",""
+"[LWG4142](https://wg21.link/LWG4142)","`format_parse_context::check_dynamic_spec` should require at least one type","2024-11 (Wrocław)","","","[#118358](https://github.com/llvm/llvm-project/issues/118358)",""
+"[LWG4144](https://wg21.link/LWG4144)","Disallow `unique_ptr<T&, D>`","2024-11 (Wrocław)","{{Complete}}","23","[#118359](https://github.com/llvm/llvm-project/issues/118359)",""
+"[LWG4147](https://wg21.link/LWG4147)","Precondition on `inplace_vector::emplace`","2024-11 (Wrocław)","","","[#118361](https://github.com/llvm/llvm-project/issues/118361)",""
+"[LWG4148](https://wg21.link/LWG4148)","`unique_ptr::operator*` should not allow dangling references","2024-11 (Wrocław)","{{Complete}}","24","[#118362](https://github.com/llvm/llvm-project/issues/118362)",""
+"[LWG4153](https://wg21.link/LWG4153)","Fix extra ""-1"" for `philox_engine::max()`","2024-11 (Wrocław)","","","[#118363](https://github.com/llvm/llvm-project/issues/118363)",""
+"[LWG4154](https://wg21.link/LWG4154)","The Mandates for `std::packaged_task`'s constructor from a callable entity should consider decaying","2024-11 (Wrocław)","","","[#118364](https://github.com/llvm/llvm-project/issues/118364)",""
+"[LWG4157](https://wg21.link/LWG4157)","The resolution of LWG3465 was damaged by P2167R3","2024-11 (Wrocław)","{{Complete}}","20","[#118365](https://github.com/llvm/llvm-project/issues/118365)",""
+"[LWG4164](https://wg21.link/LWG4164)","Missing guarantees for `forward_list` modifiers","2024-11 (Wrocław)","{{Complete}}","21","[#118366](https://github.com/llvm/llvm-project/issues/118366)",""
+"[LWG4169](https://wg21.link/LWG4169)","`std::atomic<T>`'s default constructor should be constrained","2024-11 (Wrocław)","{{Complete}}","24","[#118367](https://github.com/llvm/llvm-project/issues/118367)",""
+"[LWG4170](https://wg21.link/LWG4170)","`contiguous_iterator` should require `to_address(I{})`","2024-11 (Wrocław)","","","[#118368](https://github.com/llvm/llvm-project/issues/118368)",""
"","","","","","",""
-"`LWG3578 <https://wg21.link/LWG3578>`__","Iterator SCARYness in the context of associative container merging","2025-02 (Hagenberg)","","","`#127859 <https://github.com/llvm/llvm-project/issues/127859>`__",""
-"`LWG3956 <https://wg21.link/LWG3956>`__","``chrono::parse`` uses ``from_stream`` as a customization point","2025-02 (Hagenberg)","","","`#127860 <https://github.com/llvm/llvm-project/issues/127860>`__",""
-"`LWG4172 <https://wg21.link/LWG4172>`__","``unique_lock`` self-move-assignment is broken","2025-02 (Hagenberg)","|Complete|","22","`#127861 <https://github.com/llvm/llvm-project/issues/127861>`__",""
-"`LWG4175 <https://wg21.link/LWG4175>`__","``get_env()`` specified in terms of ``as_const()`` but this doesn't work with rvalue senders","2025-02 (Hagenberg)","","","`#127862 <https://github.com/llvm/llvm-project/issues/127862>`__",""
-"`LWG4179 <https://wg21.link/LWG4179>`__","Wrong range in ``[alg.search]``","2025-02 (Hagenberg)","","","`#127863 <https://github.com/llvm/llvm-project/issues/127863>`__",""
-"`LWG4186 <https://wg21.link/LWG4186>`__","``regex_traits::transform_primary`` mistakenly detects ``typeid`` of a function","2025-02 (Hagenberg)","","","`#127864 <https://github.com/llvm/llvm-project/issues/127864>`__",""
-"`LWG4189 <https://wg21.link/LWG4189>`__","``cache_latest_view`` should be freestanding","2025-02 (Hagenberg)","","","`#127865 <https://github.com/llvm/llvm-project/issues/127865>`__",""
-"`LWG4191 <https://wg21.link/LWG4191>`__","P1467 changed the return type of ``pow(complex<float>, int)``","2025-02 (Hagenberg)","","","`#127866 <https://github.com/llvm/llvm-project/issues/127866>`__",""
-"`LWG4196 <https://wg21.link/LWG4196>`__","Complexity of ``inplace_merge()`` is incorrect","2025-02 (Hagenberg)","","","`#127867 <https://github.com/llvm/llvm-project/issues/127867>`__",""
+"[LWG3578](https://wg21.link/LWG3578)","Iterator SCARYness in the context of associative container merging","2025-02 (Hagenberg)","","","[#127859](https://github.com/llvm/llvm-project/issues/127859)",""
+"[LWG3956](https://wg21.link/LWG3956)","`chrono::parse` uses `from_stream` as a customization point","2025-02 (Hagenberg)","","","[#127860](https://github.com/llvm/llvm-project/issues/127860)",""
+"[LWG4172](https://wg21.link/LWG4172)","`unique_lock` self-move-assignment is broken","2025-02 (Hagenberg)","{{Complete}}","22","[#127861](https://github.com/llvm/llvm-project/issues/127861)",""
+"[LWG4175](https://wg21.link/LWG4175)","`get_env()` specified in terms of `as_const()` but this doesn't work with rvalue senders","2025-02 (Hagenberg)","","","[#127862](https://github.com/llvm/llvm-project/issues/127862)",""
+"[LWG4179](https://wg21.link/LWG4179)","Wrong range in `[alg.search]`","2025-02 (Hagenberg)","","","[#127863](https://github.com/llvm/llvm-project/issues/127863)",""
+"[LWG4186](https://wg21.link/LWG4186)","`regex_traits::transform_primary` mistakenly detects `typeid` of a function","2025-02 (Hagenberg)","","","[#127864](https://github.com/llvm/llvm-project/issues/127864)",""
+"[LWG4189](https://wg21.link/LWG4189)","`cache_latest_view` should be freestanding","2025-02 (Hagenberg)","","","[#127865](https://github.com/llvm/llvm-project/issues/127865)",""
+"[LWG4191](https://wg21.link/LWG4191)","P1467 changed the return type of `pow(complex<float>, int)`","2025-02 (Hagenberg)","","","[#127866](https://github.com/llvm/llvm-project/issues/127866)",""
+"[LWG4196](https://wg21.link/LWG4196)","Complexity of `inplace_merge()` is incorrect","2025-02 (Hagenberg)","","","[#127867](https://github.com/llvm/llvm-project/issues/127867)",""
"","","","","","",""
-"`LWG4198 <https://wg21.link/LWG4198>`__","``schedule_from`` isn't starting the schedule sender if decay-copying results throws","2025-06 (Sofia)","","","`#148188 <https://github.com/llvm/llvm-project/issues/148188>`__",""
-"`LWG4202 <https://wg21.link/LWG4202>`__","``enable-sender`` should be a variable template","2025-06 (Sofia)","","","`#148189 <https://github.com/llvm/llvm-project/issues/148189>`__",""
-"`LWG4203 <https://wg21.link/LWG4203>`__","Constraints on ``get-state`` functions are incorrect","2025-06 (Sofia)","","","`#148190 <https://github.com/llvm/llvm-project/issues/148190>`__",""
-"`LWG4204 <https://wg21.link/LWG4204>`__","specification of ``as-sndr2(Sig)`` in [exec.let] is incomplete","2025-06 (Sofia)","","","`#148192 <https://github.com/llvm/llvm-project/issues/148192>`__",""
-"`LWG4205 <https://wg21.link/LWG4205>`__","``let_[*].transform_env`` is specified in terms of the ``let_*`` sender itself instead of its child","2025-06 (Sofia)","","","`#148193 <https://github.com/llvm/llvm-project/issues/148193>`__",""
-"`LWG4208 <https://wg21.link/LWG4208>`__","Wording needs to ensure that in ``connect(sndr, rcvr)`` that ``rcvr`` expression is only evaluated once","2025-06 (Sofia)","","","`#148194 <https://github.com/llvm/llvm-project/issues/148194>`__",""
-"`LWG4209 <https://wg21.link/LWG4209>`__","``default_domain::transform_env`` should be returning ``FWD-ENV(env)``","2025-06 (Sofia)","","","`#148196 <https://github.com/llvm/llvm-project/issues/148196>`__",""
-"`LWG4188 <https://wg21.link/LWG4188>`__","``ostream::sentry`` destructor should handle exceptions","2025-06 (Sofia)","","","`#148200 <https://github.com/llvm/llvm-project/issues/148200>`__",""
-"`LWG4200 <https://wg21.link/LWG4200>`__","The ``operation_state`` concept can be simplified","2025-06 (Sofia)","","","`#148201 <https://github.com/llvm/llvm-project/issues/148201>`__",""
-"`LWG4201 <https://wg21.link/LWG4201>`__","``with-await-transform::await_transform`` should not use a deduced return type","2025-06 (Sofia)","","","`#148202 <https://github.com/llvm/llvm-project/issues/148202>`__",""
-"`LWG4217 <https://wg21.link/LWG4217>`__","Clarify ``mdspan`` layout mapping requirements for ``rank == 0``","2025-06 (Sofia)","","","`#148203 <https://github.com/llvm/llvm-project/issues/148203>`__",""
-"`LWG4222 <https://wg21.link/LWG4222>`__","``expected`` constructor from a single value missing a constraint","2025-06 (Sofia)","|Complete|","22","`#148208 <https://github.com/llvm/llvm-project/issues/148208>`__",""
-"`LWG4224 <https://wg21.link/LWG4224>`__","Philox engines should be freestanding","2025-06 (Sofia)","","","`#148210 <https://github.com/llvm/llvm-project/issues/148210>`__",""
-"`LWG4227 <https://wg21.link/LWG4227>`__","Missing ``noexcept`` operator in [exec.when.all]","2025-06 (Sofia)","","","`#148211 <https://github.com/llvm/llvm-project/issues/148211>`__",""
-"`LWG4231 <https://wg21.link/LWG4231>`__","``datapar::chunk<N>`` should use ``simd-size-type`` instead of ``size_t``","2025-06 (Sofia)","","","`#148215 <https://github.com/llvm/llvm-project/issues/148215>`__",""
-"`LWG4232 <https://wg21.link/LWG4232>`__","``datapar::resize`` does not resize","2025-06 (Sofia)","","","`#148216 <https://github.com/llvm/llvm-project/issues/148216>`__",""
-"`LWG4233 <https://wg21.link/LWG4233>`__","The helper lambda of ``std::erase`` for ``hive`` should specify return type as ``bool``","2025-06 (Sofia)","","","`#148217 <https://github.com/llvm/llvm-project/issues/148217>`__",""
-"`LWG4234 <https://wg21.link/LWG4234>`__","Including ``<hive>`` doesn't provide ``std::begin/end``","2025-06 (Sofia)","","","`#148218 <https://github.com/llvm/llvm-project/issues/148218>`__",""
-"`LWG4235 <https://wg21.link/LWG4235>`__","``cache_latest_view`` and ``to_input_view`` miss ``reserve_hint``","2025-06 (Sofia)","","","`#148219 <https://github.com/llvm/llvm-project/issues/148219>`__",""
-"`LWG4236 <https://wg21.link/LWG4236>`__","``chunk_view::outer-iterator::value_type`` should provide ``reserve_hint``","2025-06 (Sofia)","","","`#148220 <https://github.com/llvm/llvm-project/issues/148220>`__",""
-"`LWG4239 <https://wg21.link/LWG4239>`__","``flat_map``'s transparent comparator no longer works for string literals","2025-06 (Sofia)","","","`#148223 <https://github.com/llvm/llvm-project/issues/148223>`__",""
-"`LWG4242 <https://wg21.link/LWG4242>`__","``ranges::distance`` does not work with volatile iterators","2025-06 (Sofia)","|Complete|","14","`#148224 <https://github.com/llvm/llvm-project/issues/148224>`__",""
-"`LWG4245 <https://wg21.link/LWG4245>`__","Operators that interact with ``counted_iterator`` and ``default_sentinel_t`` should be ``noexcept``","2025-06 (Sofia)","","","`#148226 <https://github.com/llvm/llvm-project/issues/148226>`__",""
-"`LWG4247 <https://wg21.link/LWG4247>`__","Header ``<stdbit.h>`` is not yet freestanding","2025-06 (Sofia)","","","`#148227 <https://github.com/llvm/llvm-project/issues/148227>`__",""
+"[LWG4198](https://wg21.link/LWG4198)","`schedule_from` isn't starting the schedule sender if decay-copying results throws","2025-06 (Sofia)","","","[#148188](https://github.com/llvm/llvm-project/issues/148188)",""
+"[LWG4202](https://wg21.link/LWG4202)","`enable-sender` should be a variable template","2025-06 (Sofia)","","","[#148189](https://github.com/llvm/llvm-project/issues/148189)",""
+"[LWG4203](https://wg21.link/LWG4203)","Constraints on `get-state` functions are incorrect","2025-06 (Sofia)","","","[#148190](https://github.com/llvm/llvm-project/issues/148190)",""
+"[LWG4204](https://wg21.link/LWG4204)","specification of `as-sndr2(Sig)` in [exec.let] is incomplete","2025-06 (Sofia)","","","[#148192](https://github.com/llvm/llvm-project/issues/148192)",""
+"[LWG4205](https://wg21.link/LWG4205)","`let_[*].transform_env` is specified in terms of the `let_*` sender itself instead of its child","2025-06 (Sofia)","","","[#148193](https://github.com/llvm/llvm-project/issues/148193)",""
+"[LWG4208](https://wg21.link/LWG4208)","Wording needs to ensure that in `connect(sndr, rcvr)` that `rcvr` expression is only evaluated once","2025-06 (Sofia)","","","[#148194](https://github.com/llvm/llvm-project/issues/148194)",""
+"[LWG4209](https://wg21.link/LWG4209)","`default_domain::transform_env` should be returning `FWD-ENV(env)`","2025-06 (Sofia)","","","[#148196](https://github.com/llvm/llvm-project/issues/148196)",""
+"[LWG4188](https://wg21.link/LWG4188)","`ostream::sentry` destructor should handle exceptions","2025-06 (Sofia)","","","[#148200](https://github.com/llvm/llvm-project/issues/148200)",""
+"[LWG4200](https://wg21.link/LWG4200)","The `operation_state` concept can be simplified","2025-06 (Sofia)","","","[#148201](https://github.com/llvm/llvm-project/issues/148201)",""
+"[LWG4201](https://wg21.link/LWG4201)","`with-await-transform::await_transform` should not use a deduced return type","2025-06 (Sofia)","","","[#148202](https://github.com/llvm/llvm-project/issues/148202)",""
+"[LWG4217](https://wg21.link/LWG4217)","Clarify `mdspan` layout mapping requirements for `rank == 0`","2025-06 (Sofia)","","","[#148203](https://github.com/llvm/llvm-project/issues/148203)",""
+"[LWG4222](https://wg21.link/LWG4222)","`expected` constructor from a single value missing a constraint","2025-06 (Sofia)","{{Complete}}","22","[#148208](https://github.com/llvm/llvm-project/issues/148208)",""
+"[LWG4224](https://wg21.link/LWG4224)","Philox engines should be freestanding","2025-06 (Sofia)","","","[#148210](https://github.com/llvm/llvm-project/issues/148210)",""
+"[LWG4227](https://wg21.link/LWG4227)","Missing `noexcept` operator in [exec.when.all]","2025-06 (Sofia)","","","[#148211](https://github.com/llvm/llvm-project/issues/148211)",""
+"[LWG4231](https://wg21.link/LWG4231)","`datapar::chunk<N>` should use `simd-size-type` instead of `size_t`","2025-06 (Sofia)","","","[#148215](https://github.com/llvm/llvm-project/issues/148215)",""
+"[LWG4232](https://wg21.link/LWG4232)","`datapar::resize` does not resize","2025-06 (Sofia)","","","[#148216](https://github.com/llvm/llvm-project/issues/148216)",""
+"[LWG4233](https://wg21.link/LWG4233)","The helper lambda of `std::erase` for `hive` should specify return type as `bool`","2025-06 (Sofia)","","","[#148217](https://github.com/llvm/llvm-project/issues/148217)",""
+"[LWG4234](https://wg21.link/LWG4234)","Including `<hive>` doesn't provide `std::begin/end`","2025-06 (Sofia)","","","[#148218](https://github.com/llvm/llvm-project/issues/148218)",""
+"[LWG4235](https://wg21.link/LWG4235)","`cache_latest_view` and `to_input_view` miss `reserve_hint`","2025-06 (Sofia)","","","[#148219](https://github.com/llvm/llvm-project/issues/148219)",""
+"[LWG4236](https://wg21.link/LWG4236)","`chunk_view::outer-iterator::value_type` should provide `reserve_hint`","2025-06 (Sofia)","","","[#148220](https://github.com/llvm/llvm-project/issues/148220)",""
+"[LWG4239](https://wg21.link/LWG4239)","`flat_map`'s transparent comparator no longer works for string literals","2025-06 (Sofia)","","","[#148223](https://github.com/llvm/llvm-project/issues/148223)",""
+"[LWG4242](https://wg21.link/LWG4242)","`ranges::distance` does not work with volatile iterators","2025-06 (Sofia)","{{Complete}}","14","[#148224](https://github.com/llvm/llvm-project/issues/148224)",""
+"[LWG4245](https://wg21.link/LWG4245)","Operators that interact with `counted_iterator` and `default_sentinel_t` should be `noexcept`","2025-06 (Sofia)","","","[#148226](https://github.com/llvm/llvm-project/issues/148226)",""
+"[LWG4247](https://wg21.link/LWG4247)","Header `<stdbit.h>` is not yet freestanding","2025-06 (Sofia)","","","[#148227](https://github.com/llvm/llvm-project/issues/148227)",""
"","","","","","",""
-"`LWG2991 <https://wg21.link/LWG2991>`__","``variant copy`` constructor missing ``noexcept(see below)``","2025-11 (Kona)","","","`#171301 <https://github.com/llvm/llvm-project/issues/171301>`__",""
-"`LWG3090 <https://wg21.link/LWG3090>`__","What is §[time.duration.cons]p4's ""no overflow is induced in the conversion"" intended to mean?","2025-11 (Kona)","","","`#171302 <https://github.com/llvm/llvm-project/issues/171302>`__",""
-"`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","2025-11 (Kona)","|Complete|","16","`#105356 <https://github.com/llvm/llvm-project/issues/105356>`__",""
-"`LWG3454 <https://wg21.link/LWG3454>`__","``pointer_traits::pointer_to`` should be ``constexpr``","2025-11 (Kona)","|Complete|","16","`#171307 <https://github.com/llvm/llvm-project/issues/171307>`__",""
-"`LWG3627 <https://wg21.link/LWG3627>`__","Inconsistent specifications for ``std::make_optional`` overloads","2025-11 (Kona)","|Complete|","22","`#171309 <https://github.com/llvm/llvm-project/issues/171309>`__",""
-"`LWG4015 <https://wg21.link/LWG4015>`__","LWG 3973 broke const overloads of ``std::optional`` monadic operations","2025-11 (Kona)","","","`#171310 <https://github.com/llvm/llvm-project/issues/171310>`__",""
-"`LWG4020 <https://wg21.link/LWG4020>`__","``extents::index-cast`` weirdness","2025-11 (Kona)","|Complete|","23","`#171311 <https://github.com/llvm/llvm-project/issues/171311>`__",""
-"`LWG4136 <https://wg21.link/LWG4136>`__","Specify behavior of [linalg] Hermitian algorithms on diagonal with nonzero imaginary part","2025-11 (Kona)","","","`#171312 <https://github.com/llvm/llvm-project/issues/171312>`__",""
-"`LWG4137 <https://wg21.link/LWG4137>`__","Fix *Mandates*, *Preconditions*, and *Complexity* elements of [linalg] algorithms","2025-11 (Kona)","","","`#171313 <https://github.com/llvm/llvm-project/issues/171313>`__",""
-"`LWG4166 <https://wg21.link/LWG4166>`__","``concat_view::end()`` should be more constrained in order to support noncopyable iterators","2025-11 (Kona)","|Complete|","23","`#171314 <https://github.com/llvm/llvm-project/issues/171314>`__",""
-"`LWG4230 <https://wg21.link/LWG4230>`__","``simd<complex>::real/imag`` is overconstrained","2025-11 (Kona)","","","`#171316 <https://github.com/llvm/llvm-project/issues/171316>`__",""
-"`LWG4243 <https://wg21.link/LWG4243>`__","``as_bytes``/``as_writable_bytes`` is broken with ``span<volatile T>``","2025-11 (Kona)","|Complete|","23","`#171317 <https://github.com/llvm/llvm-project/issues/171317>`__",""
-"`LWG4251 <https://wg21.link/LWG4251>`__","Move assignment for ``indirect`` unnecessarily requires copy construction","2025-11 (Kona)","","","`#171318 <https://github.com/llvm/llvm-project/issues/171318>`__",""
-"`LWG4253 <https://wg21.link/LWG4253>`__","``basic_const_iterator`` should provide ``iterator_type``","2025-11 (Kona)","","","`#171319 <https://github.com/llvm/llvm-project/issues/171319>`__",""
-"`LWG4255 <https://wg21.link/LWG4255>`__","``move_only_function`` constructor should recognize empty ``copyable_function``\s","2025-11 (Kona)","","","`#171320 <https://github.com/llvm/llvm-project/issues/171320>`__",""
-"`LWG4256 <https://wg21.link/LWG4256>`__","Incorrect constrains for ``function_ref`` constructors from ``nontype_t``","2025-11 (Kona)","|Complete|","24","`#171321 <https://github.com/llvm/llvm-project/issues/171321>`__",""
-"`LWG4257 <https://wg21.link/LWG4257>`__","Stream insertion for ``chrono::local_time`` should be constrained","2025-11 (Kona)","","","`#171322 <https://github.com/llvm/llvm-project/issues/171322>`__",""
-"`LWG4260 <https://wg21.link/LWG4260>`__","Query objects must be default constructible","2025-11 (Kona)","","","`#171323 <https://github.com/llvm/llvm-project/issues/171323>`__",""
-"`LWG4265 <https://wg21.link/LWG4265>`__","``std::midpoint`` should not accept ``const bool``","2025-11 (Kona)","|Complete|","22","`#171324 <https://github.com/llvm/llvm-project/issues/171324>`__",""
-"`LWG4266 <https://wg21.link/LWG4266>`__","``layout_stride::mapping`` should treat empty mappings as exhaustive","2025-11 (Kona)","|Complete|","23","`#171325 <https://github.com/llvm/llvm-project/issues/171325>`__",""
-"`LWG4269 <https://wg21.link/LWG4269>`__","``unique_copy`` passes arguments to its predicate backwards","2025-11 (Kona)","","","`#171326 <https://github.com/llvm/llvm-project/issues/171326>`__",""
-"`LWG4272 <https://wg21.link/LWG4272>`__","For ``rank == 0``, ``layout_stride`` is atypically convertible","2025-11 (Kona)","","","`#171327 <https://github.com/llvm/llvm-project/issues/171327>`__",""
-"`LWG4274 <https://wg21.link/LWG4274>`__","The ``chrono::hh_mm_ss`` constructor is ill-formed for unsigned durations","2025-11 (Kona)","|Complete|","24","`#171328 <https://github.com/llvm/llvm-project/issues/171328>`__",""
-"`LWG4275 <https://wg21.link/LWG4275>`__","``std::dynamic_extent`` should also be defined in ``<mdspan>``","2025-11 (Kona)","|Complete|","21","`#171329 <https://github.com/llvm/llvm-project/issues/171329>`__",""
-"`LWG4276 <https://wg21.link/LWG4276>`__","``front()`` and ``back()`` are not hardened for zero-length ``std::array``\s","2025-11 (Kona)","|Complete|","17","`#171330 <https://github.com/llvm/llvm-project/issues/171330>`__",""
-"`LWG4280 <https://wg21.link/LWG4280>`__","``simd::partial_load`` uses undefined identifier ``T``","2025-11 (Kona)","","","`#171331 <https://github.com/llvm/llvm-project/issues/171331>`__",""
-"`LWG4286 <https://wg21.link/LWG4286>`__","Some more feature-test macros for fully freestanding features are not marked freestanding","2025-11 (Kona)","","","`#171332 <https://github.com/llvm/llvm-project/issues/171332>`__",""
-"`LWG4291 <https://wg21.link/LWG4291>`__","``explicit map(const Allocator&)`` should be ``constexpr``","2025-11 (Kona)","","","`#171333 <https://github.com/llvm/llvm-project/issues/171333>`__",""
-"`LWG4292 <https://wg21.link/LWG4292>`__","Unordered container local iterators should be constexpr iterators","2025-11 (Kona)","","","`#171334 <https://github.com/llvm/llvm-project/issues/171334>`__",""
-"`LWG4293 <https://wg21.link/LWG4293>`__","span::subspan/first/last chooses wrong constructor when T is const-qualified bool","2025-11 (Kona)","","","`#171335 <https://github.com/llvm/llvm-project/issues/171335>`__",""
-"`LWG4294 <https://wg21.link/LWG4294>`__","``bitset(const CharT*)`` constructor needs to be constrained","2025-11 (Kona)","","","`#171336 <https://github.com/llvm/llvm-project/issues/171336>`__",""
-"`LWG4297 <https://wg21.link/LWG4297>`__","Missing ``permutable`` constraint for iterator overloads in Parallel Range Algorithms","2025-11 (Kona)","","","`#171338 <https://github.com/llvm/llvm-project/issues/171338>`__",""
-"`LWG4299 <https://wg21.link/LWG4299>`__","Missing *Mandates:* part in ``optional<T&>::transform``","2025-11 (Kona)","","","`#171339 <https://github.com/llvm/llvm-project/issues/171339>`__",""
-"`LWG4300 <https://wg21.link/LWG4300>`__","Missing *Returns:* element in ``optional<T&>::emplace``","2025-11 (Kona)","|Complete|","22","`#171340 <https://github.com/llvm/llvm-project/issues/171340>`__",""
-"`LWG4301 <https://wg21.link/LWG4301>`__","``condition_variable{_any}::wait_{for, until}`` should take timeout by value","2025-11 (Kona)","","","`#171341 <https://github.com/llvm/llvm-project/issues/171341>`__",""
-"`LWG4302 <https://wg21.link/LWG4302>`__","Problematic ``vector_sum_of_squares`` wording","2025-11 (Kona)","","","`#171342 <https://github.com/llvm/llvm-project/issues/171342>`__",""
-"`LWG4304 <https://wg21.link/LWG4304>`__","``std::optional<NonReturnable&>`` is ill-formed due to ``value_or``","2025-11 (Kona)","","","`#171343 <https://github.com/llvm/llvm-project/issues/171343>`__",""
-"`LWG4305 <https://wg21.link/LWG4305>`__","Missing user requirements on ``type_order`` template","2025-11 (Kona)","|Complete|","24","`#171344 <https://github.com/llvm/llvm-project/issues/171344>`__",""
-"`LWG4308 <https://wg21.link/LWG4308>`__","``std::optional<T&>::iterator`` can't be a contiguous iterator for some ``T``","2025-11 (Kona)","|Complete|","22","`#171345 <https://github.com/llvm/llvm-project/issues/171345>`__",""
-"`LWG4312 <https://wg21.link/LWG4312>`__","Const and value category mismatch for ``allocator_arg_t``/``allocator_arg`` in the description of uses-allocator construction","2025-11 (Kona)","","","`#171346 <https://github.com/llvm/llvm-project/issues/171346>`__",""
-"`LWG4315 <https://wg21.link/LWG4315>`__","Insufficient specification of ``vector_two_norm`` and ``matrix_frob_norm``","2025-11 (Kona)","","","`#171347 <https://github.com/llvm/llvm-project/issues/171347>`__",""
-"`LWG4316 <https://wg21.link/LWG4316>`__","``{can_}substitute`` specification is ill-formed","2025-11 (Kona)","","","`#171348 <https://github.com/llvm/llvm-project/issues/171348>`__",""
-"`LWG4317 <https://wg21.link/LWG4317>`__","The meaning of ""resource"" in the *Cpp17Destructible* requirements is undefined","2025-11 (Kona)","","","`#171349 <https://github.com/llvm/llvm-project/issues/171349>`__",""
-"`LWG4318 <https://wg21.link/LWG4318>`__","Have ``hive::erase_if`` reevaluate ``end()`` to avoid UB","2025-11 (Kona)","","","`#171350 <https://github.com/llvm/llvm-project/issues/171350>`__",""
-"`LWG4328 <https://wg21.link/LWG4328>`__","Remove note in §[exec.sched] regarding waiting for completion of scheduled operations","2025-11 (Kona)","","","`#171351 <https://github.com/llvm/llvm-project/issues/171351>`__",""
-"`LWG4340 <https://wg21.link/LWG4340>`__","``task::promise_type::unhandled_stopped()`` should be ``noexcept``","2025-11 (Kona)","","","`#171352 <https://github.com/llvm/llvm-project/issues/171352>`__",""
-"`LWG4341 <https://wg21.link/LWG4341>`__","Missing rvalue reference qualification for ``task::connect()``","2025-11 (Kona)","","","`#171353 <https://github.com/llvm/llvm-project/issues/171353>`__",""
-"`LWG4342 <https://wg21.link/LWG4342>`__","Missing rvalue reference qualification for ``task_scheduler::ts-sender::connect()``","2025-11 (Kona)","","","`#171354 <https://github.com/llvm/llvm-project/issues/171354>`__",""
-"`LWG4343 <https://wg21.link/LWG4343>`__","Missing default template arguments for ``task``","2025-11 (Kona)","","","`#171355 <https://github.com/llvm/llvm-project/issues/171355>`__",""
-"`LWG4345 <https://wg21.link/LWG4345>`__","``task::promise_type::return_value`` default template parameter","2025-11 (Kona)","","","`#171356 <https://github.com/llvm/llvm-project/issues/171356>`__",""
-"`LWG4346 <https://wg21.link/LWG4346>`__","``task::promise_type::return_void``/``value lack`` a specification","2025-11 (Kona)","","","`#171357 <https://github.com/llvm/llvm-project/issues/171357>`__",""
-"`LWG4349 <https://wg21.link/LWG4349>`__","``task`` is not actually started lazily","2025-11 (Kona)","","","`#171358 <https://github.com/llvm/llvm-project/issues/171358>`__",""
-"`LWG4351 <https://wg21.link/LWG4351>`__","``integral-constant-like`` needs more ``remove_cvref_t``","2025-11 (Kona)","|Complete|","23","`#171359 <https://github.com/llvm/llvm-project/issues/171359>`__",""
-"`LWG4358 <https://wg21.link/LWG4358>`__","§[exec.as.awaitable] is using ""Preconditions:"" when it should probably be described in the constraint","2025-11 (Kona)","","","`#171360 <https://github.com/llvm/llvm-project/issues/171360>`__",""
-"`LWG4360 <https://wg21.link/LWG4360>`__","``awaitable-sender`` concept should qualify use of ``awaitable-receiver`` type","2025-11 (Kona)","","","`#171361 <https://github.com/llvm/llvm-project/issues/171361>`__",""
-"`LWG4366 <https://wg21.link/LWG4366>`__","Heterogeneous comparison of ``expected`` may be ill-formed","2025-11 (Kona)","|Complete|","23","`#171362 <https://github.com/llvm/llvm-project/issues/171362>`__",""
-"`LWG4369 <https://wg21.link/LWG4369>`__","``check-types`` function for ``upon_error`` and ``upon_stopped`` is wrong","2025-11 (Kona)","","","`#171363 <https://github.com/llvm/llvm-project/issues/171363>`__",""
-"`LWG4370 <https://wg21.link/LWG4370>`__","Comparison of ``optional<T>`` to ``T`` may be ill-formed","2025-11 (Kona)","|Complete|","22","`#171364 <https://github.com/llvm/llvm-project/issues/171364>`__",""
-"`LWG4372 <https://wg21.link/LWG4372>`__","Weaken *Mandates:* for dynamic padding values in padded layouts","2025-11 (Kona)","","","`#171365 <https://github.com/llvm/llvm-project/issues/171365>`__",""
-"`LWG4375 <https://wg21.link/LWG4375>`__","``std::simd::bit_ceil`` should not be ``noexcept``","2025-11 (Kona)","","","`#171366 <https://github.com/llvm/llvm-project/issues/171366>`__",""
-"`LWG4376 <https://wg21.link/LWG4376>`__","ABI tag in return type of [simd.mask.unary] is overconstrained","2025-11 (Kona)","","","`#171367 <https://github.com/llvm/llvm-project/issues/171367>`__",""
-"`LWG4377 <https://wg21.link/LWG4377>`__","Misleading note about lock-free property of ``std::atomic_ref``","2025-11 (Kona)","","","`#171368 <https://github.com/llvm/llvm-project/issues/171368>`__",""
-"`LWG4382 <https://wg21.link/LWG4382>`__","The ``simd::basic_mask(bool)`` overload needs to be more constrained","2025-11 (Kona)","","","`#171369 <https://github.com/llvm/llvm-project/issues/171369>`__",""
-"`LWG4383 <https://wg21.link/LWG4383>`__","``constant_wrapper``\'s pseudo-mutators are underconstrained","2025-11 (Kona)","|Complete|","23","`#171370 <https://github.com/llvm/llvm-project/issues/171370>`__",""
-"`LWG4384 <https://wg21.link/LWG4384>`__","``flat_set::erase(iterator)`` is underconstrained","2025-11 (Kona)","","","`#171371 <https://github.com/llvm/llvm-project/issues/171371>`__",""
-"`LWG4388 <https://wg21.link/LWG4388>`__","Align new definition of ``va_start`` with C23","2025-11 (Kona)","","","`#171372 <https://github.com/llvm/llvm-project/issues/171372>`__",""
-"`LWG4396 <https://wg21.link/LWG4396>`__","Improve ``inplace_vector(from_range_t, R&& rg)``","2025-11 (Kona)","","","`#171373 <https://github.com/llvm/llvm-project/issues/171373>`__",""
-"`LWG4398 <https://wg21.link/LWG4398>`__","``enable_nonlocking_formatter_optimization`` should be disabled for container adaptors","2025-11 (Kona)","","","`#171375 <https://github.com/llvm/llvm-project/issues/171375>`__",""
-"`LWG4399 <https://wg21.link/LWG4399>`__","``enable_nonlocking_formatter_optimization`` for ``pair`` and ``tuple`` needs ``remove_cvref_t``","2025-11 (Kona)","","","`#171376 <https://github.com/llvm/llvm-project/issues/171376>`__",""
-"`LWG4403 <https://wg21.link/LWG4403>`__","``simd::basic_vec`` CTAD misses difference type casting","2025-11 (Kona)","","","`#171377 <https://github.com/llvm/llvm-project/issues/171377>`__",""
-"`LWG4407 <https://wg21.link/LWG4407>`__","``constexpr-wrapper-like`` needs ``remove_cvref_t`` in ``simd::basic_vec`` constructor","2025-11 (Kona)","","","`#171378 <https://github.com/llvm/llvm-project/issues/171378>`__",""
-"`LWG4412 <https://wg21.link/LWG4412>`__","Fix declaration of ``zero_element`` and ``uninit_element``","2025-11 (Kona)","","","`#171379 <https://github.com/llvm/llvm-project/issues/171379>`__",""
-"`LWG4413 <https://wg21.link/LWG4413>`__","Unused/left-over ``simd::alignment`` specialization for ``basic_mask``","2025-11 (Kona)","","","`#171380 <https://github.com/llvm/llvm-project/issues/171380>`__",""
-"`LWG4415 <https://wg21.link/LWG4415>`__","``task::promise_type::uncaught_exception`` seems to be misnamed","2025-11 (Kona)","","","`#171381 <https://github.com/llvm/llvm-project/issues/171381>`__",""
-"`LWG4416 <https://wg21.link/LWG4416>`__","``<meta>`` should include ``<compare>``","2025-11 (Kona)","","","`#171382 <https://github.com/llvm/llvm-project/issues/171382>`__",""
-"`LWG4420 <https://wg21.link/LWG4420>`__","§[simd] conversions (constructor, load, stores, gather, and scatter) are incorrectly constrained for ``<stdfloat>`` types","2025-11 (Kona)","","","`#171383 <https://github.com/llvm/llvm-project/issues/171383>`__",""
-"`LWG4422 <https://wg21.link/LWG4422>`__","``meta::access_context`` should be a consteval-only type","2025-11 (Kona)","","","`#171384 <https://github.com/llvm/llvm-project/issues/171384>`__",""
-"`LWG4423 <https://wg21.link/LWG4423>`__","``meta::data_member_spec`` allows negative bit-field widths","2025-11 (Kona)","","","`#171385 <https://github.com/llvm/llvm-project/issues/171385>`__",""
-"`LWG4424 <https://wg21.link/LWG4424>`__","``meta::define_aggregate`` should require a class type","2025-11 (Kona)","","","`#171386 <https://github.com/llvm/llvm-project/issues/171386>`__",""
-"`LWG4425 <https://wg21.link/LWG4425>`__","CTAD ``function_ref`` of data member pointer should produce noexcept signature","2025-11 (Kona)","|Complete|","24","`#171387 <https://github.com/llvm/llvm-project/issues/171387>`__",""
-"`LWG4426 <https://wg21.link/LWG4426>`__","Clarify what ``meta::reflect_constant_string`` considers a string literal","2025-11 (Kona)","","","`#171388 <https://github.com/llvm/llvm-project/issues/171388>`__",""
-"`LWG4427 <https://wg21.link/LWG4427>`__","``meta::dealias`` needs to work with things that aren't entities","2025-11 (Kona)","","","`#171390 <https://github.com/llvm/llvm-project/issues/171390>`__",""
-"`LWG4428 <https://wg21.link/LWG4428>`__","Metafunctions should not be defined in terms of constant subexpressions","2025-11 (Kona)","","","`#171391 <https://github.com/llvm/llvm-project/issues/171391>`__",""
-"`LWG4429 <https://wg21.link/LWG4429>`__","``meta::alignment_of`` should exclude data member description of bit-field","2025-11 (Kona)","","","`#171393 <https://github.com/llvm/llvm-project/issues/171393>`__",""
-"`LWG4430 <https://wg21.link/LWG4430>`__","``from_chars`` should not parse ``0b""`` base prefixes""","2025-11 (Kona)","","","`#171394 <https://github.com/llvm/llvm-project/issues/171394>`__",""
-"`LWG4431 <https://wg21.link/LWG4431>`__","Parallel ``std::ranges::destroy`` should allow exceptions","2025-11 (Kona)","","","`#171396 <https://github.com/llvm/llvm-project/issues/171396>`__",""
-"`LWG4432 <https://wg21.link/LWG4432>`__","Clarify element initialization for ``meta::reflect_constant_array``","2025-11 (Kona)","","","`#171397 <https://github.com/llvm/llvm-project/issues/171397>`__",""
-"`LWG4433 <https://wg21.link/LWG4433>`__","Incorrect query for C language linkage","2025-11 (Kona)","","","`#171398 <https://github.com/llvm/llvm-project/issues/171398>`__",""
-"`LWG4434 <https://wg21.link/LWG4434>`__","``meta::is_accessible`` does not need to consider incomplete *D*","2025-11 (Kona)","","","`#171399 <https://github.com/llvm/llvm-project/issues/171399>`__",""
-"`LWG4435 <https://wg21.link/LWG4435>`__","``meta::has_identifier`` doesn't handle all types","2025-11 (Kona)","","","`#171400 <https://github.com/llvm/llvm-project/issues/171400>`__",""
-"`LWG4438 <https://wg21.link/LWG4438>`__","Bad expression in [exec.when.all]","2025-11 (Kona)","","","`#171401 <https://github.com/llvm/llvm-project/issues/171401>`__",""
-"`LWG4439 <https://wg21.link/LWG4439>`__","``std::optional<T&>::swap`` possibly selects ADL-found ``swap``","2025-11 (Kona)","|Complete|","22","`#171402 <https://github.com/llvm/llvm-project/issues/171402>`__",""
-"`LWG4440 <https://wg21.link/LWG4440>`__","Forward declarations of entities need also in entries","2025-11 (Kona)","","","`#171403 <https://github.com/llvm/llvm-project/issues/171403>`__",""
-"`LWG4441 <https://wg21.link/LWG4441>`__","``ranges::rotate`` do not handle sized-but-not-sized-sentinel ranges correctly","2025-11 (Kona)","","","`#171404 <https://github.com/llvm/llvm-project/issues/171404>`__",""
-"`LWG4442 <https://wg21.link/LWG4442>`__","Clarify ``expr`` and ``fn`` for ``meta::reflect_object`` and ``meta::reflect_function``","2025-11 (Kona)","","","`#171405 <https://github.com/llvm/llvm-project/issues/171405>`__",""
-"`LWG4443 <https://wg21.link/LWG4443>`__","Clean up identifier comparisons in ``meta::define_aggregate``","2025-11 (Kona)","","","`#171406 <https://github.com/llvm/llvm-project/issues/171406>`__",""
-"`LWG4444 <https://wg21.link/LWG4444>`__","Fix default template arguments for ``ranges::replace`` and ``ranges::replace_if``","2025-11 (Kona)","","","`#171407 <https://github.com/llvm/llvm-project/issues/171407>`__",""
-"`LWG4445 <https://wg21.link/LWG4445>`__","``sch_`` must not be in moved-from state","2025-11 (Kona)","","","`#171408 <https://github.com/llvm/llvm-project/issues/171408>`__",""
-"`LWG4446 <https://wg21.link/LWG4446>`__","Bad phrasing for ``SCHED(s)``","2025-11 (Kona)","","","`#171409 <https://github.com/llvm/llvm-project/issues/171409>`__",""
-"`LWG4447 <https://wg21.link/LWG4447>`__","Remove unnecessary ``sizeof...(Env) > 1`` condition","2025-11 (Kona)","","","`#171410 <https://github.com/llvm/llvm-project/issues/171410>`__",""
-"`LWG4448 <https://wg21.link/LWG4448>`__","Do not forward ``fn`` in ``completion_signatures``","2025-11 (Kona)","","","`#171411 <https://github.com/llvm/llvm-project/issues/171411>`__",""
-"`LWG4449 <https://wg21.link/LWG4449>`__","``define_aggregate`` members must be public","2025-11 (Kona)","","","`#171412 <https://github.com/llvm/llvm-project/issues/171412>`__",""
-"`LWG4450 <https://wg21.link/LWG4450>`__","``std::atomic_ref<T>::store_key`` should be disabled for const ``T``","2025-11 (Kona)","","","`#171414 <https://github.com/llvm/llvm-project/issues/171414>`__",""
-"`LWG4451 <https://wg21.link/LWG4451>`__","``make_shared`` should not refer to a type ``U[N]`` for runtime N","2025-11 (Kona)","","","`#171415 <https://github.com/llvm/llvm-project/issues/171415>`__",""
-"`LWG4452 <https://wg21.link/LWG4452>`__","Make *deref-move* constexpr","2025-11 (Kona)","|Complete|","23","`#171416 <https://github.com/llvm/llvm-project/issues/171416>`__",""
-"`LWG4455 <https://wg21.link/LWG4455>`__","Add missing constraint to ``basic-sender::get_completion_signatures`` definition","2025-11 (Kona)","","","`#171417 <https://github.com/llvm/llvm-project/issues/171417>`__",""
-"`LWG4456 <https://wg21.link/LWG4456>`__","Decay ``Data`` and ``Child`` in ``make-sender``","2025-11 (Kona)","","","`#171418 <https://github.com/llvm/llvm-project/issues/171418>`__",""
-"`LWG4459 <https://wg21.link/LWG4459>`__","Protect ``get_completion_signatures`` fold expression from overloaded commas","2025-11 (Kona)","","","`#171419 <https://github.com/llvm/llvm-project/issues/171419>`__",""
-"`LWG4461 <https://wg21.link/LWG4461>`__","``stop-when`` needs to evaluate unstoppable tokens","2025-11 (Kona)","","","`#171420 <https://github.com/llvm/llvm-project/issues/171420>`__",""
-"`LWG4462 <https://wg21.link/LWG4462>`__","Algorithm requirements don't describe semantics of ``s - i`` well","2025-11 (Kona)","","","`#171421 <https://github.com/llvm/llvm-project/issues/171421>`__",""
-"`LWG4463 <https://wg21.link/LWG4463>`__","Change wording to 'model' from 'subsumes' in [algorithms.parallel.user]","2025-11 (Kona)","","","`#171422 <https://github.com/llvm/llvm-project/issues/171422>`__",""
-"`LWG4464 <https://wg21.link/LWG4464>`__","§[alg.merge] Wording tweaks","2025-11 (Kona)","","","`#171423 <https://github.com/llvm/llvm-project/issues/171423>`__",""
-"`LWG4465 <https://wg21.link/LWG4465>`__","§[alg.partitions] Clarify *Returns:* element","2025-11 (Kona)","","","`#171424 <https://github.com/llvm/llvm-project/issues/171424>`__",""
+"[LWG2991](https://wg21.link/LWG2991)","`variant copy` constructor missing `noexcept(see below)`","2025-11 (Kona)","","","[#171301](https://github.com/llvm/llvm-project/issues/171301)",""
+"[LWG3090](https://wg21.link/LWG3090)","What is §[time.duration.cons]p4's ""no overflow is induced in the conversion"" intended to mean?","2025-11 (Kona)","","","[#171302](https://github.com/llvm/llvm-project/issues/171302)",""
+"[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","2025-11 (Kona)","{{Complete}}","16","[#105356](https://github.com/llvm/llvm-project/issues/105356)",""
+"[LWG3454](https://wg21.link/LWG3454)","`pointer_traits::pointer_to` should be `constexpr`","2025-11 (Kona)","{{Complete}}","16","[#171307](https://github.com/llvm/llvm-project/issues/171307)",""
+"[LWG3627](https://wg21.link/LWG3627)","Inconsistent specifications for `std::make_optional` overloads","2025-11 (Kona)","{{Complete}}","22","[#171309](https://github.com/llvm/llvm-project/issues/171309)",""
+"[LWG4015](https://wg21.link/LWG4015)","LWG 3973 broke const overloads of `std::optional` monadic operations","2025-11 (Kona)","","","[#171310](https://github.com/llvm/llvm-project/issues/171310)",""
+"[LWG4020](https://wg21.link/LWG4020)","`extents::index-cast` weirdness","2025-11 (Kona)","{{Complete}}","23","[#171311](https://github.com/llvm/llvm-project/issues/171311)",""
+"[LWG4136](https://wg21.link/LWG4136)","Specify behavior of [linalg] Hermitian algorithms on diagonal with nonzero imaginary part","2025-11 (Kona)","","","[#171312](https://github.com/llvm/llvm-project/issues/171312)",""
+"[LWG4137](https://wg21.link/LWG4137)","Fix *Mandates*, *Preconditions*, and *Complexity* elements of [linalg] algorithms","2025-11 (Kona)","","","[#171313](https://github.com/llvm/llvm-project/issues/171313)",""
+"[LWG4166](https://wg21.link/LWG4166)","`concat_view::end()` should be more constrained in order to support noncopyable iterators","2025-11 (Kona)","{{Complete}}","23","[#171314](https://github.com/llvm/llvm-project/issues/171314)",""
+"[LWG4230](https://wg21.link/LWG4230)","`simd<complex>::real/imag` is overconstrained","2025-11 (Kona)","","","[#171316](https://github.com/llvm/llvm-project/issues/171316)",""
+"[LWG4243](https://wg21.link/LWG4243)","`as_bytes`/`as_writable_bytes` is broken with `span<volatile T>`","2025-11 (Kona)","{{Complete}}","23","[#171317](https://github.com/llvm/llvm-project/issues/171317)",""
+"[LWG4251](https://wg21.link/LWG4251)","Move assignment for `indirect` unnecessarily requires copy construction","2025-11 (Kona)","","","[#171318](https://github.com/llvm/llvm-project/issues/171318)",""
+"[LWG4253](https://wg21.link/LWG4253)","`basic_const_iterator` should provide `iterator_type`","2025-11 (Kona)","","","[#171319](https://github.com/llvm/llvm-project/issues/171319)",""
+"[LWG4255](https://wg21.link/LWG4255)","`move_only_function` constructor should recognize empty `copyable_function`\s","2025-11 (Kona)","","","[#171320](https://github.com/llvm/llvm-project/issues/171320)",""
+"[LWG4256](https://wg21.link/LWG4256)","Incorrect constrains for `function_ref` constructors from `nontype_t`","2025-11 (Kona)","{{Complete}}","24","[#171321](https://github.com/llvm/llvm-project/issues/171321)",""
+"[LWG4257](https://wg21.link/LWG4257)","Stream insertion for `chrono::local_time` should be constrained","2025-11 (Kona)","","","[#171322](https://github.com/llvm/llvm-project/issues/171322)",""
+"[LWG4260](https://wg21.link/LWG4260)","Query objects must be default constructible","2025-11 (Kona)","","","[#171323](https://github.com/llvm/llvm-project/issues/171323)",""
+"[LWG4265](https://wg21.link/LWG4265)","`std::midpoint` should not accept `const bool`","2025-11 (Kona)","{{Complete}}","22","[#171324](https://github.com/llvm/llvm-project/issues/171324)",""
+"[LWG4266](https://wg21.link/LWG4266)","`layout_stride::mapping` should treat empty mappings as exhaustive","2025-11 (Kona)","{{Complete}}","23","[#171325](https://github.com/llvm/llvm-project/issues/171325)",""
+"[LWG4269](https://wg21.link/LWG4269)","`unique_copy` passes arguments to its predicate backwards","2025-11 (Kona)","","","[#171326](https://github.com/llvm/llvm-project/issues/171326)",""
+"[LWG4272](https://wg21.link/LWG4272)","For `rank == 0`, `layout_stride` is atypically convertible","2025-11 (Kona)","","","[#171327](https://github.com/llvm/llvm-project/issues/171327)",""
+"[LWG4274](https://wg21.link/LWG4274)","The `chrono::hh_mm_ss` constructor is ill-formed for unsigned durations","2025-11 (Kona)","{{Complete}}","24","[#171328](https://github.com/llvm/llvm-project/issues/171328)",""
+"[LWG4275](https://wg21.link/LWG4275)","`std::dynamic_extent` should also be defined in `<mdspan>`","2025-11 (Kona)","{{Complete}}","21","[#171329](https://github.com/llvm/llvm-project/issues/171329)",""
+"[LWG4276](https://wg21.link/LWG4276)","`front()` and `back()` are not hardened for zero-length `std::array`\s","2025-11 (Kona)","{{Complete}}","17","[#171330](https://github.com/llvm/llvm-project/issues/171330)",""
+"[LWG4280](https://wg21.link/LWG4280)","`simd::partial_load` uses undefined identifier `T`","2025-11 (Kona)","","","[#171331](https://github.com/llvm/llvm-project/issues/171331)",""
+"[LWG4286](https://wg21.link/LWG4286)","Some more feature-test macros for fully freestanding features are not marked freestanding","2025-11 (Kona)","","","[#171332](https://github.com/llvm/llvm-project/issues/171332)",""
+"[LWG4291](https://wg21.link/LWG4291)","`explicit map(const Allocator&)` should be `constexpr`","2025-11 (Kona)","","","[#171333](https://github.com/llvm/llvm-project/issues/171333)",""
+"[LWG4292](https://wg21.link/LWG4292)","Unordered container local iterators should be constexpr iterators","2025-11 (Kona)","","","[#171334](https://github.com/llvm/llvm-project/issues/171334)",""
+"[LWG4293](https://wg21.link/LWG4293)","span::subspan/first/last chooses wrong constructor when T is const-qualified bool","2025-11 (Kona)","","","[#171335](https://github.com/llvm/llvm-project/issues/171335)",""
+"[LWG4294](https://wg21.link/LWG4294)","`bitset(const CharT*)` constructor needs to be constrained","2025-11 (Kona)","","","[#171336](https://github.com/llvm/llvm-project/issues/171336)",""
+"[LWG4297](https://wg21.link/LWG4297)","Missing `permutable` constraint for iterator overloads in Parallel Range Algorithms","2025-11 (Kona)","","","[#171338](https://github.com/llvm/llvm-project/issues/171338)",""
+"[LWG4299](https://wg21.link/LWG4299)","Missing *Mandates:* part in `optional<T&>::transform`","2025-11 (Kona)","","","[#171339](https://github.com/llvm/llvm-project/issues/171339)",""
+"[LWG4300](https://wg21.link/LWG4300)","Missing *Returns:* element in `optional<T&>::emplace`","2025-11 (Kona)","{{Complete}}","22","[#171340](https://github.com/llvm/llvm-project/issues/171340)",""
+"[LWG4301](https://wg21.link/LWG4301)","`condition_variable{_any}::wait_{for, until}` should take timeout by value","2025-11 (Kona)","","","[#171341](https://github.com/llvm/llvm-project/issues/171341)",""
+"[LWG4302](https://wg21.link/LWG4302)","Problematic `vector_sum_of_squares` wording","2025-11 (Kona)","","","[#171342](https://github.com/llvm/llvm-project/issues/171342)",""
+"[LWG4304](https://wg21.link/LWG4304)","`std::optional<NonReturnable&>` is ill-formed due to `value_or`","2025-11 (Kona)","","","[#171343](https://github.com/llvm/llvm-project/issues/171343)",""
+"[LWG4305](https://wg21.link/LWG4305)","Missing user requirements on `type_order` template","2025-11 (Kona)","{{Complete}}","24","[#171344](https://github.com/llvm/llvm-project/issues/171344)",""
+"[LWG4308](https://wg21.link/LWG4308)","`std::optional<T&>::iterator` can't be a contiguous iterator for some `T`","2025-11 (Kona)","{{Complete}}","22","[#171345](https://github.com/llvm/llvm-project/issues/171345)",""
+"[LWG4312](https://wg21.link/LWG4312)","Const and value category mismatch for `allocator_arg_t`/`allocator_arg` in the description of uses-allocator construction","2025-11 (Kona)","","","[#171346](https://github.com/llvm/llvm-project/issues/171346)",""
+"[LWG4315](https://wg21.link/LWG4315)","Insufficient specification of `vector_two_norm` and `matrix_frob_norm`","2025-11 (Kona)","","","[#171347](https://github.com/llvm/llvm-project/issues/171347)",""
+"[LWG4316](https://wg21.link/LWG4316)","`{can_}substitute` specification is ill-formed","2025-11 (Kona)","","","[#171348](https://github.com/llvm/llvm-project/issues/171348)",""
+"[LWG4317](https://wg21.link/LWG4317)","The meaning of ""resource"" in the *Cpp17Destructible* requirements is undefined","2025-11 (Kona)","","","[#171349](https://github.com/llvm/llvm-project/issues/171349)",""
+"[LWG4318](https://wg21.link/LWG4318)","Have `hive::erase_if` reevaluate `end()` to avoid UB","2025-11 (Kona)","","","[#171350](https://github.com/llvm/llvm-project/issues/171350)",""
+"[LWG4328](https://wg21.link/LWG4328)","Remove note in §[exec.sched] regarding waiting for completion of scheduled operations","2025-11 (Kona)","","","[#171351](https://github.com/llvm/llvm-project/issues/171351)",""
+"[LWG4340](https://wg21.link/LWG4340)","`task::promise_type::unhandled_stopped()` should be `noexcept`","2025-11 (Kona)","","","[#171352](https://github.com/llvm/llvm-project/issues/171352)",""
+"[LWG4341](https://wg21.link/LWG4341)","Missing rvalue reference qualification for `task::connect()`","2025-11 (Kona)","","","[#171353](https://github.com/llvm/llvm-project/issues/171353)",""
+"[LWG4342](https://wg21.link/LWG4342)","Missing rvalue reference qualification for `task_scheduler::ts-sender::connect()`","2025-11 (Kona)","","","[#171354](https://github.com/llvm/llvm-project/issues/171354)",""
+"[LWG4343](https://wg21.link/LWG4343)","Missing default template arguments for `task`","2025-11 (Kona)","","","[#171355](https://github.com/llvm/llvm-project/issues/171355)",""
+"[LWG4345](https://wg21.link/LWG4345)","`task::promise_type::return_value` default template parameter","2025-11 (Kona)","","","[#171356](https://github.com/llvm/llvm-project/issues/171356)",""
+"[LWG4346](https://wg21.link/LWG4346)","`task::promise_type::return_void`/`value lack` a specification","2025-11 (Kona)","","","[#171357](https://github.com/llvm/llvm-project/issues/171357)",""
+"[LWG4349](https://wg21.link/LWG4349)","`task` is not actually started lazily","2025-11 (Kona)","","","[#171358](https://github.com/llvm/llvm-project/issues/171358)",""
+"[LWG4351](https://wg21.link/LWG4351)","`integral-constant-like` needs more `remove_cvref_t`","2025-11 (Kona)","{{Complete}}","23","[#171359](https://github.com/llvm/llvm-project/issues/171359)",""
+"[LWG4358](https://wg21.link/LWG4358)","§[exec.as.awaitable] is using ""Preconditions:"" when it should probably be described in the constraint","2025-11 (Kona)","","","[#171360](https://github.com/llvm/llvm-project/issues/171360)",""
+"[LWG4360](https://wg21.link/LWG4360)","`awaitable-sender` concept should qualify use of `awaitable-receiver` type","2025-11 (Kona)","","","[#171361](https://github.com/llvm/llvm-project/issues/171361)",""
+"[LWG4366](https://wg21.link/LWG4366)","Heterogeneous comparison of `expected` may be ill-formed","2025-11 (Kona)","{{Complete}}","23","[#171362](https://github.com/llvm/llvm-project/issues/171362)",""
+"[LWG4369](https://wg21.link/LWG4369)","`check-types` function for `upon_error` and `upon_stopped` is wrong","2025-11 (Kona)","","","[#171363](https://github.com/llvm/llvm-project/issues/171363)",""
+"[LWG4370](https://wg21.link/LWG4370)","Comparison of `optional<T>` to `T` may be ill-formed","2025-11 (Kona)","{{Complete}}","22","[#171364](https://github.com/llvm/llvm-project/issues/171364)",""
+"[LWG4372](https://wg21.link/LWG4372)","Weaken *Mandates:* for dynamic padding values in padded layouts","2025-11 (Kona)","","","[#171365](https://github.com/llvm/llvm-project/issues/171365)",""
+"[LWG4375](https://wg21.link/LWG4375)","`std::simd::bit_ceil` should not be `noexcept`","2025-11 (Kona)","","","[#171366](https://github.com/llvm/llvm-project/issues/171366)",""
+"[LWG4376](https://wg21.link/LWG4376)","ABI tag in return type of [simd.mask.unary] is overconstrained","2025-11 (Kona)","","","[#171367](https://github.com/llvm/llvm-project/issues/171367)",""
+"[LWG4377](https://wg21.link/LWG4377)","Misleading note about lock-free property of `std::atomic_ref`","2025-11 (Kona)","","","[#171368](https://github.com/llvm/llvm-project/issues/171368)",""
+"[LWG4382](https://wg21.link/LWG4382)","The `simd::basic_mask(bool)` overload needs to be more constrained","2025-11 (Kona)","","","[#171369](https://github.com/llvm/llvm-project/issues/171369)",""
+"[LWG4383](https://wg21.link/LWG4383)","`constant_wrapper`\'s pseudo-mutators are underconstrained","2025-11 (Kona)","{{Complete}}","23","[#171370](https://github.com/llvm/llvm-project/issues/171370)",""
+"[LWG4384](https://wg21.link/LWG4384)","`flat_set::erase(iterator)` is underconstrained","2025-11 (Kona)","","","[#171371](https://github.com/llvm/llvm-project/issues/171371)",""
+"[LWG4388](https://wg21.link/LWG4388)","Align new definition of `va_start` with C23","2025-11 (Kona)","","","[#171372](https://github.com/llvm/llvm-project/issues/171372)",""
+"[LWG4396](https://wg21.link/LWG4396)","Improve `inplace_vector(from_range_t, R&& rg)`","2025-11 (Kona)","","","[#171373](https://github.com/llvm/llvm-project/issues/171373)",""
+"[LWG4398](https://wg21.link/LWG4398)","`enable_nonlocking_formatter_optimization` should be disabled for container adaptors","2025-11 (Kona)","","","[#171375](https://github.com/llvm/llvm-project/issues/171375)",""
+"[LWG4399](https://wg21.link/LWG4399)","`enable_nonlocking_formatter_optimization` for `pair` and `tuple` needs `remove_cvref_t`","2025-11 (Kona)","","","[#171376](https://github.com/llvm/llvm-project/issues/171376)",""
+"[LWG4403](https://wg21.link/LWG4403)","`simd::basic_vec` CTAD misses difference type casting","2025-11 (Kona)","","","[#171377](https://github.com/llvm/llvm-project/issues/171377)",""
+"[LWG4407](https://wg21.link/LWG4407)","`constexpr-wrapper-like` needs `remove_cvref_t` in `simd::basic_vec` constructor","2025-11 (Kona)","","","[#171378](https://github.com/llvm/llvm-project/issues/171378)",""
+"[LWG4412](https://wg21.link/LWG4412)","Fix declaration of `zero_element` and `uninit_element`","2025-11 (Kona)","","","[#171379](https://github.com/llvm/llvm-project/issues/171379)",""
+"[LWG4413](https://wg21.link/LWG4413)","Unused/left-over `simd::alignment` specialization for `basic_mask`","2025-11 (Kona)","","","[#171380](https://github.com/llvm/llvm-project/issues/171380)",""
+"[LWG4415](https://wg21.link/LWG4415)","`task::promise_type::uncaught_exception` seems to be misnamed","2025-11 (Kona)","","","[#171381](https://github.com/llvm/llvm-project/issues/171381)",""
+"[LWG4416](https://wg21.link/LWG4416)","`<meta>` should include `<compare>`","2025-11 (Kona)","","","[#171382](https://github.com/llvm/llvm-project/issues/171382)",""
+"[LWG4420](https://wg21.link/LWG4420)","§[simd] conversions (constructor, load, stores, gather, and scatter) are incorrectly constrained for `<stdfloat>` types","2025-11 (Kona)","","","[#171383](https://github.com/llvm/llvm-project/issues/171383)",""
+"[LWG4422](https://wg21.link/LWG4422)","`meta::access_context` should be a consteval-only type","2025-11 (Kona)","","","[#171384](https://github.com/llvm/llvm-project/issues/171384)",""
+"[LWG4423](https://wg21.link/LWG4423)","`meta::data_member_spec` allows negative bit-field widths","2025-11 (Kona)","","","[#171385](https://github.com/llvm/llvm-project/issues/171385)",""
+"[LWG4424](https://wg21.link/LWG4424)","`meta::define_aggregate` should require a class type","2025-11 (Kona)","","","[#171386](https://github.com/llvm/llvm-project/issues/171386)",""
+"[LWG4425](https://wg21.link/LWG4425)","CTAD `function_ref` of data member pointer should produce noexcept signature","2025-11 (Kona)","{{Complete}}","24","[#171387](https://github.com/llvm/llvm-project/issues/171387)",""
+"[LWG4426](https://wg21.link/LWG4426)","Clarify what `meta::reflect_constant_string` considers a string literal","2025-11 (Kona)","","","[#171388](https://github.com/llvm/llvm-project/issues/171388)",""
+"[LWG4427](https://wg21.link/LWG4427)","`meta::dealias` needs to work with things that aren't entities","2025-11 (Kona)","","","[#171390](https://github.com/llvm/llvm-project/issues/171390)",""
+"[LWG4428](https://wg21.link/LWG4428)","Metafunctions should not be defined in terms of constant subexpressions","2025-11 (Kona)","","","[#171391](https://github.com/llvm/llvm-project/issues/171391)",""
+"[LWG4429](https://wg21.link/LWG4429)","`meta::alignment_of` should exclude data member description of bit-field","2025-11 (Kona)","","","[#171393](https://github.com/llvm/llvm-project/issues/171393)",""
+"[LWG4430](https://wg21.link/LWG4430)","`from_chars` should not parse `0b""` base prefixes""","2025-11 (Kona)","","","[#171394](https://github.com/llvm/llvm-project/issues/171394)",""
+"[LWG4431](https://wg21.link/LWG4431)","Parallel `std::ranges::destroy` should allow exceptions","2025-11 (Kona)","","","[#171396](https://github.com/llvm/llvm-project/issues/171396)",""
+"[LWG4432](https://wg21.link/LWG4432)","Clarify element initialization for `meta::reflect_constant_array`","2025-11 (Kona)","","","[#171397](https://github.com/llvm/llvm-project/issues/171397)",""
+"[LWG4433](https://wg21.link/LWG4433)","Incorrect query for C language linkage","2025-11 (Kona)","","","[#171398](https://github.com/llvm/llvm-project/issues/171398)",""
+"[LWG4434](https://wg21.link/LWG4434)","`meta::is_accessible` does not need to consider incomplete *D*","2025-11 (Kona)","","","[#171399](https://github.com/llvm/llvm-project/issues/171399)",""
+"[LWG4435](https://wg21.link/LWG4435)","`meta::has_identifier` doesn't handle all types","2025-11 (Kona)","","","[#171400](https://github.com/llvm/llvm-project/issues/171400)",""
+"[LWG4438](https://wg21.link/LWG4438)","Bad expression in [exec.when.all]","2025-11 (Kona)","","","[#171401](https://github.com/llvm/llvm-project/issues/171401)",""
+"[LWG4439](https://wg21.link/LWG4439)","`std::optional<T&>::swap` possibly selects ADL-found `swap`","2025-11 (Kona)","{{Complete}}","22","[#171402](https://github.com/llvm/llvm-project/issues/171402)",""
+"[LWG4440](https://wg21.link/LWG4440)","Forward declarations of entities need also in entries","2025-11 (Kona)","","","[#171403](https://github.com/llvm/llvm-project/issues/171403)",""
+"[LWG4441](https://wg21.link/LWG4441)","`ranges::rotate` do not handle sized-but-not-sized-sentinel ranges correctly","2025-11 (Kona)","","","[#171404](https://github.com/llvm/llvm-project/issues/171404)",""
+"[LWG4442](https://wg21.link/LWG4442)","Clarify `expr` and `fn` for `meta::reflect_object` and `meta::reflect_function`","2025-11 (Kona)","","","[#171405](https://github.com/llvm/llvm-project/issues/171405)",""
+"[LWG4443](https://wg21.link/LWG4443)","Clean up identifier comparisons in `meta::define_aggregate`","2025-11 (Kona)","","","[#171406](https://github.com/llvm/llvm-project/issues/171406)",""
+"[LWG4444](https://wg21.link/LWG4444)","Fix default template arguments for `ranges::replace` and `ranges::replace_if`","2025-11 (Kona)","","","[#171407](https://github.com/llvm/llvm-project/issues/171407)",""
+"[LWG4445](https://wg21.link/LWG4445)","`sch_` must not be in moved-from state","2025-11 (Kona)","","","[#171408](https://github.com/llvm/llvm-project/issues/171408)",""
+"[LWG4446](https://wg21.link/LWG4446)","Bad phrasing for `SCHED(s)`","2025-11 (Kona)","","","[#171409](https://github.com/llvm/llvm-project/issues/171409)",""
+"[LWG4447](https://wg21.link/LWG4447)","Remove unnecessary `sizeof...(Env) > 1` condition","2025-11 (Kona)","","","[#171410](https://github.com/llvm/llvm-project/issues/171410)",""
+"[LWG4448](https://wg21.link/LWG4448)","Do not forward `fn` in `completion_signatures`","2025-11 (Kona)","","","[#171411](https://github.com/llvm/llvm-project/issues/171411)",""
+"[LWG4449](https://wg21.link/LWG4449)","`define_aggregate` members must be public","2025-11 (Kona)","","","[#171412](https://github.com/llvm/llvm-project/issues/171412)",""
+"[LWG4450](https://wg21.link/LWG4450)","`std::atomic_ref<T>::store_key` should be disabled for const `T`","2025-11 (Kona)","","","[#171414](https://github.com/llvm/llvm-project/issues/171414)",""
+"[LWG4451](https://wg21.link/LWG4451)","`make_shared` should not refer to a type `U[N]` for runtime N","2025-11 (Kona)","","","[#171415](https://github.com/llvm/llvm-project/issues/171415)",""
+"[LWG4452](https://wg21.link/LWG4452)","Make *deref-move* constexpr","2025-11 (Kona)","{{Complete}}","23","[#171416](https://github.com/llvm/llvm-project/issues/171416)",""
+"[LWG4455](https://wg21.link/LWG4455)","Add missing constraint to `basic-sender::get_completion_signatures` definition","2025-11 (Kona)","","","[#171417](https://github.com/llvm/llvm-project/issues/171417)",""
+"[LWG4456](https://wg21.link/LWG4456)","Decay `Data` and `Child` in `make-sender`","2025-11 (Kona)","","","[#171418](https://github.com/llvm/llvm-project/issues/171418)",""
+"[LWG4459](https://wg21.link/LWG4459)","Protect `get_completion_signatures` fold expression from overloaded commas","2025-11 (Kona)","","","[#171419](https://github.com/llvm/llvm-project/issues/171419)",""
+"[LWG4461](https://wg21.link/LWG4461)","`stop-when` needs to evaluate unstoppable tokens","2025-11 (Kona)","","","[#171420](https://github.com/llvm/llvm-project/issues/171420)",""
+"[LWG4462](https://wg21.link/LWG4462)","Algorithm requirements don't describe semantics of `s - i` well","2025-11 (Kona)","","","[#171421](https://github.com/llvm/llvm-project/issues/171421)",""
+"[LWG4463](https://wg21.link/LWG4463)","Change wording to 'model' from 'subsumes' in [algorithms.parallel.user]","2025-11 (Kona)","","","[#171422](https://github.com/llvm/llvm-project/issues/171422)",""
+"[LWG4464](https://wg21.link/LWG4464)","§[alg.merge] Wording tweaks","2025-11 (Kona)","","","[#171423](https://github.com/llvm/llvm-project/issues/171423)",""
+"[LWG4465](https://wg21.link/LWG4465)","§[alg.partitions] Clarify *Returns:* element","2025-11 (Kona)","","","[#171424](https://github.com/llvm/llvm-project/issues/171424)",""
"","","","","","",""
-"`LWG2414 <https://wg21.link/LWG2414>`__","Member function reentrancy should be implementation-defined","2026-03 (Croydon)","","","`#189805 <https://github.com/llvm/llvm-project/issues/189805>`__",""
-"`LWG2746 <https://wg21.link/LWG2746>`__","Inconsistency between requirements for ``emplace`` between ``optional`` and ``variant``","2026-03 (Croydon)","","","`#189806 <https://github.com/llvm/llvm-project/issues/189806>`__",""
-"`LWG3504 <https://wg21.link/LWG3504>`__","``condition_variable::wait_for`` is overspecified","2026-03 (Croydon)","","","`#189807 <https://github.com/llvm/llvm-project/issues/189807>`__",""
-"`LWG3599 <https://wg21.link/LWG3599>`__","The ``const`` overload of ``lazy_split_view::begin`` should be constrained by ``const Pattern``","2026-03 (Croydon)","","","`#189808 <https://github.com/llvm/llvm-project/issues/189808>`__",""
-"`LWG3662 <https://wg21.link/LWG3662>`__","``basic_string::append/assign(NTBS, pos, n)`` suboptimal","2026-03 (Croydon)","|Complete|","23","`#189809 <https://github.com/llvm/llvm-project/issues/189809>`__",""
-"`LWG3777 <https://wg21.link/LWG3777>`__","Common ``cartesian_product_view`` produces an invalid range if the first range is input and one of the ranges is empty","2026-03 (Croydon)","","","`#189810 <https://github.com/llvm/llvm-project/issues/189810>`__",""
-"`LWG3797 <https://wg21.link/LWG3797>`__","``elements_view`` insufficiently constrained","2026-03 (Croydon)","","","`#189811 <https://github.com/llvm/llvm-project/issues/189811>`__",""
-"`LWG3831 <https://wg21.link/LWG3831>`__","Two-digit formatting of negative ``year`` is ambiguous","2026-03 (Croydon)","","","`#189812 <https://github.com/llvm/llvm-project/issues/189812>`__",""
-"`LWG3891 <https://wg21.link/LWG3891>`__","LWG3870 breaks ``std::expected<cv T, E>``","2026-03 (Croydon)","","","`#189813 <https://github.com/llvm/llvm-project/issues/189813>`__",""
-"`LWG4026 <https://wg21.link/LWG4026>`__","Assignment operators of ``std::expected`` should propagate triviality","2026-03 (Croydon)","","","`#189814 <https://github.com/llvm/llvm-project/issues/189814>`__",""
-"`LWG4090 <https://wg21.link/LWG4090>`__","Underspecified use of locale facets for locale-dependent ``std::format``","2026-03 (Croydon)","","","`#189815 <https://github.com/llvm/llvm-project/issues/189815>`__",""
-"`LWG4122 <https://wg21.link/LWG4122>`__","Ill-formed ``operator<=>`` can cause hard error when instantiating ``std::inplace_vector``","2026-03 (Croydon)","","","`#189816 <https://github.com/llvm/llvm-project/issues/189816>`__",""
-"`LWG4130 <https://wg21.link/LWG4130>`__","Preconditions for ``std::launder`` might be overly strict","2026-03 (Croydon)","","","`#189817 <https://github.com/llvm/llvm-project/issues/189817>`__",""
-"`LWG4133 <https://wg21.link/LWG4133>`__","``awaitable-receiver``'s members are potentially throwing","2026-03 (Croydon)","","","`#189818 <https://github.com/llvm/llvm-project/issues/189818>`__",""
-"`LWG4143 <https://wg21.link/LWG4143>`__","``execution::set_value/set_error/set_stopped/start`` should always return void","2026-03 (Croydon)","","","`#189819 <https://github.com/llvm/llvm-project/issues/189819>`__",""
-"`LWG4151 <https://wg21.link/LWG4151>`__","Precondition of ``inplace_vector::swap``","2026-03 (Croydon)","","","`#189820 <https://github.com/llvm/llvm-project/issues/189820>`__",""
-"`LWG4223 <https://wg21.link/LWG4223>`__","Deduction guides for maps are mishandling tuples and references","2026-03 (Croydon)","","","`#189821 <https://github.com/llvm/llvm-project/issues/189821>`__",""
-"`LWG4259 <https://wg21.link/LWG4259>`__","P1148R0 changed the return values of searching functions of ``std::basic_string`` on some platforms","2026-03 (Croydon)","","","`#189822 <https://github.com/llvm/llvm-project/issues/189822>`__",""
-"`LWG4290 <https://wg21.link/LWG4290>`__","Missing *Mandates* clauses on ``is_sufficiently_aligned``","2026-03 (Croydon)","","","`#189823 <https://github.com/llvm/llvm-project/issues/189823>`__",""
-"`LWG4314 <https://wg21.link/LWG4314>`__","Missing move in ``mdspan`` layout ``mapping::operator()``","2026-03 (Croydon)","","","`#189824 <https://github.com/llvm/llvm-project/issues/189824>`__",""
-"`LWG4324 <https://wg21.link/LWG4324>`__","``unique_ptr<void>::operator*`` is not SFINAE-friendly","2026-03 (Croydon)","|Complete|","23","`#189825 <https://github.com/llvm/llvm-project/issues/189825>`__",""
-"`LWG4325 <https://wg21.link/LWG4325>`__","``std::indirect``'s ``operator==`` still does not support incomplete types","2026-03 (Croydon)","","","`#189826 <https://github.com/llvm/llvm-project/issues/189826>`__",""
-"`LWG4339 <https://wg21.link/LWG4339>`__","``task``'s coroutine frame may be released late","2026-03 (Croydon)","","","`#189827 <https://github.com/llvm/llvm-project/issues/189827>`__",""
-"`LWG4347 <https://wg21.link/LWG4347>`__","``task``'s stop source is always created","2026-03 (Croydon)","","","`#189828 <https://github.com/llvm/llvm-project/issues/189828>`__",""
-"`LWG4354 <https://wg21.link/LWG4354>`__","Reconsider ``weakly_parallel`` as the default ``forward_progress_guarantee``","2026-03 (Croydon)","","","`#189829 <https://github.com/llvm/llvm-project/issues/189829>`__",""
-"`LWG4361 <https://wg21.link/LWG4361>`__","``awaitable-receiver::set_value`` should use *Mandates* instead of constraints","2026-03 (Croydon)","","","`#189830 <https://github.com/llvm/llvm-project/issues/189830>`__",""
-"`LWG4378 <https://wg21.link/LWG4378>`__","Inconsistency between ``std::basic_string``'s ``data()`` and ``operator[]`` specification","2026-03 (Croydon)","","","`#189831 <https://github.com/llvm/llvm-project/issues/189831>`__",""
-"`LWG4379 <https://wg21.link/LWG4379>`__","``hive::reserve()`` needs *Throws:* element adjusted to match block min/max considerations","2026-03 (Croydon)","","","`#189832 <https://github.com/llvm/llvm-project/issues/189832>`__",""
-"`LWG4453 <https://wg21.link/LWG4453>`__","``atomic_ref<cv T>::required_alignment`` should be the same as for ``T``","2026-03 (Croydon)","","","`#189833 <https://github.com/llvm/llvm-project/issues/189833>`__",""
-"`LWG4454 <https://wg21.link/LWG4454>`__","``assert`` should forbid ``co_await`` and ``co_yield``","2026-03 (Croydon)","","","`#189834 <https://github.com/llvm/llvm-project/issues/189834>`__",""
-"`LWG4457 <https://wg21.link/LWG4457>`__","freestanding for ``stable_sort``, ``stable_partition`` and ``inplace_merge``","2026-03 (Croydon)","","","`#189835 <https://github.com/llvm/llvm-project/issues/189835>`__",""
-"`LWG4460 <https://wg21.link/LWG4460>`__","Missing *Throws:* for last ``variant`` constructor","2026-03 (Croydon)","","","`#189836 <https://github.com/llvm/llvm-project/issues/189836>`__",""
-"`LWG4467 <https://wg21.link/LWG4467>`__","``hive::splice`` can throw ``bad_alloc``","2026-03 (Croydon)","","","`#189837 <https://github.com/llvm/llvm-project/issues/189837>`__",""
-"`LWG4468 <https://wg21.link/LWG4468>`__","§[const.wrap.class] ""``operator decltype(auto)``"" is ill-formed","2026-03 (Croydon)","|Complete|","23","`#189838 <https://github.com/llvm/llvm-project/issues/189838>`__",""
-"`LWG4469 <https://wg21.link/LWG4469>`__","Names of parameters of addressable function shall remain unspecified","2026-03 (Croydon)","","","`#189839 <https://github.com/llvm/llvm-project/issues/189839>`__",""
-"`LWG4472 <https://wg21.link/LWG4472>`__","``std::atomic_ref<const T>`` can be constructed from temporaries","2026-03 (Croydon)","|Complete|","23","`#189840 <https://github.com/llvm/llvm-project/issues/189840>`__",""
-"`LWG4474 <https://wg21.link/LWG4474>`__","""``round_to_nearest``"" rounding mode is unclear","2026-03 (Croydon)","","","`#189841 <https://github.com/llvm/llvm-project/issues/189841>`__",""
-"`LWG4476 <https://wg21.link/LWG4476>`__","``run_loop`` should not have a ``set_error`` completion","2026-03 (Croydon)","","","`#189842 <https://github.com/llvm/llvm-project/issues/189842>`__",""
-"`LWG4477 <https://wg21.link/LWG4477>`__","Placement ``operator delete`` should be constexpr","2026-03 (Croydon)","|Complete|","23","`#189843 <https://github.com/llvm/llvm-project/issues/189843>`__",""
-"`LWG4478 <https://wg21.link/LWG4478>`__","``meta::has_identifier`` is not specified for annotations","2026-03 (Croydon)","","","`#189844 <https://github.com/llvm/llvm-project/issues/189844>`__",""
-"`LWG4480 <https://wg21.link/LWG4480>`__","``<stdatomic.h>`` should provide ``ATOMIC_CHAR8_T_LOCK_FREE``","2026-03 (Croydon)","","","`#189845 <https://github.com/llvm/llvm-project/issues/189845>`__",""
-"`LWG4481 <https://wg21.link/LWG4481>`__","Disallow ``chrono::duration<const T, P>``","2026-03 (Croydon)","|Complete|","23","`#189846 <https://github.com/llvm/llvm-project/issues/189846>`__",""
-"`LWG4483 <https://wg21.link/LWG4483>`__","Multidimensional arrays are not supported by ``meta::reflect_constant_array`` and related functions","2026-03 (Croydon)","","","`#189847 <https://github.com/llvm/llvm-project/issues/189847>`__",""
-"`LWG4485 <https://wg21.link/LWG4485>`__","Move specification for ``task::stop_token_type``","2026-03 (Croydon)","","","`#189848 <https://github.com/llvm/llvm-project/issues/189848>`__",""
-"`LWG4486 <https://wg21.link/LWG4486>`__","``integral-constant-like`` and ``constexpr-wrapper-like`` exposition-only concept duplication","2026-03 (Croydon)","","","`#189849 <https://github.com/llvm/llvm-project/issues/189849>`__",""
-"`LWG4491 <https://wg21.link/LWG4491>`__","Rename ``submdspan_extents`` and ``submdspan_canonicalize_slices``","2026-03 (Croydon)","","","`#189850 <https://github.com/llvm/llvm-project/issues/189850>`__",""
-"`LWG4492 <https://wg21.link/LWG4492>`__","``std::generate`` and ``std::ranges::generate`` wording is unclear for parallel algorithms","2026-03 (Croydon)","","","`#189851 <https://github.com/llvm/llvm-project/issues/189851>`__",""
-"`LWG4493 <https://wg21.link/LWG4493>`__","Specification for some functions of bit reference types seems missing","2026-03 (Croydon)","","","`#189852 <https://github.com/llvm/llvm-project/issues/189852>`__",""
-"`LWG4496 <https://wg21.link/LWG4496>`__","Precedes vs Reachable in [meta.reflection]","2026-03 (Croydon)","","","`#189853 <https://github.com/llvm/llvm-project/issues/189853>`__",""
-"`LWG4497 <https://wg21.link/LWG4497>`__","``std::nullopt_t`` should be comparable","2026-03 (Croydon)","|Complete|","24","`#189854 <https://github.com/llvm/llvm-project/issues/189854>`__",""
-"`LWG4499 <https://wg21.link/LWG4499>`__","``flat_set::insert_range`` specification may be problematic","2026-03 (Croydon)","","","`#189855 <https://github.com/llvm/llvm-project/issues/189855>`__",""
-"`LWG4500 <https://wg21.link/LWG4500>`__","``constant_wrapper`` wording problems","2026-03 (Croydon)","|Complete|","23","`#189856 <https://github.com/llvm/llvm-project/issues/189856>`__",""
-"`LWG4504 <https://wg21.link/LWG4504>`__","Wording problem in ``{simple_}counting_scope``","2026-03 (Croydon)","","","`#189857 <https://github.com/llvm/llvm-project/issues/189857>`__",""
-"`LWG4506 <https://wg21.link/LWG4506>`__","``source_location`` is explicitly unspecified if is constexpr or not","2026-03 (Croydon)","","","`#189858 <https://github.com/llvm/llvm-project/issues/189858>`__",""
-"`LWG4510 <https://wg21.link/LWG4510>`__","Ambiguity of ``std::ranges::advance`` and ``std::ranges::next`` when the difference type is also a sentinel type","2026-03 (Croydon)","","","`#189859 <https://github.com/llvm/llvm-project/issues/189859>`__",""
-"`LWG4511 <https://wg21.link/LWG4511>`__","Inconsistency between the deduction guide of ``std::mdspan`` taking ``(data_handle_type, mapping_type, accessor_type)`` and the corresponding constructor","2026-03 (Croydon)","|Complete|","18","`#189860 <https://github.com/llvm/llvm-project/issues/189860>`__",""
-"`LWG4512 <https://wg21.link/LWG4512>`__","The ``system_encoded_string()`` and ``generic_system_encoded_string()`` member functions of ``std::filesystem::path`` are misnamed","2026-03 (Croydon)","","","`#189861 <https://github.com/llvm/llvm-project/issues/189861>`__",""
-"`LWG4514 <https://wg21.link/LWG4514>`__","Missing absolute value of ``init`` in ``vector_two_norm`` and ``matrix_frob_norm``","2026-03 (Croydon)","","","`#189862 <https://github.com/llvm/llvm-project/issues/189862>`__",""
-"`LWG4517 <https://wg21.link/LWG4517>`__","``data_member_spec`` should throw for *cv*-qualified unnamed bit-fields","2026-03 (Croydon)","","","`#189863 <https://github.com/llvm/llvm-project/issues/189863>`__",""
-"`LWG4522 <https://wg21.link/LWG4522>`__","Clarify that ``std::format`` transcodes for ``std::wformat_string``\s","2026-03 (Croydon)","","","`#189864 <https://github.com/llvm/llvm-project/issues/189864>`__",""
-"`LWG4523 <https://wg21.link/LWG4523>`__","``constant_wrapper`` should assign to value","2026-03 (Croydon)","|Complete|","23","`#189865 <https://github.com/llvm/llvm-project/issues/189865>`__",""
-"`LWG4525 <https://wg21.link/LWG4525>`__","``task``'s ``final_suspend`` should move the result","2026-03 (Croydon)","","","`#189866 <https://github.com/llvm/llvm-project/issues/189866>`__",""
-"`LWG4527 <https://wg21.link/LWG4527>`__","``await_transform`` needs to use ``as_awaitable``","2026-03 (Croydon)","","","`#189867 <https://github.com/llvm/llvm-project/issues/189867>`__",""
-"`LWG4528 <https://wg21.link/LWG4528>`__","``task`` needs ``get_completion_signatures()``","2026-03 (Croydon)","","","`#189868 <https://github.com/llvm/llvm-project/issues/189868>`__",""
-"`LWG4529 <https://wg21.link/LWG4529>`__","``task::promise_type::await_transform`` declaration and definition mismatch","2026-03 (Croydon)","","","`#189869 <https://github.com/llvm/llvm-project/issues/189869>`__",""
-"`LWG4532 <https://wg21.link/LWG4532>`__","Imprecise ``std::polymorphic`` wording seems to imply slicing","2026-03 (Croydon)","","","`#189870 <https://github.com/llvm/llvm-project/issues/189870>`__",""
-"`LWG4533 <https://wg21.link/LWG4533>`__","``not_fn<f>`` is unimplementable","2026-03 (Croydon)","","","`#189871 <https://github.com/llvm/llvm-project/issues/189871>`__",""
-"`LWG4535 <https://wg21.link/LWG4535>`__","Disallow user specialization of ``<simd>`` templates","2026-03 (Croydon)","","","`#189872 <https://github.com/llvm/llvm-project/issues/189872>`__",""
-"`LWG4536 <https://wg21.link/LWG4536>`__","Type traits have inconsistent interactions with immediate functions","2026-03 (Croydon)","","","`#189873 <https://github.com/llvm/llvm-project/issues/189873>`__",""
-"`LWG4537 <https://wg21.link/LWG4537>`__","Improve ``define_static_array``","2026-03 (Croydon)","","","`#189874 <https://github.com/llvm/llvm-project/issues/189874>`__",""
-"`LWG4540 <https://wg21.link/LWG4540>`__","``future-sender``\s returned from ``spawn_future`` do not forward stop requests to spawned work","2026-03 (Croydon)","","","`#189875 <https://github.com/llvm/llvm-project/issues/189875>`__",""
-"`LWG4544 <https://wg21.link/LWG4544>`__","Parallel overload of ``ranges::set_difference`` should return ``in_in_out_result``","2026-03 (Croydon)","","","`#189876 <https://github.com/llvm/llvm-project/issues/189876>`__",""
-"`LWG4548 <https://wg21.link/LWG4548>`__","Parallel ``ranges::set_intersection`` should not do unnecessary work","2026-03 (Croydon)","","","`#189877 <https://github.com/llvm/llvm-project/issues/189877>`__",""
-"`LWG4549 <https://wg21.link/LWG4549>`__","``vprint_nonunicode_buffered`` ignores its stream parameter","2026-03 (Croydon)","","","`#189878 <https://github.com/llvm/llvm-project/issues/189878>`__",""
-"`LWG4550 <https://wg21.link/LWG4550>`__","Need new feature test macros for ``<stdckdint.h>`` and ``<stdbit.h>``","2026-03 (Croydon)","","","`#189879 <https://github.com/llvm/llvm-project/issues/189879>`__",""
-"`LWG4552 <https://wg21.link/LWG4552>`__","``compare_exchange_weak`` writes a value on spurious failure, not memory contents","2026-03 (Croydon)","","","`#189880 <https://github.com/llvm/llvm-project/issues/189880>`__",""
-"`LWG4553 <https://wg21.link/LWG4553>`__","Wording for FR-025-246 25.7.18.2 Add a ``reserve_hint`` function to ``concat_view``","2026-03 (Croydon)","","","`#189881 <https://github.com/llvm/llvm-project/issues/189881>`__",""
-"`LWG4554 <https://wg21.link/LWG4554>`__","Remove undefined behaviour from ``hive`` for invalid limits","2026-03 (Croydon)","","","`#189882 <https://github.com/llvm/llvm-project/issues/189882>`__",""
-"`LWG4555 <https://wg21.link/LWG4555>`__","Remove ``is_consteval_only``","2026-03 (Croydon)","","","`#189883 <https://github.com/llvm/llvm-project/issues/189883>`__",""
-"`LWG4556 <https://wg21.link/LWG4556>`__","Unclear properties of reflection strings","2026-03 (Croydon)","","","`#189884 <https://github.com/llvm/llvm-project/issues/189884>`__",""
-"`LWG4557 <https://wg21.link/LWG4557>`__","Remove ``constexpr`` from ``owner_less`` and ``owner_before``","2026-03 (Croydon)","|Nothing To Do|","","`#189885 <https://github.com/llvm/llvm-project/issues/189885>`__",""
+"[LWG2414](https://wg21.link/LWG2414)","Member function reentrancy should be implementation-defined","2026-03 (Croydon)","","","[#189805](https://github.com/llvm/llvm-project/issues/189805)",""
+"[LWG2746](https://wg21.link/LWG2746)","Inconsistency between requirements for `emplace` between `optional` and `variant`","2026-03 (Croydon)","","","[#189806](https://github.com/llvm/llvm-project/issues/189806)",""
+"[LWG3504](https://wg21.link/LWG3504)","`condition_variable::wait_for` is overspecified","2026-03 (Croydon)","","","[#189807](https://github.com/llvm/llvm-project/issues/189807)",""
+"[LWG3599](https://wg21.link/LWG3599)","The `const` overload of `lazy_split_view::begin` should be constrained by `const Pattern`","2026-03 (Croydon)","","","[#189808](https://github.com/llvm/llvm-project/issues/189808)",""
+"[LWG3662](https://wg21.link/LWG3662)","`basic_string::append/assign(NTBS, pos, n)` suboptimal","2026-03 (Croydon)","{{Complete}}","23","[#189809](https://github.com/llvm/llvm-project/issues/189809)",""
+"[LWG3777](https://wg21.link/LWG3777)","Common `cartesian_product_view` produces an invalid range if the first range is input and one of the ranges is empty","2026-03 (Croydon)","","","[#189810](https://github.com/llvm/llvm-project/issues/189810)",""
+"[LWG3797](https://wg21.link/LWG3797)","`elements_view` insufficiently constrained","2026-03 (Croydon)","","","[#189811](https://github.com/llvm/llvm-project/issues/189811)",""
+"[LWG3831](https://wg21.link/LWG3831)","Two-digit formatting of negative `year` is ambiguous","2026-03 (Croydon)","","","[#189812](https://github.com/llvm/llvm-project/issues/189812)",""
+"[LWG3891](https://wg21.link/LWG3891)","LWG3870 breaks `std::expected<cv T, E>`","2026-03 (Croydon)","","","[#189813](https://github.com/llvm/llvm-project/issues/189813)",""
+"[LWG4026](https://wg21.link/LWG4026)","Assignment operators of `std::expected` should propagate triviality","2026-03 (Croydon)","","","[#189814](https://github.com/llvm/llvm-project/issues/189814)",""
+"[LWG4090](https://wg21.link/LWG4090)","Underspecified use of locale facets for locale-dependent `std::format`","2026-03 (Croydon)","","","[#189815](https://github.com/llvm/llvm-project/issues/189815)",""
+"[LWG4122](https://wg21.link/LWG4122)","Ill-formed `operator<=>` can cause hard error when instantiating `std::inplace_vector`","2026-03 (Croydon)","","","[#189816](https://github.com/llvm/llvm-project/issues/189816)",""
+"[LWG4130](https://wg21.link/LWG4130)","Preconditions for `std::launder` might be overly strict","2026-03 (Croydon)","","","[#189817](https://github.com/llvm/llvm-project/issues/189817)",""
+"[LWG4133](https://wg21.link/LWG4133)","`awaitable-receiver`'s members are potentially throwing","2026-03 (Croydon)","","","[#189818](https://github.com/llvm/llvm-project/issues/189818)",""
+"[LWG4143](https://wg21.link/LWG4143)","`execution::set_value/set_error/set_stopped/start` should always return void","2026-03 (Croydon)","","","[#189819](https://github.com/llvm/llvm-project/issues/189819)",""
+"[LWG4151](https://wg21.link/LWG4151)","Precondition of `inplace_vector::swap`","2026-03 (Croydon)","","","[#189820](https://github.com/llvm/llvm-project/issues/189820)",""
+"[LWG4223](https://wg21.link/LWG4223)","Deduction guides for maps are mishandling tuples and references","2026-03 (Croydon)","","","[#189821](https://github.com/llvm/llvm-project/issues/189821)",""
+"[LWG4259](https://wg21.link/LWG4259)","P1148R0 changed the return values of searching functions of `std::basic_string` on some platforms","2026-03 (Croydon)","","","[#189822](https://github.com/llvm/llvm-project/issues/189822)",""
+"[LWG4290](https://wg21.link/LWG4290)","Missing *Mandates* clauses on `is_sufficiently_aligned`","2026-03 (Croydon)","","","[#189823](https://github.com/llvm/llvm-project/issues/189823)",""
+"[LWG4314](https://wg21.link/LWG4314)","Missing move in `mdspan` layout `mapping::operator()`","2026-03 (Croydon)","","","[#189824](https://github.com/llvm/llvm-project/issues/189824)",""
+"[LWG4324](https://wg21.link/LWG4324)","`unique_ptr<void>::operator*` is not SFINAE-friendly","2026-03 (Croydon)","{{Complete}}","23","[#189825](https://github.com/llvm/llvm-project/issues/189825)",""
+"[LWG4325](https://wg21.link/LWG4325)","`std::indirect`'s `operator==` still does not support incomplete types","2026-03 (Croydon)","","","[#189826](https://github.com/llvm/llvm-project/issues/189826)",""
+"[LWG4339](https://wg21.link/LWG4339)","`task`'s coroutine frame may be released late","2026-03 (Croydon)","","","[#189827](https://github.com/llvm/llvm-project/issues/189827)",""
+"[LWG4347](https://wg21.link/LWG4347)","`task`'s stop source is always created","2026-03 (Croydon)","","","[#189828](https://github.com/llvm/llvm-project/issues/189828)",""
+"[LWG4354](https://wg21.link/LWG4354)","Reconsider `weakly_parallel` as the default `forward_progress_guarantee`","2026-03 (Croydon)","","","[#189829](https://github.com/llvm/llvm-project/issues/189829)",""
+"[LWG4361](https://wg21.link/LWG4361)","`awaitable-receiver::set_value` should use *Mandates* instead of constraints","2026-03 (Croydon)","","","[#189830](https://github.com/llvm/llvm-project/issues/189830)",""
+"[LWG4378](https://wg21.link/LWG4378)","Inconsistency between `std::basic_string`'s `data()` and `operator[]` specification","2026-03 (Croydon)","","","[#189831](https://github.com/llvm/llvm-project/issues/189831)",""
+"[LWG4379](https://wg21.link/LWG4379)","`hive::reserve()` needs *Throws:* element adjusted to match block min/max considerations","2026-03 (Croydon)","","","[#189832](https://github.com/llvm/llvm-project/issues/189832)",""
+"[LWG4453](https://wg21.link/LWG4453)","`atomic_ref<cv T>::required_alignment` should be the same as for `T`","2026-03 (Croydon)","","","[#189833](https://github.com/llvm/llvm-project/issues/189833)",""
+"[LWG4454](https://wg21.link/LWG4454)","`assert` should forbid `co_await` and `co_yield`","2026-03 (Croydon)","","","[#189834](https://github.com/llvm/llvm-project/issues/189834)",""
+"[LWG4457](https://wg21.link/LWG4457)","freestanding for `stable_sort`, `stable_partition` and `inplace_merge`","2026-03 (Croydon)","","","[#189835](https://github.com/llvm/llvm-project/issues/189835)",""
+"[LWG4460](https://wg21.link/LWG4460)","Missing *Throws:* for last `variant` constructor","2026-03 (Croydon)","","","[#189836](https://github.com/llvm/llvm-project/issues/189836)",""
+"[LWG4467](https://wg21.link/LWG4467)","`hive::splice` can throw `bad_alloc`","2026-03 (Croydon)","","","[#189837](https://github.com/llvm/llvm-project/issues/189837)",""
+"[LWG4468](https://wg21.link/LWG4468)","§[const.wrap.class] ""`operator decltype(auto)`"" is ill-formed","2026-03 (Croydon)","{{Complete}}","23","[#189838](https://github.com/llvm/llvm-project/issues/189838)",""
+"[LWG4469](https://wg21.link/LWG4469)","Names of parameters of addressable function shall remain unspecified","2026-03 (Croydon)","","","[#189839](https://github.com/llvm/llvm-project/issues/189839)",""
+"[LWG4472](https://wg21.link/LWG4472)","`std::atomic_ref<const T>` can be constructed from temporaries","2026-03 (Croydon)","{{Complete}}","23","[#189840](https://github.com/llvm/llvm-project/issues/189840)",""
+"[LWG4474](https://wg21.link/LWG4474)","""`round_to_nearest`"" rounding mode is unclear","2026-03 (Croydon)","","","[#189841](https://github.com/llvm/llvm-project/issues/189841)",""
+"[LWG4476](https://wg21.link/LWG4476)","`run_loop` should not have a `set_error` completion","2026-03 (Croydon)","","","[#189842](https://github.com/llvm/llvm-project/issues/189842)",""
+"[LWG4477](https://wg21.link/LWG4477)","Placement `operator delete` should be constexpr","2026-03 (Croydon)","{{Complete}}","23","[#189843](https://github.com/llvm/llvm-project/issues/189843)",""
+"[LWG4478](https://wg21.link/LWG4478)","`meta::has_identifier` is not specified for annotations","2026-03 (Croydon)","","","[#189844](https://github.com/llvm/llvm-project/issues/189844)",""
+"[LWG4480](https://wg21.link/LWG4480)","`<stdatomic.h>` should provide `ATOMIC_CHAR8_T_LOCK_FREE`","2026-03 (Croydon)","","","[#189845](https://github.com/llvm/llvm-project/issues/189845)",""
+"[LWG4481](https://wg21.link/LWG4481)","Disallow `chrono::duration<const T, P>`","2026-03 (Croydon)","{{Complete}}","23","[#189846](https://github.com/llvm/llvm-project/issues/189846)",""
+"[LWG4483](https://wg21.link/LWG4483)","Multidimensional arrays are not supported by `meta::reflect_constant_array` and related functions","2026-03 (Croydon)","","","[#189847](https://github.com/llvm/llvm-project/issues/189847)",""
+"[LWG4485](https://wg21.link/LWG4485)","Move specification for `task::stop_token_type`","2026-03 (Croydon)","","","[#189848](https://github.com/llvm/llvm-project/issues/189848)",""
+"[LWG4486](https://wg21.link/LWG4486)","`integral-constant-like` and `constexpr-wrapper-like` exposition-only concept duplication","2026-03 (Croydon)","","","[#189849](https://github.com/llvm/llvm-project/issues/189849)",""
+"[LWG4491](https://wg21.link/LWG4491)","Rename `submdspan_extents` and `submdspan_canonicalize_slices`","2026-03 (Croydon)","","","[#189850](https://github.com/llvm/llvm-project/issues/189850)",""
+"[LWG4492](https://wg21.link/LWG4492)","`std::generate` and `std::ranges::generate` wording is unclear for parallel algorithms","2026-03 (Croydon)","","","[#189851](https://github.com/llvm/llvm-project/issues/189851)",""
+"[LWG4493](https://wg21.link/LWG4493)","Specification for some functions of bit reference types seems missing","2026-03 (Croydon)","","","[#189852](https://github.com/llvm/llvm-project/issues/189852)",""
+"[LWG4496](https://wg21.link/LWG4496)","Precedes vs Reachable in [meta.reflection]","2026-03 (Croydon)","","","[#189853](https://github.com/llvm/llvm-project/issues/189853)",""
+"[LWG4497](https://wg21.link/LWG4497)","`std::nullopt_t` should be comparable","2026-03 (Croydon)","{{Complete}}","24","[#189854](https://github.com/llvm/llvm-project/issues/189854)",""
+"[LWG4499](https://wg21.link/LWG4499)","`flat_set::insert_range` specification may be problematic","2026-03 (Croydon)","","","[#189855](https://github.com/llvm/llvm-project/issues/189855)",""
+"[LWG4500](https://wg21.link/LWG4500)","`constant_wrapper` wording problems","2026-03 (Croydon)","{{Complete}}","23","[#189856](https://github.com/llvm/llvm-project/issues/189856)",""
+"[LWG4504](https://wg21.link/LWG4504)","Wording problem in `{simple_}counting_scope`","2026-03 (Croydon)","","","[#189857](https://github.com/llvm/llvm-project/issues/189857)",""
+"[LWG4506](https://wg21.link/LWG4506)","`source_location` is explicitly unspecified if is constexpr or not","2026-03 (Croydon)","","","[#189858](https://github.com/llvm/llvm-project/issues/189858)",""
+"[LWG4510](https://wg21.link/LWG4510)","Ambiguity of `std::ranges::advance` and `std::ranges::next` when the difference type is also a sentinel type","2026-03 (Croydon)","","","[#189859](https://github.com/llvm/llvm-project/issues/189859)",""
+"[LWG4511](https://wg21.link/LWG4511)","Inconsistency between the deduction guide of `std::mdspan` taking `(data_handle_type, mapping_type, accessor_type)` and the corresponding constructor","2026-03 (Croydon)","{{Complete}}","18","[#189860](https://github.com/llvm/llvm-project/issues/189860)",""
+"[LWG4512](https://wg21.link/LWG4512)","The `system_encoded_string()` and `generic_system_encoded_string()` member functions of `std::filesystem::path` are misnamed","2026-03 (Croydon)","","","[#189861](https://github.com/llvm/llvm-project/issues/189861)",""
+"[LWG4514](https://wg21.link/LWG4514)","Missing absolute value of `init` in `vector_two_norm` and `matrix_frob_norm`","2026-03 (Croydon)","","","[#189862](https://github.com/llvm/llvm-project/issues/189862)",""
+"[LWG4517](https://wg21.link/LWG4517)","`data_member_spec` should throw for *cv*-qualified unnamed bit-fields","2026-03 (Croydon)","","","[#189863](https://github.com/llvm/llvm-project/issues/189863)",""
+"[LWG4522](https://wg21.link/LWG4522)","Clarify that `std::format` transcodes for `std::wformat_string`\s","2026-03 (Croydon)","","","[#189864](https://github.com/llvm/llvm-project/issues/189864)",""
+"[LWG4523](https://wg21.link/LWG4523)","`constant_wrapper` should assign to value","2026-03 (Croydon)","{{Complete}}","23","[#189865](https://github.com/llvm/llvm-project/issues/189865)",""
+"[LWG4525](https://wg21.link/LWG4525)","`task`'s `final_suspend` should move the result","2026-03 (Croydon)","","","[#189866](https://github.com/llvm/llvm-project/issues/189866)",""
+"[LWG4527](https://wg21.link/LWG4527)","`await_transform` needs to use `as_awaitable`","2026-03 (Croydon)","","","[#189867](https://github.com/llvm/llvm-project/issues/189867)",""
+"[LWG4528](https://wg21.link/LWG4528)","`task` needs `get_completion_signatures()`","2026-03 (Croydon)","","","[#189868](https://github.com/llvm/llvm-project/issues/189868)",""
+"[LWG4529](https://wg21.link/LWG4529)","`task::promise_type::await_transform` declaration and definition mismatch","2026-03 (Croydon)","","","[#189869](https://github.com/llvm/llvm-project/issues/189869)",""
+"[LWG4532](https://wg21.link/LWG4532)","Imprecise `std::polymorphic` wording seems to imply slicing","2026-03 (Croydon)","","","[#189870](https://github.com/llvm/llvm-project/issues/189870)",""
+"[LWG4533](https://wg21.link/LWG4533)","`not_fn<f>` is unimplementable","2026-03 (Croydon)","","","[#189871](https://github.com/llvm/llvm-project/issues/189871)",""
+"[LWG4535](https://wg21.link/LWG4535)","Disallow user specialization of `<simd>` templates","2026-03 (Croydon)","","","[#189872](https://github.com/llvm/llvm-project/issues/189872)",""
+"[LWG4536](https://wg21.link/LWG4536)","Type traits have inconsistent interactions with immediate functions","2026-03 (Croydon)","","","[#189873](https://github.com/llvm/llvm-project/issues/189873)",""
+"[LWG4537](https://wg21.link/LWG4537)","Improve `define_static_array`","2026-03 (Croydon)","","","[#189874](https://github.com/llvm/llvm-project/issues/189874)",""
+"[LWG4540](https://wg21.link/LWG4540)","`future-sender`\s returned from `spawn_future` do not forward stop requests to spawned work","2026-03 (Croydon)","","","[#189875](https://github.com/llvm/llvm-project/issues/189875)",""
+"[LWG4544](https://wg21.link/LWG4544)","Parallel overload of `ranges::set_difference` should return `in_in_out_result`","2026-03 (Croydon)","","","[#189876](https://github.com/llvm/llvm-project/issues/189876)",""
+"[LWG4548](https://wg21.link/LWG4548)","Parallel `ranges::set_intersection` should not do unnecessary work","2026-03 (Croydon)","","","[#189877](https://github.com/llvm/llvm-project/issues/189877)",""
+"[LWG4549](https://wg21.link/LWG4549)","`vprint_nonunicode_buffered` ignores its stream parameter","2026-03 (Croydon)","","","[#189878](https://github.com/llvm/llvm-project/issues/189878)",""
+"[LWG4550](https://wg21.link/LWG4550)","Need new feature test macros for `<stdckdint.h>` and `<stdbit.h>`","2026-03 (Croydon)","","","[#189879](https://github.com/llvm/llvm-project/issues/189879)",""
+"[LWG4552](https://wg21.link/LWG4552)","`compare_exchange_weak` writes a value on spurious failure, not memory contents","2026-03 (Croydon)","","","[#189880](https://github.com/llvm/llvm-project/issues/189880)",""
+"[LWG4553](https://wg21.link/LWG4553)","Wording for FR-025-246 25.7.18.2 Add a `reserve_hint` function to `concat_view`","2026-03 (Croydon)","","","[#189881](https://github.com/llvm/llvm-project/issues/189881)",""
+"[LWG4554](https://wg21.link/LWG4554)","Remove undefined behaviour from `hive` for invalid limits","2026-03 (Croydon)","","","[#189882](https://github.com/llvm/llvm-project/issues/189882)",""
+"[LWG4555](https://wg21.link/LWG4555)","Remove `is_consteval_only`","2026-03 (Croydon)","","","[#189883](https://github.com/llvm/llvm-project/issues/189883)",""
+"[LWG4556](https://wg21.link/LWG4556)","Unclear properties of reflection strings","2026-03 (Croydon)","","","[#189884](https://github.com/llvm/llvm-project/issues/189884)",""
+"[LWG4557](https://wg21.link/LWG4557)","Remove `constexpr` from `owner_less` and `owner_before`","2026-03 (Croydon)","{{NothingToDo}}","","[#189885](https://github.com/llvm/llvm-project/issues/189885)",""
"","","","","","",""
-"`LWG4139 <https://wg21.link/LWG4139>`__","§[time.zone.leap] recursive constraint in ``<=>``","Not Adopted Yet","|Complete|","20","`#118369 <https://github.com/llvm/llvm-project/issues/118369>`__",""
-"`LWG3456 <https://wg21.link/LWG3456>`__","Pattern used by ``std::from_chars`` is underspecified (option B)","Not Adopted Yet","|Complete|","20","`#118370 <https://github.com/llvm/llvm-project/issues/118370>`__",""
-"`LWG3882 <https://wg21.link/LWG3882>`__","``tuple`` relational operators have confused friendships","Not Adopted Yet","|Complete|","22","`#171425 <https://github.com/llvm/llvm-project/issues/171425>`__","The comparison operators are constrained harder than the proposed resolution."
+"[LWG4139](https://wg21.link/LWG4139)","§[time.zone.leap] recursive constraint in `<=>`","Not Adopted Yet","{{Complete}}","20","[#118369](https://github.com/llvm/llvm-project/issues/118369)",""
+"[LWG3456](https://wg21.link/LWG3456)","Pattern used by `std::from_chars` is underspecified (option B)","Not Adopted Yet","{{Complete}}","20","[#118370](https://github.com/llvm/llvm-project/issues/118370)",""
+"[LWG3882](https://wg21.link/LWG3882)","`tuple` relational operators have confused friendships","Not Adopted Yet","{{Complete}}","22","[#171425](https://github.com/llvm/llvm-project/issues/171425)","The comparison operators are constrained harder than the proposed resolution."
"","","","","","",""
diff --git a/libcxx/docs/Status/Cxx26Papers.csv b/libcxx/docs/Status/Cxx26Papers.csv
index fc38b0a47070e..954423d15c225 100644
--- a/libcxx/docs/Status/Cxx26Papers.csv
+++ b/libcxx/docs/Status/Cxx26Papers.csv
@@ -1,218 +1,218 @@
"Paper #","Paper Name","Meeting","Status","First released version","GitHub issue","Notes"
-"`P2497R0 <https://wg21.link/P2497R0>`__","Testing for success or failure of ``<charconv>`` functions","2023-06 (Varna)","|Complete|","18","`#105357 <https://github.com/llvm/llvm-project/issues/105357>`__",""
-"`P2592R3 <https://wg21.link/P2592R3>`__","Hashing support for ``std::chrono`` value classes","2023-06 (Varna)","|Complete|","22","`#105358 <https://github.com/llvm/llvm-project/issues/105358>`__",""
-"`P2587R3 <https://wg21.link/P2587R3>`__","``to_string`` or not ``to_string``","2023-06 (Varna)","","","`#105359 <https://github.com/llvm/llvm-project/issues/105359>`__",""
-"`P2562R1 <https://wg21.link/P2562R1>`__","``constexpr`` Stable Sorting","2023-06 (Varna)","|Complete|","21","`#105360 <https://github.com/llvm/llvm-project/issues/105360>`__",""
-"`P2545R4 <https://wg21.link/P2545R4>`__","Read-Copy Update (RCU)","2023-06 (Varna)","","","`#105361 <https://github.com/llvm/llvm-project/issues/105361>`__",""
-"`P2530R3 <https://wg21.link/P2530R3>`__","Hazard Pointers for C++26","2023-06 (Varna)","","","`#105362 <https://github.com/llvm/llvm-project/issues/105362>`__",""
-"`P2538R1 <https://wg21.link/P2538R1>`__","ADL-proof ``std::projected``","2023-06 (Varna)","|Complete|","18","`#105363 <https://github.com/llvm/llvm-project/issues/105363>`__",""
-"`P2495R3 <https://wg21.link/P2495R3>`__","Interfacing ``stringstream``\s with ``string_view``","2023-06 (Varna)","|Complete|","19","`#105364 <https://github.com/llvm/llvm-project/issues/105364>`__",""
-"`P2510R3 <https://wg21.link/P2510R3>`__","Formatting pointers","2023-06 (Varna)","|Complete|","17","`#105365 <https://github.com/llvm/llvm-project/issues/105365>`__","Implemented as a DR against C++20."
-"`P2198R7 <https://wg21.link/P2198R7>`__","Freestanding Feature-Test Macros and Implementation-Defined Extensions","2023-06 (Varna)","","","`#105368 <https://github.com/llvm/llvm-project/issues/105368>`__",""
-"`P2338R4 <https://wg21.link/P2338R4>`__","Freestanding Library: Character primitives and the C library","2023-06 (Varna)","","","`#105369 <https://github.com/llvm/llvm-project/issues/105369>`__",""
-"`P2013R5 <https://wg21.link/P2013R5>`__","Freestanding Language: Optional ``::operator new``","2023-06 (Varna)","","","`#105370 <https://github.com/llvm/llvm-project/issues/105370>`__",""
-"`P2363R5 <https://wg21.link/P2363R5>`__","Extending associative containers with the remaining heterogeneous overloads","2023-06 (Varna)","","","`#105371 <https://github.com/llvm/llvm-project/issues/105371>`__",""
-"`P1901R2 <https://wg21.link/P1901R2>`__","Enabling the Use of ``weak_ptr`` as Keys in Unordered Associative Containers","2023-06 (Varna)","|Complete|","24","`#105372 <https://github.com/llvm/llvm-project/issues/105372>`__",""
-"`P1885R12 <https://wg21.link/P1885R12>`__","Naming Text Encodings to Demystify Them","2023-06 (Varna)","|Complete|","23","`#105373 <https://github.com/llvm/llvm-project/issues/105373>`__",""
-"`P0792R14 <https://wg21.link/P0792R14>`__","``function_ref``: a type-erased callable reference","2023-06 (Varna)","|Complete|","24","`#105376 <https://github.com/llvm/llvm-project/issues/105376>`__",""
-"`P2874R2 <https://wg21.link/P2874R2>`__","P2874R2: Mandating Annex D Require No More","2023-06 (Varna)","|Complete|","12","`#105377 <https://github.com/llvm/llvm-project/issues/105377>`__",""
-"`P2757R3 <https://wg21.link/P2757R3>`__","Type-checking format args","2023-06 (Varna)","","","`#105378 <https://github.com/llvm/llvm-project/issues/105378>`__",""
-"`P2637R3 <https://wg21.link/P2637R3>`__","Member ``visit``","2023-06 (Varna)","|Complete|","19","`#105380 <https://github.com/llvm/llvm-project/issues/105380>`__","Change of ``__cpp_lib_variant`` is completed in LLVM 20. Change of ``__cpp_lib_format`` is blocked by `P2419R2 <https://wg21.link/P2419R2>`__."
-"`P2641R4 <https://wg21.link/P2641R4>`__","Checking if a ``union`` alternative is active","2023-06 (Varna)","|Complete|","22","`#105381 <https://github.com/llvm/llvm-project/issues/105381>`__",""
-"`P1759R6 <https://wg21.link/P1759R6>`__","Native handles and file streams","2023-06 (Varna)","|Complete|","18","`#105382 <https://github.com/llvm/llvm-project/issues/105382>`__",""
-"`P2697R1 <https://wg21.link/P2697R1>`__","Interfacing ``bitset`` with ``string_view``","2023-06 (Varna)","|Complete|","18","`#105384 <https://github.com/llvm/llvm-project/issues/105384>`__",""
-"`P1383R2 <https://wg21.link/P1383R2>`__","More ``constexpr`` for ``<cmath>`` and ``<complex>``","2023-06 (Varna)","","","`#105385 <https://github.com/llvm/llvm-project/issues/105385>`__",""
-"`P2734R0 <https://wg21.link/P2734R0>`__","Adding the new SI prefixes","2023-06 (Varna)","|Complete|","17","`#105386 <https://github.com/llvm/llvm-project/issues/105386>`__",""
-"`P2548R6 <https://wg21.link/P2548R6>`__","``copyable_function``","2023-06 (Varna)","","","`#105387 <https://github.com/llvm/llvm-project/issues/105387>`__",""
-"`P2714R1 <https://wg21.link/P2714R1>`__","Bind front and back to NTTP callables","2023-06 (Varna)","|Partial|","20","`#105388 <https://github.com/llvm/llvm-project/issues/105388>`__",""
-"`P2630R4 <https://wg21.link/P2630R4>`__","``submdspan``","2023-06 (Varna)","","","`#105389 <https://github.com/llvm/llvm-project/issues/105389>`__",""
+"[P2497R0](https://wg21.link/P2497R0)","Testing for success or failure of `<charconv>` functions","2023-06 (Varna)","{{Complete}}","18","[#105357](https://github.com/llvm/llvm-project/issues/105357)",""
+"[P2592R3](https://wg21.link/P2592R3)","Hashing support for `std::chrono` value classes","2023-06 (Varna)","{{Complete}}","22","[#105358](https://github.com/llvm/llvm-project/issues/105358)",""
+"[P2587R3](https://wg21.link/P2587R3)","`to_string` or not `to_string`","2023-06 (Varna)","","","[#105359](https://github.com/llvm/llvm-project/issues/105359)",""
+"[P2562R1](https://wg21.link/P2562R1)","`constexpr` Stable Sorting","2023-06 (Varna)","{{Complete}}","21","[#105360](https://github.com/llvm/llvm-project/issues/105360)",""
+"[P2545R4](https://wg21.link/P2545R4)","Read-Copy Update (RCU)","2023-06 (Varna)","","","[#105361](https://github.com/llvm/llvm-project/issues/105361)",""
+"[P2530R3](https://wg21.link/P2530R3)","Hazard Pointers for C++26","2023-06 (Varna)","","","[#105362](https://github.com/llvm/llvm-project/issues/105362)",""
+"[P2538R1](https://wg21.link/P2538R1)","ADL-proof `std::projected`","2023-06 (Varna)","{{Complete}}","18","[#105363](https://github.com/llvm/llvm-project/issues/105363)",""
+"[P2495R3](https://wg21.link/P2495R3)","Interfacing `stringstream`s with `string_view`","2023-06 (Varna)","{{Complete}}","19","[#105364](https://github.com/llvm/llvm-project/issues/105364)",""
+"[P2510R3](https://wg21.link/P2510R3)","Formatting pointers","2023-06 (Varna)","{{Complete}}","17","[#105365](https://github.com/llvm/llvm-project/issues/105365)","Implemented as a DR against C++20."
+"[P2198R7](https://wg21.link/P2198R7)","Freestanding Feature-Test Macros and Implementation-Defined Extensions","2023-06 (Varna)","","","[#105368](https://github.com/llvm/llvm-project/issues/105368)",""
+"[P2338R4](https://wg21.link/P2338R4)","Freestanding Library: Character primitives and the C library","2023-06 (Varna)","","","[#105369](https://github.com/llvm/llvm-project/issues/105369)",""
+"[P2013R5](https://wg21.link/P2013R5)","Freestanding Language: Optional `::operator new`","2023-06 (Varna)","","","[#105370](https://github.com/llvm/llvm-project/issues/105370)",""
+"[P2363R5](https://wg21.link/P2363R5)","Extending associative containers with the remaining heterogeneous overloads","2023-06 (Varna)","","","[#105371](https://github.com/llvm/llvm-project/issues/105371)",""
+"[P1901R2](https://wg21.link/P1901R2)","Enabling the Use of `weak_ptr` as Keys in Unordered Associative Containers","2023-06 (Varna)","{{Complete}}","24","[#105372](https://github.com/llvm/llvm-project/issues/105372)",""
+"[P1885R12](https://wg21.link/P1885R12)","Naming Text Encodings to Demystify Them","2023-06 (Varna)","{{Complete}}","23","[#105373](https://github.com/llvm/llvm-project/issues/105373)",""
+"[P0792R14](https://wg21.link/P0792R14)","`function_ref`: a type-erased callable reference","2023-06 (Varna)","{{Complete}}","24","[#105376](https://github.com/llvm/llvm-project/issues/105376)",""
+"[P2874R2](https://wg21.link/P2874R2)","P2874R2: Mandating Annex D Require No More","2023-06 (Varna)","{{Complete}}","12","[#105377](https://github.com/llvm/llvm-project/issues/105377)",""
+"[P2757R3](https://wg21.link/P2757R3)","Type-checking format args","2023-06 (Varna)","","","[#105378](https://github.com/llvm/llvm-project/issues/105378)",""
+"[P2637R3](https://wg21.link/P2637R3)","Member `visit`","2023-06 (Varna)","{{Complete}}","19","[#105380](https://github.com/llvm/llvm-project/issues/105380)","Change of `__cpp_lib_variant` is completed in LLVM 20. Change of `__cpp_lib_format` is blocked by [P2419R2](https://wg21.link/P2419R2)."
+"[P2641R4](https://wg21.link/P2641R4)","Checking if a `union` alternative is active","2023-06 (Varna)","{{Complete}}","22","[#105381](https://github.com/llvm/llvm-project/issues/105381)",""
+"[P1759R6](https://wg21.link/P1759R6)","Native handles and file streams","2023-06 (Varna)","{{Complete}}","18","[#105382](https://github.com/llvm/llvm-project/issues/105382)",""
+"[P2697R1](https://wg21.link/P2697R1)","Interfacing `bitset` with `string_view`","2023-06 (Varna)","{{Complete}}","18","[#105384](https://github.com/llvm/llvm-project/issues/105384)",""
+"[P1383R2](https://wg21.link/P1383R2)","More `constexpr` for `<cmath>` and `<complex>`","2023-06 (Varna)","","","[#105385](https://github.com/llvm/llvm-project/issues/105385)",""
+"[P2734R0](https://wg21.link/P2734R0)","Adding the new SI prefixes","2023-06 (Varna)","{{Complete}}","17","[#105386](https://github.com/llvm/llvm-project/issues/105386)",""
+"[P2548R6](https://wg21.link/P2548R6)","`copyable_function`","2023-06 (Varna)","","","[#105387](https://github.com/llvm/llvm-project/issues/105387)",""
+"[P2714R1](https://wg21.link/P2714R1)","Bind front and back to NTTP callables","2023-06 (Varna)","{{Partial}}","20","[#105388](https://github.com/llvm/llvm-project/issues/105388)",""
+"[P2630R4](https://wg21.link/P2630R4)","`submdspan`","2023-06 (Varna)","","","[#105389](https://github.com/llvm/llvm-project/issues/105389)",""
"","","","","","",""
-"`P0543R3 <https://wg21.link/P0543R3>`__","Saturation arithmetic","2023-11 (Kona)","|Complete|","18","`#105390 <https://github.com/llvm/llvm-project/issues/105390>`__",""
-"`P2407R5 <https://wg21.link/P2407R5>`__","Freestanding Library: Partial Classes","2023-11 (Kona)","","","`#105391 <https://github.com/llvm/llvm-project/issues/105391>`__",""
-"`P2546R5 <https://wg21.link/P2546R5>`__","Debugging Support","2023-11 (Kona)","","","`#105392 <https://github.com/llvm/llvm-project/issues/105392>`__",""
-"`P2905R2 <https://wg21.link/P2905R2>`__","Runtime format strings","2023-11 (Kona)","|Complete|","18","`#105393 <https://github.com/llvm/llvm-project/issues/105393>`__",""
-"`P2918R2 <https://wg21.link/P2918R2>`__","Runtime format strings II","2023-11 (Kona)","|Complete|","18","`#105394 <https://github.com/llvm/llvm-project/issues/105394>`__",""
-"`P2909R4 <https://wg21.link/P2909R4>`__","Fix formatting of code units as integers (Dude, where’s my ``char``?)","2023-11 (Kona)","|Complete|","18","`#105395 <https://github.com/llvm/llvm-project/issues/105395>`__",""
-"`P0952R2 <https://wg21.link/P0952R2>`__","A new specification for ``std::generate_canonical``","2023-11 (Kona)","","","`#105396 <https://github.com/llvm/llvm-project/issues/105396>`__",""
-"`P2447R6 <https://wg21.link/P2447R6>`__","``std::span`` over an initializer list","2023-11 (Kona)","|Complete|","18","`#105397 <https://github.com/llvm/llvm-project/issues/105397>`__","Reverted by `P4144R1 <https://wg21.link/P4144R1>`__."
-"`P2821R5 <https://wg21.link/P2821R5>`__","``span.at()``","2023-11 (Kona)","|Complete|","18","`#105399 <https://github.com/llvm/llvm-project/issues/105399>`__",""
-"`P2868R3 <https://wg21.link/P2868R3>`__","Remove Deprecated ``std::allocator`` Typedef From C++26","2023-11 (Kona)","|Complete|","18","`#105400 <https://github.com/llvm/llvm-project/issues/105400>`__",""
-"`P2870R3 <https://wg21.link/P2870R3>`__","Remove ``basic_string::reserve()`` From C++26","2023-11 (Kona)","|Complete|","18","`#105401 <https://github.com/llvm/llvm-project/issues/105401>`__",""
-"`P2871R3 <https://wg21.link/P2871R3>`__","Remove Deprecated Unicode Conversion Facets from C++26","2023-11 (Kona)","|Complete|","18","`#105402 <https://github.com/llvm/llvm-project/issues/105402>`__",""
-"`P2819R2 <https://wg21.link/P2819R2>`__","Add tuple protocol to complex","2023-11 (Kona)","|Complete|","19","`#105403 <https://github.com/llvm/llvm-project/issues/105403>`__",""
-"`P2937R0 <https://wg21.link/P2937R0>`__","Freestanding: Remove ``strtok``","2023-11 (Kona)","","","`#105404 <https://github.com/llvm/llvm-project/issues/105404>`__",""
-"`P2833R2 <https://wg21.link/P2833R2>`__","Freestanding Library: inout expected span","2023-11 (Kona)","","","`#105405 <https://github.com/llvm/llvm-project/issues/105405>`__",""
-"`P2836R1 <https://wg21.link/P2836R1>`__","``std::basic_const_iterator`` should follow its underlying type's convertibility","2023-11 (Kona)","","","`#105406 <https://github.com/llvm/llvm-project/issues/105406>`__",""
-"`P2264R7 <https://wg21.link/P2264R7>`__","Make ``assert()`` macro user friendly for C and C++","2023-11 (Kona)","","","`#105407 <https://github.com/llvm/llvm-project/issues/105407>`__",""
-"`P1673R13 <https://wg21.link/P1673R13>`__","A free function linear algebra interface based on the BLAS","2023-11 (Kona)","","","`#105408 <https://github.com/llvm/llvm-project/issues/105408>`__",""
+"[P0543R3](https://wg21.link/P0543R3)","Saturation arithmetic","2023-11 (Kona)","{{Complete}}","18","[#105390](https://github.com/llvm/llvm-project/issues/105390)",""
+"[P2407R5](https://wg21.link/P2407R5)","Freestanding Library: Partial Classes","2023-11 (Kona)","","","[#105391](https://github.com/llvm/llvm-project/issues/105391)",""
+"[P2546R5](https://wg21.link/P2546R5)","Debugging Support","2023-11 (Kona)","","","[#105392](https://github.com/llvm/llvm-project/issues/105392)",""
+"[P2905R2](https://wg21.link/P2905R2)","Runtime format strings","2023-11 (Kona)","{{Complete}}","18","[#105393](https://github.com/llvm/llvm-project/issues/105393)",""
+"[P2918R2](https://wg21.link/P2918R2)","Runtime format strings II","2023-11 (Kona)","{{Complete}}","18","[#105394](https://github.com/llvm/llvm-project/issues/105394)",""
+"[P2909R4](https://wg21.link/P2909R4)","Fix formatting of code units as integers (Dude, where’s my `char`?)","2023-11 (Kona)","{{Complete}}","18","[#105395](https://github.com/llvm/llvm-project/issues/105395)",""
+"[P0952R2](https://wg21.link/P0952R2)","A new specification for `std::generate_canonical`","2023-11 (Kona)","","","[#105396](https://github.com/llvm/llvm-project/issues/105396)",""
+"[P2447R6](https://wg21.link/P2447R6)","`std::span` over an initializer list","2023-11 (Kona)","{{Complete}}","18","[#105397](https://github.com/llvm/llvm-project/issues/105397)","Reverted by [P4144R1](https://wg21.link/P4144R1)."
+"[P2821R5](https://wg21.link/P2821R5)","`span.at()`","2023-11 (Kona)","{{Complete}}","18","[#105399](https://github.com/llvm/llvm-project/issues/105399)",""
+"[P2868R3](https://wg21.link/P2868R3)","Remove Deprecated `std::allocator` Typedef From C++26","2023-11 (Kona)","{{Complete}}","18","[#105400](https://github.com/llvm/llvm-project/issues/105400)",""
+"[P2870R3](https://wg21.link/P2870R3)","Remove `basic_string::reserve()` From C++26","2023-11 (Kona)","{{Complete}}","18","[#105401](https://github.com/llvm/llvm-project/issues/105401)",""
+"[P2871R3](https://wg21.link/P2871R3)","Remove Deprecated Unicode Conversion Facets from C++26","2023-11 (Kona)","{{Complete}}","18","[#105402](https://github.com/llvm/llvm-project/issues/105402)",""
+"[P2819R2](https://wg21.link/P2819R2)","Add tuple protocol to complex","2023-11 (Kona)","{{Complete}}","19","[#105403](https://github.com/llvm/llvm-project/issues/105403)",""
+"[P2937R0](https://wg21.link/P2937R0)","Freestanding: Remove `strtok`","2023-11 (Kona)","","","[#105404](https://github.com/llvm/llvm-project/issues/105404)",""
+"[P2833R2](https://wg21.link/P2833R2)","Freestanding Library: inout expected span","2023-11 (Kona)","","","[#105405](https://github.com/llvm/llvm-project/issues/105405)",""
+"[P2836R1](https://wg21.link/P2836R1)","`std::basic_const_iterator` should follow its underlying type's convertibility","2023-11 (Kona)","","","[#105406](https://github.com/llvm/llvm-project/issues/105406)",""
+"[P2264R7](https://wg21.link/P2264R7)","Make `assert()` macro user friendly for C and C++","2023-11 (Kona)","","","[#105407](https://github.com/llvm/llvm-project/issues/105407)",""
+"[P1673R13](https://wg21.link/P1673R13)","A free function linear algebra interface based on the BLAS","2023-11 (Kona)","","","[#105408](https://github.com/llvm/llvm-project/issues/105408)",""
"","","","","","",""
-"`P2875R4 <https://wg21.link/P2875R4>`__","Undeprecate ``polymorphic_allocator::destroy`` for C++26","2024-03 (Tokyo)","|Complete|","15","`#105410 <https://github.com/llvm/llvm-project/issues/105410>`__",""
-"`P2867R2 <https://wg21.link/P2867R2>`__","Remove Deprecated ``strstreams`` >From C++26","2024-03 (Tokyo)","|Complete|","19","`#105411 <https://github.com/llvm/llvm-project/issues/105411>`__",""
-"`P2869R4 <https://wg21.link/P2869R4>`__","Remove Deprecated ``shared_ptr`` Atomic Access APIs from C++26","2024-03 (Tokyo)","","","`#105412 <https://github.com/llvm/llvm-project/issues/105412>`__",""
-"`P2872R3 <https://wg21.link/P2872R3>`__","Remove ``wstring_convert`` From C++26","2024-03 (Tokyo)","|Complete|","19","`#105413 <https://github.com/llvm/llvm-project/issues/105413>`__",""
-"`P3107R5 <https://wg21.link/P3107R5>`__","Permit an efficient implementation of ``std::print``","2024-03 (Tokyo)","","","`#105414 <https://github.com/llvm/llvm-project/issues/105414>`__",""
-"`P3142R0 <https://wg21.link/P3142R0>`__","Printing Blank Lines with ``println``","2024-03 (Tokyo)","|Complete|","19","`#105415 <https://github.com/llvm/llvm-project/issues/105415>`__","Implemented as a DR against C++23."
-"`P2845R8 <https://wg21.link/P2845R8>`__","Formatting of ``std::filesystem::path``","2024-03 (Tokyo)","","","`#105416 <https://github.com/llvm/llvm-project/issues/105416>`__",""
-"`P0493R5 <https://wg21.link/P0493R5>`__","Atomic minimum/maximum","2024-03 (Tokyo)","|Complete|","24","`#105418 <https://github.com/llvm/llvm-project/issues/105418>`__",""
-"`P2542R8 <https://wg21.link/P2542R8>`__","``views::concat``","2024-03 (Tokyo)","|Complete|","23","`#105419 <https://github.com/llvm/llvm-project/issues/105419>`__",""
-"`P2591R5 <https://wg21.link/P2591R5>`__","Concatenation of strings and string views","2024-03 (Tokyo)","|Complete|","19","`#105420 <https://github.com/llvm/llvm-project/issues/105420>`__",""
-"`P2248R8 <https://wg21.link/P2248R8>`__","Enabling list-initialization for algorithms","2024-03 (Tokyo)","","","`#105421 <https://github.com/llvm/llvm-project/issues/105421>`__",""
-"`P2810R4 <https://wg21.link/P2810R4>`__","``is_debugger_present`` ``is_replaceable``","2024-03 (Tokyo)","","","`#105422 <https://github.com/llvm/llvm-project/issues/105422>`__",""
-"`P1068R11 <https://wg21.link/P1068R11>`__","Vector API for random number generation","2024-03 (Tokyo)","","","`#105423 <https://github.com/llvm/llvm-project/issues/105423>`__",""
-"`P2944R3 <https://wg21.link/P2944R3>`__","Comparisons for ``reference_wrapper``","2024-03 (Tokyo)","|Complete|","22","`#105424 <https://github.com/llvm/llvm-project/issues/105424>`__","The changes to ``tuple``'s equality overload from P2165R4 are not yet implemented."
-"`P2642R6 <https://wg21.link/P2642R6>`__","Padded ``mdspan`` layouts","2024-03 (Tokyo)","","","`#105425 <https://github.com/llvm/llvm-project/issues/105425>`__",""
-"`P3029R1 <https://wg21.link/P3029R1>`__","Better ``mdspan``'s CTAD","2024-03 (Tokyo)","|Complete|","19","`#105426 <https://github.com/llvm/llvm-project/issues/105426>`__","Implemented as a DR against C++20 since LLVM 23."
+"[P2875R4](https://wg21.link/P2875R4)","Undeprecate `polymorphic_allocator::destroy` for C++26","2024-03 (Tokyo)","{{Complete}}","15","[#105410](https://github.com/llvm/llvm-project/issues/105410)",""
+"[P2867R2](https://wg21.link/P2867R2)","Remove Deprecated `strstreams` From C++26","2024-03 (Tokyo)","{{Complete}}","19","[#105411](https://github.com/llvm/llvm-project/issues/105411)",""
+"[P2869R4](https://wg21.link/P2869R4)","Remove Deprecated `shared_ptr` Atomic Access APIs from C++26","2024-03 (Tokyo)","","","[#105412](https://github.com/llvm/llvm-project/issues/105412)",""
+"[P2872R3](https://wg21.link/P2872R3)","Remove `wstring_convert` From C++26","2024-03 (Tokyo)","{{Complete}}","19","[#105413](https://github.com/llvm/llvm-project/issues/105413)",""
+"[P3107R5](https://wg21.link/P3107R5)","Permit an efficient implementation of `std::print`","2024-03 (Tokyo)","","","[#105414](https://github.com/llvm/llvm-project/issues/105414)",""
+"[P3142R0](https://wg21.link/P3142R0)","Printing Blank Lines with `println`","2024-03 (Tokyo)","{{Complete}}","19","[#105415](https://github.com/llvm/llvm-project/issues/105415)","Implemented as a DR against C++23."
+"[P2845R8](https://wg21.link/P2845R8)","Formatting of `std::filesystem::path`","2024-03 (Tokyo)","","","[#105416](https://github.com/llvm/llvm-project/issues/105416)",""
+"[P0493R5](https://wg21.link/P0493R5)","Atomic minimum/maximum","2024-03 (Tokyo)","{{Complete}}","24","[#105418](https://github.com/llvm/llvm-project/issues/105418)",""
+"[P2542R8](https://wg21.link/P2542R8)","`views::concat`","2024-03 (Tokyo)","{{Complete}}","23","[#105419](https://github.com/llvm/llvm-project/issues/105419)",""
+"[P2591R5](https://wg21.link/P2591R5)","Concatenation of strings and string views","2024-03 (Tokyo)","{{Complete}}","19","[#105420](https://github.com/llvm/llvm-project/issues/105420)",""
+"[P2248R8](https://wg21.link/P2248R8)","Enabling list-initialization for algorithms","2024-03 (Tokyo)","","","[#105421](https://github.com/llvm/llvm-project/issues/105421)",""
+"[P2810R4](https://wg21.link/P2810R4)","`is_debugger_present` `is_replaceable`","2024-03 (Tokyo)","","","[#105422](https://github.com/llvm/llvm-project/issues/105422)",""
+"[P1068R11](https://wg21.link/P1068R11)","Vector API for random number generation","2024-03 (Tokyo)","","","[#105423](https://github.com/llvm/llvm-project/issues/105423)",""
+"[P2944R3](https://wg21.link/P2944R3)","Comparisons for `reference_wrapper`","2024-03 (Tokyo)","{{Complete}}","22","[#105424](https://github.com/llvm/llvm-project/issues/105424)","The changes to `tuple`'s equality overload from P2165R4 are not yet implemented."
+"[P2642R6](https://wg21.link/P2642R6)","Padded `mdspan` layouts","2024-03 (Tokyo)","","","[#105425](https://github.com/llvm/llvm-project/issues/105425)",""
+"[P3029R1](https://wg21.link/P3029R1)","Better `mdspan`'s CTAD","2024-03 (Tokyo)","{{Complete}}","19","[#105426](https://github.com/llvm/llvm-project/issues/105426)","Implemented as a DR against C++20 since LLVM 23."
"","","","","","",""
-"`P2747R2 <https://wg21.link/P2747R2>`__","``constexpr`` placement new","2024-06 (St. Louis)","|Complete|","20","`#105427 <https://github.com/llvm/llvm-project/issues/105427>`__",""
-"`P2997R1 <https://wg21.link/P2997R1>`__","Removing the common reference requirement from the indirectly invocable concepts","2024-06 (St. Louis)","|Complete|","19","`#105428 <https://github.com/llvm/llvm-project/issues/105428>`__","Implemented as a DR against C++20."
-"`P2389R2 <https://wg21.link/P2389R2>`__","``dextents`` Index Type Parameter","2024-06 (St. Louis)","|Complete|","19","`#105429 <https://github.com/llvm/llvm-project/issues/105429>`__",""
-"`P3168R2 <https://wg21.link/P3168R2>`__","Give ``std::optional`` Range Support","2024-06 (St. Louis)","|Complete|","22","`#105430 <https://github.com/llvm/llvm-project/issues/105430>`__",""
-"`P3217R0 <https://wg21.link/P3217R0>`__","Adjoints to 'Enabling list-initialization for algorithms': find_last","2024-06 (St. Louis)","","","`#105431 <https://github.com/llvm/llvm-project/issues/105431>`__",""
-"`P2985R0 <https://wg21.link/P2985R0>`__","A type trait for detecting virtual base classes","2024-06 (St. Louis)","|Complete|","20","`#105432 <https://github.com/llvm/llvm-project/issues/105432>`__",""
-"`P0843R14 <https://wg21.link/P0843R14>`__","``inplace_vector``","2024-06 (St. Louis)","","","`#105433 <https://github.com/llvm/llvm-project/issues/105433>`__",""
-"`P3235R3 <https://wg21.link/P3235R3>`__","``std::print`` more types faster with less memory","2024-06 (St. Louis)","","","`#105435 <https://github.com/llvm/llvm-project/issues/105435>`__",""
-"`P2968R2 <https://wg21.link/P2968R2>`__","Make ``std::ignore`` a first-class object","2024-06 (St. Louis)","|Complete|","19","`#105436 <https://github.com/llvm/llvm-project/issues/105436>`__",""
-"`P2075R6 <https://wg21.link/P2075R6>`__","Philox as an extension of the C++ RNG engines","2024-06 (St. Louis)","","","`#105437 <https://github.com/llvm/llvm-project/issues/105437>`__",""
-"`P2422R1 <https://wg21.link/P2422R1>`__","Remove ``nodiscard`` annotations from the standard library specification","2024-06 (St. Louis)","|Complete|","19","`#105438 <https://github.com/llvm/llvm-project/issues/105438>`__","``nodiscard`` attributes were kept as a conforming extension"
-"`P2300R10 <https://wg21.link/P2300R10>`__","``std::execution``","2024-06 (St. Louis)","","","`#105440 <https://github.com/llvm/llvm-project/issues/105440>`__",""
+"[P2747R2](https://wg21.link/P2747R2)","`constexpr` placement new","2024-06 (St. Louis)","{{Complete}}","20","[#105427](https://github.com/llvm/llvm-project/issues/105427)",""
+"[P2997R1](https://wg21.link/P2997R1)","Removing the common reference requirement from the indirectly invocable concepts","2024-06 (St. Louis)","{{Complete}}","19","[#105428](https://github.com/llvm/llvm-project/issues/105428)","Implemented as a DR against C++20."
+"[P2389R2](https://wg21.link/P2389R2)","`dextents` Index Type Parameter","2024-06 (St. Louis)","{{Complete}}","19","[#105429](https://github.com/llvm/llvm-project/issues/105429)",""
+"[P3168R2](https://wg21.link/P3168R2)","Give `std::optional` Range Support","2024-06 (St. Louis)","{{Complete}}","22","[#105430](https://github.com/llvm/llvm-project/issues/105430)",""
+"[P3217R0](https://wg21.link/P3217R0)","Adjoints to 'Enabling list-initialization for algorithms': find_last","2024-06 (St. Louis)","","","[#105431](https://github.com/llvm/llvm-project/issues/105431)",""
+"[P2985R0](https://wg21.link/P2985R0)","A type trait for detecting virtual base classes","2024-06 (St. Louis)","{{Complete}}","20","[#105432](https://github.com/llvm/llvm-project/issues/105432)",""
+"[P0843R14](https://wg21.link/P0843R14)","`inplace_vector`","2024-06 (St. Louis)","","","[#105433](https://github.com/llvm/llvm-project/issues/105433)",""
+"[P3235R3](https://wg21.link/P3235R3)","`std::print` more types faster with less memory","2024-06 (St. Louis)","","","[#105435](https://github.com/llvm/llvm-project/issues/105435)",""
+"[P2968R2](https://wg21.link/P2968R2)","Make `std::ignore` a first-class object","2024-06 (St. Louis)","{{Complete}}","19","[#105436](https://github.com/llvm/llvm-project/issues/105436)",""
+"[P2075R6](https://wg21.link/P2075R6)","Philox as an extension of the C++ RNG engines","2024-06 (St. Louis)","","","[#105437](https://github.com/llvm/llvm-project/issues/105437)",""
+"[P2422R1](https://wg21.link/P2422R1)","Remove `nodiscard` annotations from the standard library specification","2024-06 (St. Louis)","{{Complete}}","19","[#105438](https://github.com/llvm/llvm-project/issues/105438)","`nodiscard` attributes were kept as a conforming extension"
+"[P2300R10](https://wg21.link/P2300R10)","`std::execution`","2024-06 (St. Louis)","","","[#105440](https://github.com/llvm/llvm-project/issues/105440)",""
"","","","","","",""
-"`P3136R1 <https://wg21.link/P3136R1>`__","Retiring niebloids","2024-11 (Wrocław)","|Complete|","14","`#118133 <https://github.com/llvm/llvm-project/issues/118133>`__",""
-"`P3138R5 <https://wg21.link/P3138R5>`__","``views::cache_latest``","2024-11 (Wrocław)","","","`#118134 <https://github.com/llvm/llvm-project/issues/118134>`__",""
-"`P3379R0 <https://wg21.link/P3379R0>`__","Constrain ``std::expected`` equality operators","2024-11 (Wrocław)","|Complete|","21","`#118135 <https://github.com/llvm/llvm-project/issues/118135>`__",""
-"`P2862R1 <https://wg21.link/P2862R1>`__","``text_encoding::name()`` should never return null values","2024-11 (Wrocław)","|Complete|","23","`#118371 <https://github.com/llvm/llvm-project/issues/118371>`__",""
-"`P2897R7 <https://wg21.link/P2897R7>`__","``aligned_accessor``: An ``mdspan`` accessor expressing pointer over-alignment","2024-11 (Wrocław)","|Complete|","21","`#118372 <https://github.com/llvm/llvm-project/issues/118372>`__",""
-"`P3355R2 <https://wg21.link/P3355R2>`__","Fix ``submdspan`` for C++26","2024-11 (Wrocław)","","","`#118373 <https://github.com/llvm/llvm-project/issues/118373>`__",""
-"`P3222R0 <https://wg21.link/P3222R0>`__","Fix C++26 by adding transposed special cases for P2642 layouts","2024-11 (Wrocław)","","","`#118374 <https://github.com/llvm/llvm-project/issues/118374>`__",""
-"`P3050R2 <https://wg21.link/P3050R2>`__","Fix C++26 by optimizing ``linalg::conjugated`` for noncomplex value types","2024-11 (Wrocław)","","","`#118375 <https://github.com/llvm/llvm-project/issues/118375>`__",""
-"`P3396R1 <https://wg21.link/P3396R1>`__","``std::execution`` wording fixes","2024-11 (Wrocław)","","","`#118376 <https://github.com/llvm/llvm-project/issues/118376>`__",""
-"`P2835R7 <https://wg21.link/P2835R7>`__","Expose ``std::atomic_ref``'s object address","2024-11 (Wrocław)","|Complete|","22","`#118377 <https://github.com/llvm/llvm-project/issues/118377>`__",""
-"`P3323R1 <https://wg21.link/P3323R1>`__","cv-qualified types in ``atomic`` and ``atomic_ref``","2024-11 (Wrocław)","","","`#118378 <https://github.com/llvm/llvm-project/issues/118378>`__",""
-"`P3508R0 <https://wg21.link/P3508R0>`__","Wording for ""constexpr for specialized memory algorithms""","2024-11 (Wrocław)","|Complete|","23","`#118379 <https://github.com/llvm/llvm-project/issues/118379>`__",""
-"`P3369R0 <https://wg21.link/P3369R0>`__","constexpr for ``uninitialized_default_construct``","2024-11 (Wrocław)","|Complete|","23","`#118380 <https://github.com/llvm/llvm-project/issues/118380>`__",""
-"`P3370R1 <https://wg21.link/P3370R1>`__","Add new library headers from C23","2024-11 (Wrocław)","","","`#118381 <https://github.com/llvm/llvm-project/issues/118381>`__",""
-"`P3309R3 <https://wg21.link/P3309R3>`__","constexpr ``atomic`` and ``atomic_ref``","2024-11 (Wrocław)","","","`#118382 <https://github.com/llvm/llvm-project/issues/118382>`__",""
-"`P1928R15 <https://wg21.link/P1928R15>`__","``std::simd`` — merge data-parallel types from the Parallelism TS 2","2024-11 (Wrocław)","","","`#118384 <https://github.com/llvm/llvm-project/issues/118384>`__",""
-"`P3325R5 <https://wg21.link/P3325R5>`__","A Utility for Creating Execution Environments","2024-11 (Wrocław)","","","`#118385 <https://github.com/llvm/llvm-project/issues/118385>`__",""
-"`P3068R6 <https://wg21.link/P3068R6>`__","Allowing exception throwing in constant-evaluation","2024-11 (Wrocław)","","","`#118386 <https://github.com/llvm/llvm-project/issues/118386>`__",""
-"`P3247R2 <https://wg21.link/P3247R2>`__","Deprecate the notion of trivial types","2024-11 (Wrocław)","|Complete|","21","`#118387 <https://github.com/llvm/llvm-project/issues/118387>`__",""
+"[P3136R1](https://wg21.link/P3136R1)","Retiring niebloids","2024-11 (Wrocław)","{{Complete}}","14","[#118133](https://github.com/llvm/llvm-project/issues/118133)",""
+"[P3138R5](https://wg21.link/P3138R5)","`views::cache_latest`","2024-11 (Wrocław)","","","[#118134](https://github.com/llvm/llvm-project/issues/118134)",""
+"[P3379R0](https://wg21.link/P3379R0)","Constrain `std::expected` equality operators","2024-11 (Wrocław)","{{Complete}}","21","[#118135](https://github.com/llvm/llvm-project/issues/118135)",""
+"[P2862R1](https://wg21.link/P2862R1)","`text_encoding::name()` should never return null values","2024-11 (Wrocław)","{{Complete}}","23","[#118371](https://github.com/llvm/llvm-project/issues/118371)",""
+"[P2897R7](https://wg21.link/P2897R7)","`aligned_accessor`: An `mdspan` accessor expressing pointer over-alignment","2024-11 (Wrocław)","{{Complete}}","21","[#118372](https://github.com/llvm/llvm-project/issues/118372)",""
+"[P3355R2](https://wg21.link/P3355R2)","Fix `submdspan` for C++26","2024-11 (Wrocław)","","","[#118373](https://github.com/llvm/llvm-project/issues/118373)",""
+"[P3222R0](https://wg21.link/P3222R0)","Fix C++26 by adding transposed special cases for P2642 layouts","2024-11 (Wrocław)","","","[#118374](https://github.com/llvm/llvm-project/issues/118374)",""
+"[P3050R2](https://wg21.link/P3050R2)","Fix C++26 by optimizing `linalg::conjugated` for noncomplex value types","2024-11 (Wrocław)","","","[#118375](https://github.com/llvm/llvm-project/issues/118375)",""
+"[P3396R1](https://wg21.link/P3396R1)","`std::execution` wording fixes","2024-11 (Wrocław)","","","[#118376](https://github.com/llvm/llvm-project/issues/118376)",""
+"[P2835R7](https://wg21.link/P2835R7)","Expose `std::atomic_ref`'s object address","2024-11 (Wrocław)","{{Complete}}","22","[#118377](https://github.com/llvm/llvm-project/issues/118377)",""
+"[P3323R1](https://wg21.link/P3323R1)","cv-qualified types in `atomic` and `atomic_ref`","2024-11 (Wrocław)","","","[#118378](https://github.com/llvm/llvm-project/issues/118378)",""
+"[P3508R0](https://wg21.link/P3508R0)","Wording for ""constexpr for specialized memory algorithms""","2024-11 (Wrocław)","{{Complete}}","23","[#118379](https://github.com/llvm/llvm-project/issues/118379)",""
+"[P3369R0](https://wg21.link/P3369R0)","constexpr for `uninitialized_default_construct`","2024-11 (Wrocław)","{{Complete}}","23","[#118380](https://github.com/llvm/llvm-project/issues/118380)",""
+"[P3370R1](https://wg21.link/P3370R1)","Add new library headers from C23","2024-11 (Wrocław)","","","[#118381](https://github.com/llvm/llvm-project/issues/118381)",""
+"[P3309R3](https://wg21.link/P3309R3)","constexpr `atomic` and `atomic_ref`","2024-11 (Wrocław)","","","[#118382](https://github.com/llvm/llvm-project/issues/118382)",""
+"[P1928R15](https://wg21.link/P1928R15)","`std::simd` — merge data-parallel types from the Parallelism TS 2","2024-11 (Wrocław)","","","[#118384](https://github.com/llvm/llvm-project/issues/118384)",""
+"[P3325R5](https://wg21.link/P3325R5)","A Utility for Creating Execution Environments","2024-11 (Wrocław)","","","[#118385](https://github.com/llvm/llvm-project/issues/118385)",""
+"[P3068R6](https://wg21.link/P3068R6)","Allowing exception throwing in constant-evaluation","2024-11 (Wrocław)","","","[#118386](https://github.com/llvm/llvm-project/issues/118386)",""
+"[P3247R2](https://wg21.link/P3247R2)","Deprecate the notion of trivial types","2024-11 (Wrocław)","{{Complete}}","21","[#118387](https://github.com/llvm/llvm-project/issues/118387)",""
"","","","","","",""
-"`P3074R7 <https://wg21.link/P3074R7>`__","trivial unions (was ``std::uninitialized``)","2025-02 (Hagenberg)","","","`#127868 <https://github.com/llvm/llvm-project/issues/127868>`__",""
-"`P1494R5 <https://wg21.link/P1494R5>`__","Partial program correctness","2025-02 (Hagenberg)","","","`#127869 <https://github.com/llvm/llvm-project/issues/127869>`__",""
-"`P2900R14 <https://wg21.link/P2900R14>`__","Contracts for C++","2025-02 (Hagenberg)","","","`#127870 <https://github.com/llvm/llvm-project/issues/127870>`__",""
-"`P3475R2 <https://wg21.link/P3475R2>`__","Defang and deprecate ``memory_order::consume``","2025-02 (Hagenberg)","","","`#127871 <https://github.com/llvm/llvm-project/issues/127871>`__",""
-"`P2786R13 <https://wg21.link/P2786R13>`__","Trivial Relocatability For C++26","2025-02 (Hagenberg)","|Nothing To Do|","","`#127872 <https://github.com/llvm/llvm-project/issues/127872>`__","Reverted by `P3920R0 <https://wg21.link/P3920R0>`__"
-"`P3137R3 <https://wg21.link/P3137R3>`__","``views::to_input``","2025-02 (Hagenberg)","","","`#127873 <https://github.com/llvm/llvm-project/issues/127873>`__",""
-"`P0472R3 <https://wg21.link/P0472R3>`__","Put ``std::monostate`` in ``<utility>``","2025-02 (Hagenberg)","|Complete|","21","`#127874 <https://github.com/llvm/llvm-project/issues/127874>`__",""
-"`P3349R1 <https://wg21.link/P3349R1>`__","Converting contiguous iterators to pointers","2025-02 (Hagenberg)","","","`#127875 <https://github.com/llvm/llvm-project/issues/127875>`__",""
-"`P3372R3 <https://wg21.link/P3372R3>`__","constexpr containers and adaptors","2025-02 (Hagenberg)","|In Progress|","","`#127876 <https://github.com/llvm/llvm-project/issues/127876>`__",""
-"`P3378R2 <https://wg21.link/P3378R2>`__","constexpr exception types","2025-02 (Hagenberg)","","","`#127877 <https://github.com/llvm/llvm-project/issues/127877>`__",""
-"`P3441R2 <https://wg21.link/P3441R2>`__","Rename ``simd_split`` to ``simd_chunk``","2025-02 (Hagenberg)","","","`#127878 <https://github.com/llvm/llvm-project/issues/127878>`__",""
-"`P3287R3 <https://wg21.link/P3287R3>`__","Exploration of namespaces for ``std::simd``","2025-02 (Hagenberg)","","","`#127879 <https://github.com/llvm/llvm-project/issues/127879>`__",""
-"`P2976R1 <https://wg21.link/P2976R1>`__","Freestanding Library: ``algorithm``, ``numeric``, and ``random``","2025-02 (Hagenberg)","","","`#127880 <https://github.com/llvm/llvm-project/issues/127880>`__",""
-"`P3430R3 <https://wg21.link/P3430R3>`__","simd issues: explicit, unsequenced, identity-element position, and members of disabled simd","2025-02 (Hagenberg)","","","`#127881 <https://github.com/llvm/llvm-project/issues/127881>`__",""
-"`P2663R7 <https://wg21.link/P2663R7>`__","Interleaved complex values support in ``std::simd``","2025-02 (Hagenberg)","","","`#127882 <https://github.com/llvm/llvm-project/issues/127882>`__",""
-"`P2933R4 <https://wg21.link/P2933R4>`__","Extend ``<bit>`` header function with overloads for ``std::simd``","2025-02 (Hagenberg)","","","`#127883 <https://github.com/llvm/llvm-project/issues/127883>`__",""
-"`P2846R6 <https://wg21.link/P2846R6>`__","``reserve_hint``: Eagerly reserving memory for not-quite-sized lazy ranges","2025-02 (Hagenberg)","","","`#127884 <https://github.com/llvm/llvm-project/issues/127884>`__",""
-"`P3471R4 <https://wg21.link/P3471R4>`__","Standard Library Hardening","2025-02 (Hagenberg)","","","`#127885 <https://github.com/llvm/llvm-project/issues/127885>`__",""
-"`P0447R28 <https://wg21.link/P0447R28>`__","Introduction of ``std::hive`` to the standard library","2025-02 (Hagenberg)","","","`#127886 <https://github.com/llvm/llvm-project/issues/127886>`__",""
-"`P3019R14 <https://wg21.link/P3019R14>`__","``indirect`` and ``polymorphic``: Vocabulary Types for Composite Class Design","2025-02 (Hagenberg)","","","`#127887 <https://github.com/llvm/llvm-project/issues/127887>`__",""
+"[P3074R7](https://wg21.link/P3074R7)","trivial unions (was `std::uninitialized`)","2025-02 (Hagenberg)","","","[#127868](https://github.com/llvm/llvm-project/issues/127868)",""
+"[P1494R5](https://wg21.link/P1494R5)","Partial program correctness","2025-02 (Hagenberg)","","","[#127869](https://github.com/llvm/llvm-project/issues/127869)",""
+"[P2900R14](https://wg21.link/P2900R14)","Contracts for C++","2025-02 (Hagenberg)","","","[#127870](https://github.com/llvm/llvm-project/issues/127870)",""
+"[P3475R2](https://wg21.link/P3475R2)","Defang and deprecate `memory_order::consume`","2025-02 (Hagenberg)","","","[#127871](https://github.com/llvm/llvm-project/issues/127871)",""
+"[P2786R13](https://wg21.link/P2786R13)","Trivial Relocatability For C++26","2025-02 (Hagenberg)","{{NothingToDo}}","","[#127872](https://github.com/llvm/llvm-project/issues/127872)","Reverted by [P3920R0](https://wg21.link/P3920R0)"
+"[P3137R3](https://wg21.link/P3137R3)","`views::to_input`","2025-02 (Hagenberg)","","","[#127873](https://github.com/llvm/llvm-project/issues/127873)",""
+"[P0472R3](https://wg21.link/P0472R3)","Put `std::monostate` in `<utility>`","2025-02 (Hagenberg)","{{Complete}}","21","[#127874](https://github.com/llvm/llvm-project/issues/127874)",""
+"[P3349R1](https://wg21.link/P3349R1)","Converting contiguous iterators to pointers","2025-02 (Hagenberg)","","","[#127875](https://github.com/llvm/llvm-project/issues/127875)",""
+"[P3372R3](https://wg21.link/P3372R3)","constexpr containers and adaptors","2025-02 (Hagenberg)","{{InProgress}}","","[#127876](https://github.com/llvm/llvm-project/issues/127876)",""
+"[P3378R2](https://wg21.link/P3378R2)","constexpr exception types","2025-02 (Hagenberg)","","","[#127877](https://github.com/llvm/llvm-project/issues/127877)",""
+"[P3441R2](https://wg21.link/P3441R2)","Rename `simd_split` to `simd_chunk`","2025-02 (Hagenberg)","","","[#127878](https://github.com/llvm/llvm-project/issues/127878)",""
+"[P3287R3](https://wg21.link/P3287R3)","Exploration of namespaces for `std::simd`","2025-02 (Hagenberg)","","","[#127879](https://github.com/llvm/llvm-project/issues/127879)",""
+"[P2976R1](https://wg21.link/P2976R1)","Freestanding Library: `algorithm`, `numeric`, and `random`","2025-02 (Hagenberg)","","","[#127880](https://github.com/llvm/llvm-project/issues/127880)",""
+"[P3430R3](https://wg21.link/P3430R3)","simd issues: explicit, unsequenced, identity-element position, and members of disabled simd","2025-02 (Hagenberg)","","","[#127881](https://github.com/llvm/llvm-project/issues/127881)",""
+"[P2663R7](https://wg21.link/P2663R7)","Interleaved complex values support in `std::simd`","2025-02 (Hagenberg)","","","[#127882](https://github.com/llvm/llvm-project/issues/127882)",""
+"[P2933R4](https://wg21.link/P2933R4)","Extend `<bit>` header function with overloads for `std::simd`","2025-02 (Hagenberg)","","","[#127883](https://github.com/llvm/llvm-project/issues/127883)",""
+"[P2846R6](https://wg21.link/P2846R6)","`reserve_hint`: Eagerly reserving memory for not-quite-sized lazy ranges","2025-02 (Hagenberg)","","","[#127884](https://github.com/llvm/llvm-project/issues/127884)",""
+"[P3471R4](https://wg21.link/P3471R4)","Standard Library Hardening","2025-02 (Hagenberg)","","","[#127885](https://github.com/llvm/llvm-project/issues/127885)",""
+"[P0447R28](https://wg21.link/P0447R28)","Introduction of `std::hive` to the standard library","2025-02 (Hagenberg)","","","[#127886](https://github.com/llvm/llvm-project/issues/127886)",""
+"[P3019R14](https://wg21.link/P3019R14)","`indirect` and `polymorphic`: Vocabulary Types for Composite Class Design","2025-02 (Hagenberg)","","","[#127887](https://github.com/llvm/llvm-project/issues/127887)",""
"","","","","","",""
-"`P2996R13 <https://wg21.link/P2996R13>`__","Reflection for C++26","2025-06 (Sofia)","","","`#148123 <https://github.com/llvm/llvm-project/issues/148123>`__",""
-"`P3394R4 <https://wg21.link/P3394R4>`__","Annotations for Reflection","2025-06 (Sofia)","","","`#148124 <https://github.com/llvm/llvm-project/issues/148124>`__",""
-"`P3293R3 <https://wg21.link/P3293R3>`__","Splicing a base class subobject","2025-06 (Sofia)","","","`#148125 <https://github.com/llvm/llvm-project/issues/148125>`__",""
-"`P3491R3 <https://wg21.link/P3491R3>`__","``define_static_{string,object,array}``","2025-06 (Sofia)","","","`#148126 <https://github.com/llvm/llvm-project/issues/148126>`__",""
-"`P3096R12 <https://wg21.link/P3096R12>`__","Function Parameter Reflection in Reflection for C++26","2025-06 (Sofia)","","","`#148127 <https://github.com/llvm/llvm-project/issues/148127>`__",""
-"`P2988R12 <https://wg21.link/P2988R12>`__","``std::optional<T&>``","2025-06 (Sofia)","|Complete|","22","`#148131 <https://github.com/llvm/llvm-project/issues/148131>`__",""
-"`P3348R4 <https://wg21.link/P3348R4>`__","C++26 should refer to C23 not C17","2025-06 (Sofia)","","","`#148133 <https://github.com/llvm/llvm-project/issues/148133>`__",""
-"`P3037R6 <https://wg21.link/P3037R6>`__","``constexpr`` ``std::shared_ptr`` and friends","2025-06 (Sofia)","","","`#148135 <https://github.com/llvm/llvm-project/issues/148135>`__","``owner_before`` and ``owner_less`` must remain non-``constexpr`` per LWG4557."
-"`P3284R4 <https://wg21.link/P3284R4>`__","``write_env`` and ``unstoppable`` Sender Adaptors","2025-06 (Sofia)","","","`#148136 <https://github.com/llvm/llvm-project/issues/148136>`__",""
-"`P3179R9 <https://wg21.link/P3179R9>`__","Parallel Range Algorithms","2025-06 (Sofia)","","","`#148137 <https://github.com/llvm/llvm-project/issues/148137>`__",""
-"`P3709R2 <https://wg21.link/P3709R2>`__","Reconsider parallel ``ranges::rotate_copy`` and ``ranges::reverse_copy``","2025-06 (Sofia)","","","`#148138 <https://github.com/llvm/llvm-project/issues/148138>`__",""
-"`P3641R0 <https://wg21.link/P3641R0>`__","Rename ``std::observable`` to ``std::observable_checkpoint``, and add a feature-test macro","2025-06 (Sofia)","","","`#148139 <https://github.com/llvm/llvm-project/issues/148139>`__",""
-"`P3044R2 <https://wg21.link/P3044R2>`__","sub-``string_view`` from ``string``","2025-06 (Sofia)","|Complete|","22","`#148140 <https://github.com/llvm/llvm-project/issues/148140>`__",""
-"`P2876R3 <https://wg21.link/P2876R3>`__","Proposal to extend ``std::simd`` with more constructors and accessors","2025-06 (Sofia)","","","`#148143 <https://github.com/llvm/llvm-project/issues/148143>`__",""
-"`P3480R6 <https://wg21.link/P3480R6>`__","``std::simd`` is a range","2025-06 (Sofia)","","","`#148144 <https://github.com/llvm/llvm-project/issues/148144>`__",""
-"`P2664R11 <https://wg21.link/P2664R11>`__","Extend ``std::simd`` with permutation API","2025-06 (Sofia)","","","`#148145 <https://github.com/llvm/llvm-project/issues/148145>`__",""
-"`P3691R1 <https://wg21.link/P3691R1>`__","Reconsider naming of the namespace for ``std::simd``","2025-06 (Sofia)","","","`#148148 <https://github.com/llvm/llvm-project/issues/148148>`__",""
-"`P3383R3 <https://wg21.link/P3383R3>`__","``mdspan.at()``","2025-06 (Sofia)","|Complete|","23","`#148149 <https://github.com/llvm/llvm-project/issues/148149>`__",""
-"`P2927R3 <https://wg21.link/P2927R3>`__","Inspecting ``exception_ptr``","2025-06 (Sofia)","","","`#148150 <https://github.com/llvm/llvm-project/issues/148150>`__",""
-"`P3748R0 <https://wg21.link/P3748R0>`__","Inspecting ``exception_ptr`` should be constexpr","2025-06 (Sofia)","","","`#148151 <https://github.com/llvm/llvm-project/issues/148151>`__",""
-"`P2830R10 <https://wg21.link/P2830R10>`__","Standardized Constexpr Type Ordering","2025-06 (Sofia)","|Complete|","24","`#148152 <https://github.com/llvm/llvm-project/issues/148152>`__",""
-"`P3570R2 <https://wg21.link/P3570R2>`__","optional variants in sender/receiver","2025-06 (Sofia)","","","`#148153 <https://github.com/llvm/llvm-project/issues/148153>`__",""
-"`P3481R5 <https://wg21.link/P3481R5>`__","``std::execution::bulk()`` issues","2025-06 (Sofia)","","","`#148155 <https://github.com/llvm/llvm-project/issues/148155>`__",""
-"`P3433R1 <https://wg21.link/P3433R1>`__","Allocator Support for Operation States","2025-06 (Sofia)","","","`#148157 <https://github.com/llvm/llvm-project/issues/148157>`__",""
-"`P3149R11 <https://wg21.link/P3149R11>`__","``async_scope`` - Creating scopes for non-sequential concurrency","2025-06 (Sofia)","","","`#148158 <https://github.com/llvm/llvm-project/issues/148158>`__",""
-"`P3682R0 <https://wg21.link/P3682R0>`__","Remove ``std::execution::split``","2025-06 (Sofia)","","","`#148160 <https://github.com/llvm/llvm-project/issues/148160>`__",""
-"`P2079R10 <https://wg21.link/P2079R10>`__","Parallel scheduler","2025-06 (Sofia)","","","`#148161 <https://github.com/llvm/llvm-project/issues/148161>`__",""
-"`P3557R3 <https://wg21.link/P3557R3>`__","High-Quality Sender Diagnostics with Constexpr Exceptions","2025-06 (Sofia)","","","`#148162 <https://github.com/llvm/llvm-project/issues/148162>`__",""
-"`P3560R2 <https://wg21.link/P3560R2>`__","Error Handling in Reflection","2025-06 (Sofia)","","","`#148128 <https://github.com/llvm/llvm-project/issues/148128>`__",""
-"`P3503R3 <https://wg21.link/P3503R3>`__","Make type-erased allocator use in ``promise`` and ``packaged_task`` consistent","2025-06 (Sofia)","","","`#148164 <https://github.com/llvm/llvm-project/issues/148164>`__",""
-"`P3008R6 <https://wg21.link/P3008R6>`__","Atomic floating-point min/max","2025-06 (Sofia)","","","`#148168 <https://github.com/llvm/llvm-project/issues/148168>`__",""
-"`P3111R8 <https://wg21.link/P3111R8>`__","Atomic Reduction Operations","2025-06 (Sofia)","","","`#148174 <https://github.com/llvm/llvm-project/issues/148174>`__",""
-"`P3060R3 <https://wg21.link/P3060R3>`__","Add ``std::views::indices(n)``","2025-06 (Sofia)","|Complete|","22","`#148175 <https://github.com/llvm/llvm-project/issues/148175>`__",""
-"`P2319R5 <https://wg21.link/P2319R5>`__","Prevent ``path`` presentation problems","2025-06 (Sofia)","","","`#148177 <https://github.com/llvm/llvm-project/issues/148177>`__",""
-"`P3223R2 <https://wg21.link/P3223R2>`__","Making ``std::istream::ignore`` less surprising","2025-06 (Sofia)","|Complete|","22","`#148178 <https://github.com/llvm/llvm-project/issues/148178>`__",""
-"`P2781R9 <https://wg21.link/P2781R9>`__","``std::constant_wrapper``","2025-06 (Sofia)","|Complete|","23","`#148179 <https://github.com/llvm/llvm-project/issues/148179>`__",""
-"`P3697R1 <https://wg21.link/P3697R1>`__","Minor additions to C++26 standard library hardening","2025-06 (Sofia)","","","`#148180 <https://github.com/llvm/llvm-project/issues/148180>`__",""
-"`P3552R3 <https://wg21.link/P3552R3>`__","Add a Coroutine Task Type","2025-06 (Sofia)","","","`#148182 <https://github.com/llvm/llvm-project/issues/148182>`__",""
-"`P1317R2 <https://wg21.link/P1317R2>`__","Remove return type deduction in ``std::apply``","2025-06 (Sofia)","","","`#148183 <https://github.com/llvm/llvm-project/issues/148183>`__",""
+"[P2996R13](https://wg21.link/P2996R13)","Reflection for C++26","2025-06 (Sofia)","","","[#148123](https://github.com/llvm/llvm-project/issues/148123)",""
+"[P3394R4](https://wg21.link/P3394R4)","Annotations for Reflection","2025-06 (Sofia)","","","[#148124](https://github.com/llvm/llvm-project/issues/148124)",""
+"[P3293R3](https://wg21.link/P3293R3)","Splicing a base class subobject","2025-06 (Sofia)","","","[#148125](https://github.com/llvm/llvm-project/issues/148125)",""
+"[P3491R3](https://wg21.link/P3491R3)","`define_static_{string,object,array}`","2025-06 (Sofia)","","","[#148126](https://github.com/llvm/llvm-project/issues/148126)",""
+"[P3096R12](https://wg21.link/P3096R12)","Function Parameter Reflection in Reflection for C++26","2025-06 (Sofia)","","","[#148127](https://github.com/llvm/llvm-project/issues/148127)",""
+"[P2988R12](https://wg21.link/P2988R12)","`std::optional<T&>`","2025-06 (Sofia)","{{Complete}}","22","[#148131](https://github.com/llvm/llvm-project/issues/148131)",""
+"[P3348R4](https://wg21.link/P3348R4)","C++26 should refer to C23 not C17","2025-06 (Sofia)","","","[#148133](https://github.com/llvm/llvm-project/issues/148133)",""
+"[P3037R6](https://wg21.link/P3037R6)","`constexpr` `std::shared_ptr` and friends","2025-06 (Sofia)","","","[#148135](https://github.com/llvm/llvm-project/issues/148135)","`owner_before` and `owner_less` must remain non-`constexpr` per LWG4557."
+"[P3284R4](https://wg21.link/P3284R4)","`write_env` and `unstoppable` Sender Adaptors","2025-06 (Sofia)","","","[#148136](https://github.com/llvm/llvm-project/issues/148136)",""
+"[P3179R9](https://wg21.link/P3179R9)","Parallel Range Algorithms","2025-06 (Sofia)","","","[#148137](https://github.com/llvm/llvm-project/issues/148137)",""
+"[P3709R2](https://wg21.link/P3709R2)","Reconsider parallel `ranges::rotate_copy` and `ranges::reverse_copy`","2025-06 (Sofia)","","","[#148138](https://github.com/llvm/llvm-project/issues/148138)",""
+"[P3641R0](https://wg21.link/P3641R0)","Rename `std::observable` to `std::observable_checkpoint`, and add a feature-test macro","2025-06 (Sofia)","","","[#148139](https://github.com/llvm/llvm-project/issues/148139)",""
+"[P3044R2](https://wg21.link/P3044R2)","sub-`string_view` from `string`","2025-06 (Sofia)","{{Complete}}","22","[#148140](https://github.com/llvm/llvm-project/issues/148140)",""
+"[P2876R3](https://wg21.link/P2876R3)","Proposal to extend `std::simd` with more constructors and accessors","2025-06 (Sofia)","","","[#148143](https://github.com/llvm/llvm-project/issues/148143)",""
+"[P3480R6](https://wg21.link/P3480R6)","`std::simd` is a range","2025-06 (Sofia)","","","[#148144](https://github.com/llvm/llvm-project/issues/148144)",""
+"[P2664R11](https://wg21.link/P2664R11)","Extend `std::simd` with permutation API","2025-06 (Sofia)","","","[#148145](https://github.com/llvm/llvm-project/issues/148145)",""
+"[P3691R1](https://wg21.link/P3691R1)","Reconsider naming of the namespace for `std::simd`","2025-06 (Sofia)","","","[#148148](https://github.com/llvm/llvm-project/issues/148148)",""
+"[P3383R3](https://wg21.link/P3383R3)","`mdspan.at()`","2025-06 (Sofia)","{{Complete}}","23","[#148149](https://github.com/llvm/llvm-project/issues/148149)",""
+"[P2927R3](https://wg21.link/P2927R3)","Inspecting `exception_ptr`","2025-06 (Sofia)","","","[#148150](https://github.com/llvm/llvm-project/issues/148150)",""
+"[P3748R0](https://wg21.link/P3748R0)","Inspecting `exception_ptr` should be constexpr","2025-06 (Sofia)","","","[#148151](https://github.com/llvm/llvm-project/issues/148151)",""
+"[P2830R10](https://wg21.link/P2830R10)","Standardized Constexpr Type Ordering","2025-06 (Sofia)","{{Complete}}","24","[#148152](https://github.com/llvm/llvm-project/issues/148152)",""
+"[P3570R2](https://wg21.link/P3570R2)","optional variants in sender/receiver","2025-06 (Sofia)","","","[#148153](https://github.com/llvm/llvm-project/issues/148153)",""
+"[P3481R5](https://wg21.link/P3481R5)","`std::execution::bulk()` issues","2025-06 (Sofia)","","","[#148155](https://github.com/llvm/llvm-project/issues/148155)",""
+"[P3433R1](https://wg21.link/P3433R1)","Allocator Support for Operation States","2025-06 (Sofia)","","","[#148157](https://github.com/llvm/llvm-project/issues/148157)",""
+"[P3149R11](https://wg21.link/P3149R11)","`async_scope` - Creating scopes for non-sequential concurrency","2025-06 (Sofia)","","","[#148158](https://github.com/llvm/llvm-project/issues/148158)",""
+"[P3682R0](https://wg21.link/P3682R0)","Remove `std::execution::split`","2025-06 (Sofia)","","","[#148160](https://github.com/llvm/llvm-project/issues/148160)",""
+"[P2079R10](https://wg21.link/P2079R10)","Parallel scheduler","2025-06 (Sofia)","","","[#148161](https://github.com/llvm/llvm-project/issues/148161)",""
+"[P3557R3](https://wg21.link/P3557R3)","High-Quality Sender Diagnostics with Constexpr Exceptions","2025-06 (Sofia)","","","[#148162](https://github.com/llvm/llvm-project/issues/148162)",""
+"[P3560R2](https://wg21.link/P3560R2)","Error Handling in Reflection","2025-06 (Sofia)","","","[#148128](https://github.com/llvm/llvm-project/issues/148128)",""
+"[P3503R3](https://wg21.link/P3503R3)","Make type-erased allocator use in `promise` and `packaged_task` consistent","2025-06 (Sofia)","","","[#148164](https://github.com/llvm/llvm-project/issues/148164)",""
+"[P3008R6](https://wg21.link/P3008R6)","Atomic floating-point min/max","2025-06 (Sofia)","","","[#148168](https://github.com/llvm/llvm-project/issues/148168)",""
+"[P3111R8](https://wg21.link/P3111R8)","Atomic Reduction Operations","2025-06 (Sofia)","","","[#148174](https://github.com/llvm/llvm-project/issues/148174)",""
+"[P3060R3](https://wg21.link/P3060R3)","Add `std::views::indices(n)`","2025-06 (Sofia)","{{Complete}}","22","[#148175](https://github.com/llvm/llvm-project/issues/148175)",""
+"[P2319R5](https://wg21.link/P2319R5)","Prevent `path` presentation problems","2025-06 (Sofia)","","","[#148177](https://github.com/llvm/llvm-project/issues/148177)",""
+"[P3223R2](https://wg21.link/P3223R2)","Making `std::istream::ignore` less surprising","2025-06 (Sofia)","{{Complete}}","22","[#148178](https://github.com/llvm/llvm-project/issues/148178)",""
+"[P2781R9](https://wg21.link/P2781R9)","`std::constant_wrapper`","2025-06 (Sofia)","{{Complete}}","23","[#148179](https://github.com/llvm/llvm-project/issues/148179)",""
+"[P3697R1](https://wg21.link/P3697R1)","Minor additions to C++26 standard library hardening","2025-06 (Sofia)","","","[#148180](https://github.com/llvm/llvm-project/issues/148180)",""
+"[P3552R3](https://wg21.link/P3552R3)","Add a Coroutine Task Type","2025-06 (Sofia)","","","[#148182](https://github.com/llvm/llvm-project/issues/148182)",""
+"[P1317R2](https://wg21.link/P1317R2)","Remove return type deduction in `std::apply`","2025-06 (Sofia)","","","[#148183](https://github.com/llvm/llvm-project/issues/148183)",""
"","","","","","",""
-"`P3920R0 <https://wg21.link/P3920R0>`__","Wording for NB comment resolution on trivial relocation","2025-11 (Kona)","|Nothing To Do|","","`#171269 <https://github.com/llvm/llvm-project/issues/171269>`__",""
-"`P3016R6 <https://wg21.link/P3016R6>`__","Resolve inconsistencies in begin/end for ``valarray`` and braced initializer lists","2025-11 (Kona)","|Complete|","24","`#171271 <https://github.com/llvm/llvm-project/issues/171271>`__","Implemented as a DR against C++11. Change of ``<stacktrace>`` is blocked on `P0881R7 <https://wg21.link/P0881R7>`__."
-"`P3567R2 <https://wg21.link/P3567R2>`__","``flat_meow`` Fixes","2025-11 (Kona)","|Complete|","22","`#171272 <https://github.com/llvm/llvm-project/issues/171272>`__",""
-"`P3663R3 <https://wg21.link/P3663R3>`__","Future-proof ``submdspan_mapping``","2025-11 (Kona)","","","`#166089 <https://github.com/llvm/llvm-project/issues/166089>`__",""
-"`P3914R0 <https://wg21.link/P3914R0>`__","Assorted NB comment resolutions for Kona 2025","2025-11 (Kona)","","","`#171274 <https://github.com/llvm/llvm-project/issues/171274>`__",""
-"`P3836R2 <https://wg21.link/P3836R2>`__","Make ``optional<T&>`` trivially copyable","2025-11 (Kona)","|Complete|","22","`#171275 <https://github.com/llvm/llvm-project/issues/171275>`__",""
-"`P3860R1 <https://wg21.link/P3860R1>`__","Proposed Resolution for NB Comment GB13-309 ``atomic_ref<T>`` is not convertible to ``atomic_ref<const T>``","2025-11 (Kona)","","","`#171276 <https://github.com/llvm/llvm-project/issues/171276>`__",""
-"`P3388R3 <https://wg21.link/P3388R3>`__","When Do You Know ``connect`` Doesn’t Throw?","2025-11 (Kona)","","","`#171277 <https://github.com/llvm/llvm-project/issues/171277>`__",""
-"`P3774R1 <https://wg21.link/P3774R1>`__","Rename ``std::nontype``, and make it broadly useful","2025-11 (Kona)","","","`#171279 <https://github.com/llvm/llvm-project/issues/171279>`__",""
-"`P3819R0 <https://wg21.link/P3819R0>`__","Remove ``evaluation_exception()`` from contract-violation handling for C++26","2025-11 (Kona)","","","`#171280 <https://github.com/llvm/llvm-project/issues/171280>`__",""
-"`P3612R1 <https://wg21.link/P3612R1>`__","Harmonize proxy-reference operations (LWG 3638 and 4187)","2025-11 (Kona)","","","`#171281 <https://github.com/llvm/llvm-project/issues/171281>`__",""
-"`P3778R0 <https://wg21.link/P3778R0>`__","Fix for ``type_order`` template definition","2025-11 (Kona)","|Complete|","24","`#171284 <https://github.com/llvm/llvm-project/issues/171284>`__",""
-"`P1789R3 <https://wg21.link/P1789R3>`__","Library Support for Expansion Statements","2025-11 (Kona)","|Complete|","22","`#167268 <https://github.com/llvm/llvm-project/issues/167268>`__",""
-"`P3922R1 <https://wg21.link/P3922R1>`__","Missing deduction guide from ``simd::mask`` to ``simd::vec``","2025-11 (Kona)","","","`#171285 <https://github.com/llvm/llvm-project/issues/171285>`__",""
-"`P3878R1 <https://wg21.link/P3878R1>`__","Standard library hardening should not use the 'observe' semantic","2025-11 (Kona)","","","`#171286 <https://github.com/llvm/llvm-project/issues/171286>`__",""
-"`P3887R1 <https://wg21.link/P3887R1>`__","Make ``when_all`` a Ronseal Algorithm","2025-11 (Kona)","","","`#171289 <https://github.com/llvm/llvm-project/issues/171289>`__",""
-"`P3923R0 <https://wg21.link/P3923R0>`__","Additional NB comment resolutions for Kona 2025","2025-11 (Kona)","","","`#171290 <https://github.com/llvm/llvm-project/issues/171290>`__",""
-"`P3371R5 <https://wg21.link/P3371R5>`__","Fix C++26 by making the rank-1, rank-2, rank-k, and rank-2k updates consistent with the BLAS","2025-11 (Kona)","","","`#171291 <https://github.com/llvm/llvm-project/issues/171291>`__",""
-"`P3391R2 <https://wg21.link/P3391R2>`__","``constexpr`` ``std::format``","2025-11 (Kona)","","","`#171292 <https://github.com/llvm/llvm-project/issues/171292>`__",""
-"`P3913R1 <https://wg21.link/P3913R1>`__","Optimize ``for std::optional`` in range adaptors","2025-11 (Kona)","","","`#171294 <https://github.com/llvm/llvm-project/issues/171294>`__",""
+"[P3920R0](https://wg21.link/P3920R0)","Wording for NB comment resolution on trivial relocation","2025-11 (Kona)","{{NothingToDo}}","","[#171269](https://github.com/llvm/llvm-project/issues/171269)",""
+"[P3016R6](https://wg21.link/P3016R6)","Resolve inconsistencies in begin/end for `valarray` and braced initializer lists","2025-11 (Kona)","{{Complete}}","24","[#171271](https://github.com/llvm/llvm-project/issues/171271)","Implemented as a DR against C++11. Change of `<stacktrace>` is blocked on [P0881R7](https://wg21.link/P0881R7)."
+"[P3567R2](https://wg21.link/P3567R2)","`flat_meow` Fixes","2025-11 (Kona)","{{Complete}}","22","[#171272](https://github.com/llvm/llvm-project/issues/171272)",""
+"[P3663R3](https://wg21.link/P3663R3)","Future-proof `submdspan_mapping`","2025-11 (Kona)","","","[#166089](https://github.com/llvm/llvm-project/issues/166089)",""
+"[P3914R0](https://wg21.link/P3914R0)","Assorted NB comment resolutions for Kona 2025","2025-11 (Kona)","","","[#171274](https://github.com/llvm/llvm-project/issues/171274)",""
+"[P3836R2](https://wg21.link/P3836R2)","Make `optional<T&>` trivially copyable","2025-11 (Kona)","{{Complete}}","22","[#171275](https://github.com/llvm/llvm-project/issues/171275)",""
+"[P3860R1](https://wg21.link/P3860R1)","Proposed Resolution for NB Comment GB13-309 `atomic_ref<T>` is not convertible to `atomic_ref<const T>`","2025-11 (Kona)","","","[#171276](https://github.com/llvm/llvm-project/issues/171276)",""
+"[P3388R3](https://wg21.link/P3388R3)","When Do You Know `connect` Doesn’t Throw?","2025-11 (Kona)","","","[#171277](https://github.com/llvm/llvm-project/issues/171277)",""
+"[P3774R1](https://wg21.link/P3774R1)","Rename `std::nontype`, and make it broadly useful","2025-11 (Kona)","","","[#171279](https://github.com/llvm/llvm-project/issues/171279)",""
+"[P3819R0](https://wg21.link/P3819R0)","Remove `evaluation_exception()` from contract-violation handling for C++26","2025-11 (Kona)","","","[#171280](https://github.com/llvm/llvm-project/issues/171280)",""
+"[P3612R1](https://wg21.link/P3612R1)","Harmonize proxy-reference operations (LWG 3638 and 4187)","2025-11 (Kona)","","","[#171281](https://github.com/llvm/llvm-project/issues/171281)",""
+"[P3778R0](https://wg21.link/P3778R0)","Fix for `type_order` template definition","2025-11 (Kona)","{{Complete}}","24","[#171284](https://github.com/llvm/llvm-project/issues/171284)",""
+"[P1789R3](https://wg21.link/P1789R3)","Library Support for Expansion Statements","2025-11 (Kona)","{{Complete}}","22","[#167268](https://github.com/llvm/llvm-project/issues/167268)",""
+"[P3922R1](https://wg21.link/P3922R1)","Missing deduction guide from `simd::mask` to `simd::vec`","2025-11 (Kona)","","","[#171285](https://github.com/llvm/llvm-project/issues/171285)",""
+"[P3878R1](https://wg21.link/P3878R1)","Standard library hardening should not use the 'observe' semantic","2025-11 (Kona)","","","[#171286](https://github.com/llvm/llvm-project/issues/171286)",""
+"[P3887R1](https://wg21.link/P3887R1)","Make `when_all` a Ronseal Algorithm","2025-11 (Kona)","","","[#171289](https://github.com/llvm/llvm-project/issues/171289)",""
+"[P3923R0](https://wg21.link/P3923R0)","Additional NB comment resolutions for Kona 2025","2025-11 (Kona)","","","[#171290](https://github.com/llvm/llvm-project/issues/171290)",""
+"[P3371R5](https://wg21.link/P3371R5)","Fix C++26 by making the rank-1, rank-2, rank-k, and rank-2k updates consistent with the BLAS","2025-11 (Kona)","","","[#171291](https://github.com/llvm/llvm-project/issues/171291)",""
+"[P3391R2](https://wg21.link/P3391R2)","`constexpr` `std::format`","2025-11 (Kona)","","","[#171292](https://github.com/llvm/llvm-project/issues/171292)",""
+"[P3913R1](https://wg21.link/P3913R1)","Optimize `for std::optional` in range adaptors","2025-11 (Kona)","","","[#171294](https://github.com/llvm/llvm-project/issues/171294)",""
"","","","","","",""
-"`P3726R2 <https://wg21.link/P3726R2>`__","Adjustments to Union Lifetime Rules","2026-03 (Croydon)","","","`#189560 <https://github.com/llvm/llvm-project/issues/189560>`__",""
-"`P3690R1 <https://wg21.link/P3690R1>`__","Consistency fix: Make ``simd`` reductions SIMD-generic","2026-03 (Croydon)","","","`#189562 <https://github.com/llvm/llvm-project/issues/189562>`__",""
-"`P3844R4 <https://wg21.link/P3844R4>`__","Reword [simd.math] for consteval conversions","2026-03 (Croydon)","","","`#189579 <https://github.com/llvm/llvm-project/issues/189579>`__",""
-"`P3932R0 <https://wg21.link/P3932R0>`__","Fix LWG4470: Fix integer-from in [simd]","2026-03 (Croydon)","","","`#189591 <https://github.com/llvm/llvm-project/issues/189591>`__",""
-"`P4012R1 <https://wg21.link/P4012R1>`__","Value-preserving consteval broadcast to ``simd::vec``","2026-03 (Croydon)","","","`#189592 <https://github.com/llvm/llvm-project/issues/189592>`__",""
-"`P3886R0 <https://wg21.link/P3886R0>`__","Wording for AT1-057","2026-03 (Croydon)","","","`#189593 <https://github.com/llvm/llvm-project/issues/189593>`__",""
-"`P3936R1 <https://wg21.link/P3936R1>`__","Safer ``atomic_ref::address`` (FR-030-310)","2026-03 (Croydon)","|Complete|","23","`#189594 <https://github.com/llvm/llvm-project/issues/189594>`__",""
-"`P4140R0 <https://wg21.link/P4140R0>`__","Proposed resolution for US70-126: allow incomplete types in type_order","2026-03 (Croydon)","|Complete|","24","`#189595 <https://github.com/llvm/llvm-project/issues/189595>`__",""
-"`P3373R4 <https://wg21.link/P3373R4>`__","Of Operation States and Their Lifetimes","2026-03 (Croydon)","","","`#189597 <https://github.com/llvm/llvm-project/issues/189597>`__",""
-"`P3986R1 <https://wg21.link/P3986R1>`__","A Wording Strategy for Inlinable Receivers","2026-03 (Croydon)","","","`#189598 <https://github.com/llvm/llvm-project/issues/189598>`__",""
-"`P3059R2 <https://wg21.link/P3059R2>`__","Making user-defined constructors of view iterators/sentinels private","2026-03 (Croydon)","|Complete|","24","`#189599 <https://github.com/llvm/llvm-project/issues/189599>`__",""
-"`P3725R3 <https://wg21.link/P3725R3>`__","Filter View Extensions for Safer Use, Rev 3","2026-03 (Croydon)","","","`#189601 <https://github.com/llvm/llvm-project/issues/189601>`__",""
-"`P3828R1 <https://wg21.link/P3828R1>`__","Rename the to_input view to as_input","2026-03 (Croydon)","","","`#189602 <https://github.com/llvm/llvm-project/issues/189602>`__",""
-"`P3795R2 <https://wg21.link/P3795R2>`__","Miscellaneous Reflection Cleanup","2026-03 (Croydon)","","","`#189603 <https://github.com/llvm/llvm-project/issues/189603>`__",""
-"`P3948R1 <https://wg21.link/P3948R1>`__","``constant_wrapper`` is the only tool needed for passing constant expressions via function arguments","2026-03 (Croydon)","|Complete|","24","`#189604 <https://github.com/llvm/llvm-project/issues/189604>`__",""
-"`P3978R3 <https://wg21.link/P3978R3>`__","``constant_wrapper`` should unwrap on call and subscript","2026-03 (Croydon)","|Complete|","23","`#189605 <https://github.com/llvm/llvm-project/issues/189605>`__",""
-"`P3961R1 <https://wg21.link/P3961R1>`__","Less double indirection in ``function_ref`` (RU-220)","2026-03 (Croydon)","|Complete|","24","`#189606 <https://github.com/llvm/llvm-project/issues/189606>`__",""
-"`P3981R2 <https://wg21.link/P3981R2>`__","Better return types in ``std::inplace_vector`` and ``std::exception_ptr_cast``","2026-03 (Croydon)","","","`#189607 <https://github.com/llvm/llvm-project/issues/189607>`__",""
-"`P4022R0 <https://wg21.link/P4022R0>`__","Remove ``try_append_range`` from ``inplace_vector`` for now","2026-03 (Croydon)","","","`#189608 <https://github.com/llvm/llvm-project/issues/189608>`__",""
-"`P4037R1 <https://wg21.link/P4037R1>`__","Supporting ``signed char`` and ``unsigned char`` in random number generation","2026-03 (Croydon)","","","`#189609 <https://github.com/llvm/llvm-project/issues/189609>`__",""
-"`P3450R1 <https://wg21.link/P3450R1>`__","Extend ``std::is_within_lifetime``","2026-03 (Croydon)","","","`#189610 <https://github.com/llvm/llvm-project/issues/189610>`__",""
-"`P3982R2 <https://wg21.link/P3982R2>`__","Split ``strided_slice`` into ``extent_slice`` and ``range_slice`` for C++26","2026-03 (Croydon)","","","`#189611 <https://github.com/llvm/llvm-project/issues/189611>`__",""
-"`P4144R1 <https://wg21.link/P4144R1>`__","Remove ``span``'s ``initializer_list`` constructor for C++26","2026-03 (Croydon)","|Complete|","23","`#189612 <https://github.com/llvm/llvm-project/issues/189612>`__",""
-"`P3804R2 <https://wg21.link/P3804R2>`__","Iterating on ``parallel_scheduler``","2026-03 (Croydon)","","","`#189616 <https://github.com/llvm/llvm-project/issues/189616>`__",""
-"`P3787R2 <https://wg21.link/P3787R2>`__","Adjoints to ""Enabling list-initialization for algorithms"": ``uninitialized_fill``","2026-03 (Croydon)","","","`#189618 <https://github.com/llvm/llvm-project/issues/189618>`__",""
-"`P3842R2 <https://wg21.link/P3842R2>`__","A conservative fix for constexpr uncaught_exceptions() and current_exception()","2026-03 (Croydon)","","","`#189619 <https://github.com/llvm/llvm-project/issues/189619>`__",""
-"`P3826R5 <https://wg21.link/P3826R5>`__","Fix Sender Algorithm Customization","2026-03 (Croydon)","","","`#189620 <https://github.com/llvm/llvm-project/issues/189620>`__",""
-"`P3980R1 <https://wg21.link/P3980R1>`__","Task's Allocator Use","2026-03 (Croydon)","","","`#189621 <https://github.com/llvm/llvm-project/issues/189621>`__",""
-"`P4156R0 <https://wg21.link/P4156R0>`__","Rename meta::has_ellipsis_parameter to meta::is_vararg_function","2026-03 (Croydon)","","","`#189622 <https://github.com/llvm/llvm-project/issues/189622>`__",""
-"`P3953R3 <https://wg21.link/P3953R3>`__","Rename ``std::runtime_format``","2026-03 (Croydon)","|Complete|","23","`#189624 <https://github.com/llvm/llvm-project/issues/189624>`__",""
-"`P4052R0 <https://wg21.link/P4052R0>`__","Renaming saturation arithmetic functions","2026-03 (Croydon)","|Complete|","23","`#189589 <https://github.com/llvm/llvm-project/issues/189589>`__",""
-"`P3941R4 <https://wg21.link/P3941R4>`__","Scheduler Affinity","2026-03 (Croydon)","","","`#189627 <https://github.com/llvm/llvm-project/issues/189627>`__",""
-"`P3856R8 <https://wg21.link/P3856R8>`__","New reflection metafunction - is_structural_type (US NB comment 49)","2026-03 (Croydon)","","","`#189625 <https://github.com/llvm/llvm-project/issues/189625>`__",""
-"`P3927R2 <https://wg21.link/P3927R2>`__","``task_scheduler`` support for parallel ``bulk`` execution","2026-03 (Croydon)","","","`#189629 <https://github.com/llvm/llvm-project/issues/189629>`__",""
-"`P4151R1 <https://wg21.link/P4151R1>`__","Rename ``affine_on``","2026-03 (Croydon)","","","`#189631 <https://github.com/llvm/llvm-project/issues/189631>`__",""
-"`P4159R0 <https://wg21.link/P4159R0>`__","Make ``sender_in`` and ``receiver_of`` exposition-only","2026-03 (Croydon)","","","`#189632 <https://github.com/llvm/llvm-project/issues/189632>`__",""
-"`P4154R0 <https://wg21.link/P4154R0>`__","Renaming various execution things","2026-03 (Croydon)","","","`#189633 <https://github.com/llvm/llvm-project/issues/189633>`__",""
+"[P3726R2](https://wg21.link/P3726R2)","Adjustments to Union Lifetime Rules","2026-03 (Croydon)","","","[#189560](https://github.com/llvm/llvm-project/issues/189560)",""
+"[P3690R1](https://wg21.link/P3690R1)","Consistency fix: Make `simd` reductions SIMD-generic","2026-03 (Croydon)","","","[#189562](https://github.com/llvm/llvm-project/issues/189562)",""
+"[P3844R4](https://wg21.link/P3844R4)","Reword [simd.math] for consteval conversions","2026-03 (Croydon)","","","[#189579](https://github.com/llvm/llvm-project/issues/189579)",""
+"[P3932R0](https://wg21.link/P3932R0)","Fix LWG4470: Fix integer-from in [simd]","2026-03 (Croydon)","","","[#189591](https://github.com/llvm/llvm-project/issues/189591)",""
+"[P4012R1](https://wg21.link/P4012R1)","Value-preserving consteval broadcast to `simd::vec`","2026-03 (Croydon)","","","[#189592](https://github.com/llvm/llvm-project/issues/189592)",""
+"[P3886R0](https://wg21.link/P3886R0)","Wording for AT1-057","2026-03 (Croydon)","","","[#189593](https://github.com/llvm/llvm-project/issues/189593)",""
+"[P3936R1](https://wg21.link/P3936R1)","Safer `atomic_ref::address` (FR-030-310)","2026-03 (Croydon)","{{Complete}}","23","[#189594](https://github.com/llvm/llvm-project/issues/189594)",""
+"[P4140R0](https://wg21.link/P4140R0)","Proposed resolution for US70-126: allow incomplete types in type_order","2026-03 (Croydon)","{{Complete}}","24","[#189595](https://github.com/llvm/llvm-project/issues/189595)",""
+"[P3373R4](https://wg21.link/P3373R4)","Of Operation States and Their Lifetimes","2026-03 (Croydon)","","","[#189597](https://github.com/llvm/llvm-project/issues/189597)",""
+"[P3986R1](https://wg21.link/P3986R1)","A Wording Strategy for Inlinable Receivers","2026-03 (Croydon)","","","[#189598](https://github.com/llvm/llvm-project/issues/189598)",""
+"[P3059R2](https://wg21.link/P3059R2)","Making user-defined constructors of view iterators/sentinels private","2026-03 (Croydon)","{{Complete}}","24","[#189599](https://github.com/llvm/llvm-project/issues/189599)",""
+"[P3725R3](https://wg21.link/P3725R3)","Filter View Extensions for Safer Use, Rev 3","2026-03 (Croydon)","","","[#189601](https://github.com/llvm/llvm-project/issues/189601)",""
+"[P3828R1](https://wg21.link/P3828R1)","Rename the to_input view to as_input","2026-03 (Croydon)","","","[#189602](https://github.com/llvm/llvm-project/issues/189602)",""
+"[P3795R2](https://wg21.link/P3795R2)","Miscellaneous Reflection Cleanup","2026-03 (Croydon)","","","[#189603](https://github.com/llvm/llvm-project/issues/189603)",""
+"[P3948R1](https://wg21.link/P3948R1)","`constant_wrapper` is the only tool needed for passing constant expressions via function arguments","2026-03 (Croydon)","{{Complete}}","24","[#189604](https://github.com/llvm/llvm-project/issues/189604)",""
+"[P3978R3](https://wg21.link/P3978R3)","`constant_wrapper` should unwrap on call and subscript","2026-03 (Croydon)","{{Complete}}","23","[#189605](https://github.com/llvm/llvm-project/issues/189605)",""
+"[P3961R1](https://wg21.link/P3961R1)","Less double indirection in `function_ref` (RU-220)","2026-03 (Croydon)","{{Complete}}","24","[#189606](https://github.com/llvm/llvm-project/issues/189606)",""
+"[P3981R2](https://wg21.link/P3981R2)","Better return types in `std::inplace_vector` and `std::exception_ptr_cast`","2026-03 (Croydon)","","","[#189607](https://github.com/llvm/llvm-project/issues/189607)",""
+"[P4022R0](https://wg21.link/P4022R0)","Remove `try_append_range` from `inplace_vector` for now","2026-03 (Croydon)","","","[#189608](https://github.com/llvm/llvm-project/issues/189608)",""
+"[P4037R1](https://wg21.link/P4037R1)","Supporting `signed char` and `unsigned char` in random number generation","2026-03 (Croydon)","","","[#189609](https://github.com/llvm/llvm-project/issues/189609)",""
+"[P3450R1](https://wg21.link/P3450R1)","Extend `std::is_within_lifetime`","2026-03 (Croydon)","","","[#189610](https://github.com/llvm/llvm-project/issues/189610)",""
+"[P3982R2](https://wg21.link/P3982R2)","Split `strided_slice` into `extent_slice` and `range_slice` for C++26","2026-03 (Croydon)","","","[#189611](https://github.com/llvm/llvm-project/issues/189611)",""
+"[P4144R1](https://wg21.link/P4144R1)","Remove `span`'s `initializer_list` constructor for C++26","2026-03 (Croydon)","{{Complete}}","23","[#189612](https://github.com/llvm/llvm-project/issues/189612)",""
+"[P3804R2](https://wg21.link/P3804R2)","Iterating on `parallel_scheduler`","2026-03 (Croydon)","","","[#189616](https://github.com/llvm/llvm-project/issues/189616)",""
+"[P3787R2](https://wg21.link/P3787R2)","Adjoints to ""Enabling list-initialization for algorithms"": `uninitialized_fill`","2026-03 (Croydon)","","","[#189618](https://github.com/llvm/llvm-project/issues/189618)",""
+"[P3842R2](https://wg21.link/P3842R2)","A conservative fix for constexpr uncaught_exceptions() and current_exception()","2026-03 (Croydon)","","","[#189619](https://github.com/llvm/llvm-project/issues/189619)",""
+"[P3826R5](https://wg21.link/P3826R5)","Fix Sender Algorithm Customization","2026-03 (Croydon)","","","[#189620](https://github.com/llvm/llvm-project/issues/189620)",""
+"[P3980R1](https://wg21.link/P3980R1)","Task's Allocator Use","2026-03 (Croydon)","","","[#189621](https://github.com/llvm/llvm-project/issues/189621)",""
+"[P4156R0](https://wg21.link/P4156R0)","Rename meta::has_ellipsis_parameter to meta::is_vararg_function","2026-03 (Croydon)","","","[#189622](https://github.com/llvm/llvm-project/issues/189622)",""
+"[P3953R3](https://wg21.link/P3953R3)","Rename `std::runtime_format`","2026-03 (Croydon)","{{Complete}}","23","[#189624](https://github.com/llvm/llvm-project/issues/189624)",""
+"[P4052R0](https://wg21.link/P4052R0)","Renaming saturation arithmetic functions","2026-03 (Croydon)","{{Complete}}","23","[#189589](https://github.com/llvm/llvm-project/issues/189589)",""
+"[P3941R4](https://wg21.link/P3941R4)","Scheduler Affinity","2026-03 (Croydon)","","","[#189627](https://github.com/llvm/llvm-project/issues/189627)",""
+"[P3856R8](https://wg21.link/P3856R8)","New reflection metafunction - is_structural_type (US NB comment 49)","2026-03 (Croydon)","","","[#189625](https://github.com/llvm/llvm-project/issues/189625)",""
+"[P3927R2](https://wg21.link/P3927R2)","`task_scheduler` support for parallel `bulk` execution","2026-03 (Croydon)","","","[#189629](https://github.com/llvm/llvm-project/issues/189629)",""
+"[P4151R1](https://wg21.link/P4151R1)","Rename `affine_on`","2026-03 (Croydon)","","","[#189631](https://github.com/llvm/llvm-project/issues/189631)",""
+"[P4159R0](https://wg21.link/P4159R0)","Make `sender_in` and `receiver_of` exposition-only","2026-03 (Croydon)","","","[#189632](https://github.com/llvm/llvm-project/issues/189632)",""
+"[P4154R0](https://wg21.link/P4154R0)","Renaming various execution things","2026-03 (Croydon)","","","[#189633](https://github.com/llvm/llvm-project/issues/189633)",""
"","","","","","",""
diff --git a/libcxx/docs/Status/Cxx29.md b/libcxx/docs/Status/Cxx29.md
index 6aeb2157f3eb2..a23737f05c577 100644
--- a/libcxx/docs/Status/Cxx29.md
+++ b/libcxx/docs/Status/Cxx29.md
@@ -2,8 +2,7 @@
# libc++ C++29 Status
-```{eval-rst}
-.. include:: ../Helpers/Styles.md
+```{include} ../Helpers/Styles.md
```
```{contents}
@@ -33,18 +32,24 @@ The groups that have contributed papers:
## Paper Status
```{eval-rst}
-.. csv-table::
- :file: Cxx29Papers.csv
- :header-rows: 1
- :widths: auto
+.. role:: notstarted
+.. role:: nothingtodo
+.. role:: inprogress
+.. role:: inreview
+.. role:: partial
+.. role:: complete
```
-## Library Working Group Issues Status
+:::{csv-table}
+:file: Cxx29Papers.csv
+:header-rows: 1
+:widths: auto
+:::
-```{eval-rst}
-.. csv-table::
- :file: Cxx29Issues.csv
- :header-rows: 1
- :widths: auto
-```
+## Library Working Group Issues Status
+:::{csv-table}
+:file: Cxx29Issues.csv
+:header-rows: 1
+:widths: auto
+:::
diff --git a/libcxx/docs/Status/Cxx29Issues.csv b/libcxx/docs/Status/Cxx29Issues.csv
index d84eeb44a23ff..328ae28a13d02 100644
--- a/libcxx/docs/Status/Cxx29Issues.csv
+++ b/libcxx/docs/Status/Cxx29Issues.csv
@@ -1,22 +1,22 @@
"Issue #","Issue Name","Meeting","Status","First released version","GitHub issue","Notes"
-"`LWG3417 <https://wg21.link/LWG3417>`__","Missing ``volatile`` atomic deprecations","2026-06 (Brno)","","","`#204440 <https://github.com/llvm/llvm-project/issues/204440>`__",""
-"`LWG4121 <https://wg21.link/LWG4121>`__","``ranges::to`` constructs associative containers via ``c.emplace(c.end(), *it)``","2026-06 (Brno)","","","`#204441 <https://github.com/llvm/llvm-project/issues/204441>`__",""
-"`LWG4125 <https://wg21.link/LWG4125>`__","``move_iterator``'s default constructor should be constrained","2026-06 (Brno)","|Complete|","23","`#204442 <https://github.com/llvm/llvm-project/issues/204442>`__",""
-"`LWG4158 <https://wg21.link/LWG4158>`__","``packaged_task::operator=`` should abandon its shared state","2026-06 (Brno)","","","`#204443 <https://github.com/llvm/llvm-project/issues/204443>`__",""
-"`LWG4182 <https://wg21.link/LWG4182>`__","Definition of ``NULL`` is too broad","2026-06 (Brno)","","","`#204444 <https://github.com/llvm/llvm-project/issues/204444>`__",""
-"`LWG4218 <https://wg21.link/LWG4218>`__","Constraint recursion in ``basic_const_iterator``'s relational operators due to ADL + CWG 2369","2026-06 (Brno)","","","`#204445 <https://github.com/llvm/llvm-project/issues/204445>`__",""
-"`LWG4249 <https://wg21.link/LWG4249>`__","The past end issue for ``lazy_split_view``","2026-06 (Brno)","","","`#204446 <https://github.com/llvm/llvm-project/issues/204446>`__",""
-"`LWG4267 <https://wg21.link/LWG4267>`__","Uses-allocator construction is meaningless for tuple of references","2026-06 (Brno)","","","`#204447 <https://github.com/llvm/llvm-project/issues/204447>`__",""
-"`LWG4359 <https://wg21.link/LWG4359>`__","``as_awaitable(expr, p)`` does not define semantics of call if ``p`` is not an lvalue","2026-06 (Brno)","","","`#204448 <https://github.com/llvm/llvm-project/issues/204448>`__",""
-"`LWG4385 <https://wg21.link/LWG4385>`__","Including ``<simd>`` doesn't provide ``std::begin``/``end``","2026-06 (Brno)","","","`#204449 <https://github.com/llvm/llvm-project/issues/204449>`__",""
-"`LWG4471 <https://wg21.link/LWG4471>`__","Remove test for ``get_env`` ``noexcept``-ness from ``inline_scheduler``","2026-06 (Brno)","","","`#204450 <https://github.com/llvm/llvm-project/issues/204450>`__",""
-"`LWG4487 <https://wg21.link/LWG4487>`__","Is member ``is_steady`` of a *Cpp17Clock* type required to be usable in constant expressions?","2026-06 (Brno)","","","`#204451 <https://github.com/llvm/llvm-project/issues/204451>`__",""
-"`LWG4490 <https://wg21.link/LWG4490>`__","Allow calling ``std::ranges::size`` in ranges algorithms","2026-06 (Brno)","","","`#204452 <https://github.com/llvm/llvm-project/issues/204452>`__",""
-"`LWG4521 <https://wg21.link/LWG4521>`__","Improve [atomics.order] p10 to have a consistent way with [intro.races]","2026-06 (Brno)","","","`#204453 <https://github.com/llvm/llvm-project/issues/204453>`__",""
-"`LWG4531 <https://wg21.link/LWG4531>`__","Should there be a feature-test macro update for ``constexpr`` ``std::to_(w)string``?","2026-06 (Brno)","","","`#204454 <https://github.com/llvm/llvm-project/issues/204454>`__",""
-"`LWG4567 <https://wg21.link/LWG4567>`__","Feature test macro value for ``apply_result``, ``is_applicable``","2026-06 (Brno)","","","`#204455 <https://github.com/llvm/llvm-project/issues/204455>`__",""
-"`LWG4568 <https://wg21.link/LWG4568>`__","``std::execution::spawn_future`` is mishandling dependent senders","2026-06 (Brno)","","","`#204456 <https://github.com/llvm/llvm-project/issues/204456>`__",""
-"`LWG4579 <https://wg21.link/LWG4579>`__","``make-state<Rcvr>::state-type::complete`` uses ``Env`` which is not in scope","2026-06 (Brno)","","","`#204457 <https://github.com/llvm/llvm-project/issues/204457>`__",""
+"[LWG3417](https://wg21.link/LWG3417)","Missing `volatile` atomic deprecations","2026-06 (Brno)","","","[#204440](https://github.com/llvm/llvm-project/issues/204440)",""
+"[LWG4121](https://wg21.link/LWG4121)","`ranges::to` constructs associative containers via `c.emplace(c.end(), *it)`","2026-06 (Brno)","","","[#204441](https://github.com/llvm/llvm-project/issues/204441)",""
+"[LWG4125](https://wg21.link/LWG4125)","`move_iterator`'s default constructor should be constrained","2026-06 (Brno)","{{Complete}}","23","[#204442](https://github.com/llvm/llvm-project/issues/204442)",""
+"[LWG4158](https://wg21.link/LWG4158)","`packaged_task::operator=` should abandon its shared state","2026-06 (Brno)","","","[#204443](https://github.com/llvm/llvm-project/issues/204443)",""
+"[LWG4182](https://wg21.link/LWG4182)","Definition of `NULL` is too broad","2026-06 (Brno)","","","[#204444](https://github.com/llvm/llvm-project/issues/204444)",""
+"[LWG4218](https://wg21.link/LWG4218)","Constraint recursion in `basic_const_iterator`'s relational operators due to ADL + CWG 2369","2026-06 (Brno)","","","[#204445](https://github.com/llvm/llvm-project/issues/204445)",""
+"[LWG4249](https://wg21.link/LWG4249)","The past end issue for `lazy_split_view`","2026-06 (Brno)","","","[#204446](https://github.com/llvm/llvm-project/issues/204446)",""
+"[LWG4267](https://wg21.link/LWG4267)","Uses-allocator construction is meaningless for tuple of references","2026-06 (Brno)","","","[#204447](https://github.com/llvm/llvm-project/issues/204447)",""
+"[LWG4359](https://wg21.link/LWG4359)","`as_awaitable(expr, p)` does not define semantics of call if `p` is not an lvalue","2026-06 (Brno)","","","[#204448](https://github.com/llvm/llvm-project/issues/204448)",""
+"[LWG4385](https://wg21.link/LWG4385)","Including `<simd>` doesn't provide `std::begin`/`end`","2026-06 (Brno)","","","[#204449](https://github.com/llvm/llvm-project/issues/204449)",""
+"[LWG4471](https://wg21.link/LWG4471)","Remove test for `get_env` `noexcept`-ness from `inline_scheduler`","2026-06 (Brno)","","","[#204450](https://github.com/llvm/llvm-project/issues/204450)",""
+"[LWG4487](https://wg21.link/LWG4487)","Is member `is_steady` of a *Cpp17Clock* type required to be usable in constant expressions?","2026-06 (Brno)","","","[#204451](https://github.com/llvm/llvm-project/issues/204451)",""
+"[LWG4490](https://wg21.link/LWG4490)","Allow calling `std::ranges::size` in ranges algorithms","2026-06 (Brno)","","","[#204452](https://github.com/llvm/llvm-project/issues/204452)",""
+"[LWG4521](https://wg21.link/LWG4521)","Improve [atomics.order] p10 to have a consistent way with [intro.races]","2026-06 (Brno)","","","[#204453](https://github.com/llvm/llvm-project/issues/204453)",""
+"[LWG4531](https://wg21.link/LWG4531)","Should there be a feature-test macro update for `constexpr` `std::to_(w)string`?","2026-06 (Brno)","","","[#204454](https://github.com/llvm/llvm-project/issues/204454)",""
+"[LWG4567](https://wg21.link/LWG4567)","Feature test macro value for `apply_result`, `is_applicable`","2026-06 (Brno)","","","[#204455](https://github.com/llvm/llvm-project/issues/204455)",""
+"[LWG4568](https://wg21.link/LWG4568)","`std::execution::spawn_future` is mishandling dependent senders","2026-06 (Brno)","","","[#204456](https://github.com/llvm/llvm-project/issues/204456)",""
+"[LWG4579](https://wg21.link/LWG4579)","`make-state<Rcvr>::state-type::complete` uses `Env` which is not in scope","2026-06 (Brno)","","","[#204457](https://github.com/llvm/llvm-project/issues/204457)",""
"","","","","","",""
-"`LWG4612 <https://wg21.link/LWG4612>`__","Specify the details of ``std::nullopt_t``","Not Adopted Yet","|Complete|","24","",""
+"[LWG4612](https://wg21.link/LWG4612)","Specify the details of `std::nullopt_t`","Not Adopted Yet","{{Complete}}","24","",""
"","","","","","",""
diff --git a/libcxx/docs/Status/Cxx29Papers.csv b/libcxx/docs/Status/Cxx29Papers.csv
index 56fb1540e47fc..cc0bf90a19b1b 100644
--- a/libcxx/docs/Status/Cxx29Papers.csv
+++ b/libcxx/docs/Status/Cxx29Papers.csv
@@ -1,22 +1,22 @@
"Paper #","Paper Name","Meeting","Status","First released version","GitHub issue","Notes"
-"`P2434R5 <https://wg21.link/P2434R5>`__","Nondeterministic pointer provenance","2026-06 (Brno)","","","`#204390 <https://github.com/llvm/llvm-project/issues/204390>`__","Voted as a Defect Report."
-"`P4101R1 <https://wg21.link/P4101R1>`__","Consteval-only Values for C++26","2026-06 (Brno)","","","`#204391 <https://github.com/llvm/llvm-project/issues/204391>`__","Voted as a Defect Report."
-"`P2414R12 <https://wg21.link/P2414R12>`__","Pointer lifetime-end zap proposed solutions","2026-06 (Brno)","","","`#204392 <https://github.com/llvm/llvm-project/issues/204392>`__","Voted as a Defect Report."
-"`P3319R6 <https://wg21.link/P3319R6>`__","Add an ``iota`` object for ``simd`` (and more)","2026-06 (Brno)","","","`#204393 <https://github.com/llvm/llvm-project/issues/204393>`__",""
-"`P3798R1 <https://wg21.link/P3798R1>`__","The unexpected in ``std::expected``","2026-06 (Brno)","|Complete|","24","`#204394 <https://github.com/llvm/llvm-project/issues/204394>`__",""
-"`P3052R2 <https://wg21.link/P3052R2>`__","``view_interface::at()``","2026-06 (Brno)","24","|Complete|","`#204395 <https://github.com/llvm/llvm-project/issues/204395>`__",""
-"`P4206R0 <https://wg21.link/P4206R0>`__","Revert string support in ``std::constant_wrapper``","2026-06 (Brno)","|Complete|","23","`#203336 <https://github.com/llvm/llvm-project/issues/203336>`__","Applied as a Defect Report."
-"`P3395R6 <https://wg21.link/P3395R6>`__","Fix encoding issues and add a formatter for ``std::error_code``","2026-06 (Brno)","","","`#204396 <https://github.com/llvm/llvm-project/issues/204396>`__",""
-"`P3505R4 <https://wg21.link/P3505R4>`__","Fix the default floating-point representation in ``std::format``","2026-06 (Brno)","","","`#204397 <https://github.com/llvm/llvm-project/issues/204397>`__","To be applied as a Defect Report."
-"`P3154R3 <https://wg21.link/P3154R3>`__","Deprecating signed character types in iostreams","2026-06 (Brno)","","","`#204398 <https://github.com/llvm/llvm-project/issues/204398>`__",""
-"`P3428R4 <https://wg21.link/P3428R4>`__","Hazard Pointer Batches","2026-06 (Brno)","","","`#204399 <https://github.com/llvm/llvm-project/issues/204399>`__",""
-"`P3248R5 <https://wg21.link/P3248R5>`__","Require ``[u]intptr_t``","2026-06 (Brno)","","","`#204400 <https://github.com/llvm/llvm-project/issues/204400>`__",""
-"`P3793R2 <https://wg21.link/P3793R2>`__","Better shifting","2026-06 (Brno)","","","`#204401 <https://github.com/llvm/llvm-project/issues/204401>`__",""
-"`P3242R4 <https://wg21.link/P3242R4>`__","Copy and fill for ``mdspan``","2026-06 (Brno)","","","`#204402 <https://github.com/llvm/llvm-project/issues/204402>`__",""
-"`P3692R4 <https://wg21.link/P3692R4>`__","How to Avoid OOTA Without Really Trying","2026-06 (Brno)","","","`#204403 <https://github.com/llvm/llvm-project/issues/204403>`__",""
-"`P3104R6 <https://wg21.link/P3104R6>`__","Bit permutations","2026-06 (Brno)","","","`#204404 <https://github.com/llvm/llvm-project/issues/204404>`__",""
-"`P3772R2 <https://wg21.link/P3772R2>`__","``std::simd`` overloads for bit permutations","2026-06 (Brno)","","","`#204405 <https://github.com/llvm/llvm-project/issues/204405>`__",""
-"`P3091R6 <https://wg21.link/P3091R6>`__","Better Lookups for ``map``, ``unordered_map``, and ``flat_map``","2026-06 (Brno)","","","`#204406 <https://github.com/llvm/llvm-project/issues/204406>`__",""
-"`P3125R6 <https://wg21.link/P3125R6>`__","constexpr pointer tagging","2026-06 (Brno)","","","`#204407 <https://github.com/llvm/llvm-project/issues/204407>`__",""
-"`P2019R9 <https://wg21.link/P2019R9>`__","Thread attributes","2026-06 (Brno)","","","`#204423 <https://github.com/llvm/llvm-project/issues/204423>`__",""
-"`P3785R1 <https://wg21.link/P3785R1>`__","Library Wording Changes for Defaulted Postfix Increment and Decrement Operations","2026-06 (Brno)","","","`#204424 <https://github.com/llvm/llvm-project/issues/204424>`__",""
+"[P2434R5](https://wg21.link/P2434R5)","Nondeterministic pointer provenance","2026-06 (Brno)","","","[#204390](https://github.com/llvm/llvm-project/issues/204390)","Voted as a Defect Report."
+"[P4101R1](https://wg21.link/P4101R1)","Consteval-only Values for C++26","2026-06 (Brno)","","","[#204391](https://github.com/llvm/llvm-project/issues/204391)","Voted as a Defect Report."
+"[P2414R12](https://wg21.link/P2414R12)","Pointer lifetime-end zap proposed solutions","2026-06 (Brno)","","","[#204392](https://github.com/llvm/llvm-project/issues/204392)","Voted as a Defect Report."
+"[P3319R6](https://wg21.link/P3319R6)","Add an `iota` object for `simd` (and more)","2026-06 (Brno)","","","[#204393](https://github.com/llvm/llvm-project/issues/204393)",""
+"[P3798R1](https://wg21.link/P3798R1)","The unexpected in `std::expected`","2026-06 (Brno)","{{Complete}}","24","[#204394](https://github.com/llvm/llvm-project/issues/204394)",""
+"[P3052R2](https://wg21.link/P3052R2)","`view_interface::at()`","2026-06 (Brno)","24","{{Complete}}","[#204395](https://github.com/llvm/llvm-project/issues/204395)",""
+"[P4206R0](https://wg21.link/P4206R0)","Revert string support in `std::constant_wrapper`","2026-06 (Brno)","{{Complete}}","23","[#203336](https://github.com/llvm/llvm-project/issues/203336)","Applied as a Defect Report."
+"[P3395R6](https://wg21.link/P3395R6)","Fix encoding issues and add a formatter for `std::error_code`","2026-06 (Brno)","","","[#204396](https://github.com/llvm/llvm-project/issues/204396)",""
+"[P3505R4](https://wg21.link/P3505R4)","Fix the default floating-point representation in `std::format`","2026-06 (Brno)","","","[#204397](https://github.com/llvm/llvm-project/issues/204397)","To be applied as a Defect Report."
+"[P3154R3](https://wg21.link/P3154R3)","Deprecating signed character types in iostreams","2026-06 (Brno)","","","[#204398](https://github.com/llvm/llvm-project/issues/204398)",""
+"[P3428R4](https://wg21.link/P3428R4)","Hazard Pointer Batches","2026-06 (Brno)","","","[#204399](https://github.com/llvm/llvm-project/issues/204399)",""
+"[P3248R5](https://wg21.link/P3248R5)","Require `[u]intptr_t`","2026-06 (Brno)","","","[#204400](https://github.com/llvm/llvm-project/issues/204400)",""
+"[P3793R2](https://wg21.link/P3793R2)","Better shifting","2026-06 (Brno)","","","[#204401](https://github.com/llvm/llvm-project/issues/204401)",""
+"[P3242R4](https://wg21.link/P3242R4)","Copy and fill for `mdspan`","2026-06 (Brno)","","","[#204402](https://github.com/llvm/llvm-project/issues/204402)",""
+"[P3692R4](https://wg21.link/P3692R4)","How to Avoid OOTA Without Really Trying","2026-06 (Brno)","","","[#204403](https://github.com/llvm/llvm-project/issues/204403)",""
+"[P3104R6](https://wg21.link/P3104R6)","Bit permutations","2026-06 (Brno)","","","[#204404](https://github.com/llvm/llvm-project/issues/204404)",""
+"[P3772R2](https://wg21.link/P3772R2)","`std::simd` overloads for bit permutations","2026-06 (Brno)","","","[#204405](https://github.com/llvm/llvm-project/issues/204405)",""
+"[P3091R6](https://wg21.link/P3091R6)","Better Lookups for `map`, `unordered_map`, and `flat_map`","2026-06 (Brno)","","","[#204406](https://github.com/llvm/llvm-project/issues/204406)",""
+"[P3125R6](https://wg21.link/P3125R6)","constexpr pointer tagging","2026-06 (Brno)","","","[#204407](https://github.com/llvm/llvm-project/issues/204407)",""
+"[P2019R9](https://wg21.link/P2019R9)","Thread attributes","2026-06 (Brno)","","","[#204423](https://github.com/llvm/llvm-project/issues/204423)",""
+"[P3785R1](https://wg21.link/P3785R1)","Library Wording Changes for Defaulted Postfix Increment and Decrement Operations","2026-06 (Brno)","","","[#204424](https://github.com/llvm/llvm-project/issues/204424)",""
diff --git a/libcxx/docs/TestingLibcxx.md b/libcxx/docs/TestingLibcxx.md
index 8267726c1059b..a0cd6a34eaf07 100644
--- a/libcxx/docs/TestingLibcxx.md
+++ b/libcxx/docs/TestingLibcxx.md
@@ -2,9 +2,9 @@
# Testing libc++
-```{contents}
+:::{contents}
:local: true
-```
+:::
## Getting Started
@@ -107,10 +107,10 @@ custom site configuration, simply point the CMake build to it using
will be used instead. That file can use CMake variables inside it to make
configuration easier.
-> ```bash
-> $ cmake <options> -DLIBCXX_TEST_CONFIG=<path-to-site-config>
-> $ libcxx/utils/libcxx-lit <build> -sv libcxx/test # will use your custom config file
-> ```
+```bash
+$ cmake <options> -DLIBCXX_TEST_CONFIG=<path-to-site-config>
+$ libcxx/utils/libcxx-lit <build> -sv libcxx/test # will use your custom config file
+```
### Additional tools
@@ -313,17 +313,19 @@ written to `stderr`.
This macro is in a different header as `assert_macros.h` since it pulls in
additional headers.
-> % note: This macro can only be used in test using C++20 or newer. The macro
-> % was added at a time where most of libc++'s C++17 support was complete.
-> % Since it is not expected to add this to existing tests no effort was
-> % taken to make it work in earlier language versions.
+:::{note}
+This macro can only be used in test using C++20 or newer. The macro
+was added at a time where most of libc++'s C++17 support was complete.
+Since it is not expected to add this to existing tests no effort was
+taken to make it work in earlier language versions.
+:::
### Test names
The names of test files have meaning for the libc++-specific configuration of
Lit. Based on the pattern that matches the name of a test file, Lit will test
-the code contained therein in different ways. Refer to the [Lit Meaning of libc++
-Test Filenames][lit meaning of libc++ test filenames] when determining the names for new test files.
+the code contained therein in different ways. Refer to the {ref}`Lit Meaning of libc++
+Test Filenames <lit-meaning-of-libc-test-filenames>` when determining the names for new test files.
(lit-meaning-of-libc-test-filenames)=
@@ -386,7 +388,7 @@ Test Filenames][lit meaning of libc++ test filenames] when determining the names
#### Custom Directives
Lit has many directives built in (e.g., `DEFINE`, `UNSUPPORTED`). In addition to those directives, libc++ adds two additional libc++-specific directives that makes
-writing tests easier. See [libc++-specific Lit Directives] for more information about the `FILE_DEPENDENCIES`, `ADDITIONAL_COMPILE_FLAGS`, and `MODULE_DEPENDENCIES` libc++-specific directives.
+writing tests easier. See {ref}`libc++-specific Lit Directives <libc-specific-lit-directives>` for more information about the `FILE_DEPENDENCIES`, `ADDITIONAL_COMPILE_FLAGS`, and `MODULE_DEPENDENCIES` libc++-specific directives.
(libc-specific-lit-directives)=
@@ -410,7 +412,7 @@ writing tests easier. See [libc++-specific Lit Directives] for more information
- ``// ADDITIONAL_COMPILE_FLAGS: flag1 flag2 ...``
- The additional compiler flags specified by a space-separated list to the ``ADDITIONAL_COMPILE_FLAGS`` libc++-specific Lit directive will be added to the end of the ``%{compile_flags}``
substitution for the test that contains it. This libc++-specific Lit directive makes it possible to add special compilation flags without having to resort to writing a ``.sh.cpp`` test (see
- `Lit Meaning of libc++ Test Filenames`_), more powerful but perhaps overkill.
+ :ref:`Lit Meaning of libc++ Test Filenames <lit-meaning-of-libc-test-filenames>`), more powerful but perhaps overkill.
* - ``MODULE_DEPENDENCIES``
- ``// MODULE_DEPENDENCIES: std std.compat``
- This directive will build the required C++23 standard library
@@ -563,4 +565,3 @@ effect logs one, i.e. `enforce` or `observe`.
[google benchmark]: https://github.com/google/benchmark
[lit command guide]: https://llvm.org/docs/CommandGuide/lit.html
-
diff --git a/libcxx/docs/UserDocumentation.md b/libcxx/docs/UserDocumentation.md
index 2f8a5a7fcb2e8..58e28abcceec7 100644
--- a/libcxx/docs/UserDocumentation.md
+++ b/libcxx/docs/UserDocumentation.md
@@ -2,9 +2,9 @@
# User documentation
-```{contents}
+:::{contents}
:local: true
-```
+:::
This page contains information for users of libc++: how to use libc++ if it is not
the default library used by the toolchain, and what configuration knobs are available
@@ -71,13 +71,14 @@ Assertion semantics mirror the evaluation semantics of C++26 Contracts but are
not a standard feature.
:::{note}
-Experimental libraries are experimental.
-: - The contents of the `<experimental/...>` headers and the associated static
- library may not remain compatible between versions.
- - No guarantees of API or ABI stability are provided.
- - When the standardized version of an experimental feature is implemented,
- the experimental feature is removed two releases after the non-experimental
- version has shipped. The full policy is explained {ref}`here <experimental features>`.
+**Experimental libraries are experimental.**
+
+- The contents of the `<experimental/...>` headers and the associated static
+ library may not remain compatible between versions.
+- No guarantees of API or ABI stability are provided.
+- When the standardized version of an experimental feature is implemented,
+ the experimental feature is removed two releases after the non-experimental
+ version has shipped. The full policy is explained {ref}`here <experimental features>`.
:::
(libcxx-configuration-macros)=
@@ -94,53 +95,53 @@ only intended to be used by vendors and changing their value from the one provid
in your toolchain can lead to unexpected behavior.
:::
-**\_LIBCPP_DISABLE_DEPRECATION_WARNINGS**:
+**\_LIBCPP_DISABLE_DEPRECATION_WARNINGS**\:
: This macro disables warnings when using deprecated components. For example,
- using `std::auto_ptr` when compiling in C++11 mode will normally trigger a
- warning saying that `std::auto_ptr` is deprecated. If the macro is defined,
+ using {title-reference}`std::auto_ptr` when compiling in C++11 mode will normally trigger a
+ warning saying that {title-reference}`std::auto_ptr` is deprecated. If the macro is defined,
no warning will be emitted. By default, this macro is not defined.
-**\_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS**:
+**\_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS**\:
: This macro is used to disable all visibility annotations inside libc++.
Defining this macro and then building libc++ with hidden visibility gives a
build of libc++ which does not export any symbols, which can be useful when
building statically for inclusion into another library.
-**\_LIBCPP_ENABLE_EXPERIMENTAL**:
+**\_LIBCPP_ENABLE_EXPERIMENTAL**\:
: This macro enables experimental features. This can be used on compilers that do
not support the `-fexperimental-library` flag. When used, users also need to
ensure that the appropriate experimental library (usually `libc++experimental.a`)
is linked into their program.
-**\_LIBCPP_HARDENING_MODE**:
+**\_LIBCPP_HARDENING_MODE**\:
: This macro is used to choose the {ref}`hardening mode <using-hardening-modes>`.
-**\_LIBCPP_NO_VCRUNTIME**:
+**\_LIBCPP_NO_VCRUNTIME**\:
: Microsoft's C and C++ headers are fairly entangled, and some of their C++
- headers are fairly hard to avoid. In particular, `vcruntime_new.h` gets pulled
+ headers are fairly hard to avoid. In particular, {title-reference}`vcruntime_new.h` gets pulled
in from a lot of other headers and provides definitions which clash with
- libc++ headers, such as `nothrow_t` (note that `nothrow_t` is a struct, so
+ libc++ headers, such as {title-reference}`nothrow_t` (note that {title-reference}`nothrow_t` is a struct, so
there's no way for libc++ to provide a compatible definition, since you can't
have multiple definitions).
By default, libc++ solves this problem by deferring to Microsoft's vcruntime
headers where needed. However, it may be undesirable to depend on vcruntime
headers, since they may not always be available in cross-compilation setups,
- or they may clash with other headers. The `_LIBCPP_NO_VCRUNTIME` macro
+ or they may clash with other headers. The {title-reference}`_LIBCPP_NO_VCRUNTIME` macro
prevents libc++ from depending on vcruntime headers. Consequently, it also
prevents libc++ headers from being interoperable with vcruntime headers (from
the aforementioned clashes), so users of this macro are promising to not
attempt to combine libc++ headers with the problematic vcruntime headers. This
- macro also currently prevents certain `operator new`/`operator delete`
- replacement scenarios from working, e.g. replacing `operator new` and
- expecting a non-replaced `operator new[]` to call the replaced `operator new`.
+ macro also currently prevents certain {title-reference}`operator new`/{title-reference}`operator delete`
+ replacement scenarios from working, e.g. replacing {title-reference}`operator new` and
+ expecting a non-replaced {title-reference}`operator new[]` to call the replaced {title-reference}`operator new`.
-**\_LIBCPP_REMOVE_TRANSITIVE_INCLUDES**:
+**\_LIBCPP_REMOVE_TRANSITIVE_INCLUDES**\:
: When this macro is defined, the standard library headers will adhere to a
stricter policy regarding the (transitive) inclusion of other standard library
@@ -165,87 +166,87 @@ in your toolchain can lead to unexpected behavior.
### C++17 Specific Configuration Macros
-**\_LIBCPP_ENABLE_CXX17_REMOVED_AUTO_PTR**:
+**\_LIBCPP_ENABLE_CXX17_REMOVED_AUTO_PTR**\:
-: This macro is used to re-enable `auto_ptr`.
+: This macro is used to re-enable {title-reference}`auto_ptr`.
-**\_LIBCPP_ENABLE_CXX17_REMOVED_BINDERS**:
+**\_LIBCPP_ENABLE_CXX17_REMOVED_BINDERS**\:
-: This macro is used to re-enable the `binder1st`, `binder2nd`,
- `pointer_to_unary_function`, `pointer_to_binary_function`, `mem_fun_t`,
- `mem_fun1_t`, `mem_fun_ref_t`, `mem_fun1_ref_t`, `const_mem_fun_t`,
- `const_mem_fun1_t`, `const_mem_fun_ref_t`, and `const_mem_fun1_ref_t`
- class templates, and the `bind1st`, `bind2nd`, `mem_fun`, `mem_fun_ref`,
- and `ptr_fun` functions.
+: This macro is used to re-enable the {title-reference}`binder1st`, {title-reference}`binder2nd`,
+ {title-reference}`pointer_to_unary_function`, {title-reference}`pointer_to_binary_function`, {title-reference}`mem_fun_t`,
+ {title-reference}`mem_fun1_t`, {title-reference}`mem_fun_ref_t`, {title-reference}`mem_fun1_ref_t`, {title-reference}`const_mem_fun_t`,
+ {title-reference}`const_mem_fun1_t`, {title-reference}`const_mem_fun_ref_t`, and {title-reference}`const_mem_fun1_ref_t`
+ class templates, and the {title-reference}`bind1st`, {title-reference}`bind2nd`, {title-reference}`mem_fun`, {title-reference}`mem_fun_ref`,
+ and {title-reference}`ptr_fun` functions.
-**\_LIBCPP_ENABLE_CXX17_REMOVED_RANDOM_SHUFFLE**:
+**\_LIBCPP_ENABLE_CXX17_REMOVED_RANDOM_SHUFFLE**\:
-: This macro is used to re-enable the `random_shuffle` algorithm.
+: This macro is used to re-enable the {title-reference}`random_shuffle` algorithm.
-**\_LIBCPP_ENABLE_CXX17_REMOVED_UNARY_BINARY_FUNCTION**:
+**\_LIBCPP_ENABLE_CXX17_REMOVED_UNARY_BINARY_FUNCTION**\:
-: This macro is used to re-enable `unary_function` and `binary_function`.
+: This macro is used to re-enable {title-reference}`unary_function` and {title-reference}`binary_function`.
-**\_LIBCPP_ENABLE_CXX17_REMOVED_UNEXPECTED_FUNCTIONS**:
+**\_LIBCPP_ENABLE_CXX17_REMOVED_UNEXPECTED_FUNCTIONS**\:
-: This macro is used to re-enable `set_unexpected`, `get_unexpected`, and
- `unexpected`.
+: This macro is used to re-enable {title-reference}`set_unexpected`, {title-reference}`get_unexpected`, and
+ {title-reference}`unexpected`.
### C++20 Specific Configuration Macros
-**\_LIBCPP_ENABLE_CXX20_REMOVED_BINDER_TYPEDEFS**:
+**\_LIBCPP_ENABLE_CXX20_REMOVED_BINDER_TYPEDEFS**\:
-: This macro is used to re-enable the `argument_type`, `result_type`,
- `first_argument_type`, and `second_argument_type` members of class
- templates such as `plus`, `logical_not`, `hash`, and `owner_less`.
+: This macro is used to re-enable the {title-reference}`argument_type`, {title-reference}`result_type`,
+ {title-reference}`first_argument_type`, and {title-reference}`second_argument_type` members of class
+ templates such as {title-reference}`plus`, {title-reference}`logical_not`, {title-reference}`hash`, and {title-reference}`owner_less`.
-**\_LIBCPP_ENABLE_CXX20_REMOVED_NEGATORS**:
+**\_LIBCPP_ENABLE_CXX20_REMOVED_NEGATORS**\:
-: This macro is used to re-enable `not1`, `not2`, `unary_negate`,
- and `binary_negate`.
+: This macro is used to re-enable {title-reference}`not1`, {title-reference}`not2`, {title-reference}`unary_negate`,
+ and {title-reference}`binary_negate`.
-**\_LIBCPP_ENABLE_CXX20_REMOVED_RAW_STORAGE_ITERATOR**:
+**\_LIBCPP_ENABLE_CXX20_REMOVED_RAW_STORAGE_ITERATOR**\:
-: This macro is used to re-enable `raw_storage_iterator`.
+: This macro is used to re-enable {title-reference}`raw_storage_iterator`.
-**\_LIBCPP_ENABLE_CXX20_REMOVED_SHARED_PTR_UNIQUE**:
+**\_LIBCPP_ENABLE_CXX20_REMOVED_SHARED_PTR_UNIQUE**\:
: This macro is used to re-enable the function
`std::shared_ptr<...>::unique()`.
-**\_LIBCPP_ENABLE_CXX20_REMOVED_TEMPORARY_BUFFER**:
+**\_LIBCPP_ENABLE_CXX20_REMOVED_TEMPORARY_BUFFER**\:
-: This macro is used to re-enable `get_temporary_buffer` and `return_temporary_buffer`.
+: This macro is used to re-enable {title-reference}`get_temporary_buffer` and {title-reference}`return_temporary_buffer`.
-**\_LIBCPP_ENABLE_CXX20_REMOVED_TYPE_TRAITS**:
+**\_LIBCPP_ENABLE_CXX20_REMOVED_TYPE_TRAITS**\:
-: This macro is used to re-enable `is_literal_type`, `is_literal_type_v`,
- `result_of` and `result_of_t`.
+: This macro is used to re-enable {title-reference}`is_literal_type`, {title-reference}`is_literal_type_v`,
+ {title-reference}`result_of` and {title-reference}`result_of_t`.
-**\_LIBCPP_ENABLE_CXX20_REMOVED_UNCAUGHT_EXCEPTION**:
+**\_LIBCPP_ENABLE_CXX20_REMOVED_UNCAUGHT_EXCEPTION**\:
-: This macro is used to re-enable `uncaught_exception`.
+: This macro is used to re-enable {title-reference}`uncaught_exception`.
### C++26 Specific Configuration Macros
-**\_LIBCPP_ENABLE_CXX26_REMOVED_ALLOCATOR_MEMBERS**:
+**\_LIBCPP_ENABLE_CXX26_REMOVED_ALLOCATOR_MEMBERS**\:
: This macro is used to re-enable redundant member of `allocator<T>::is_always_equal`.
-**\_LIBCPP_ENABLE_CXX26_REMOVED_CODECVT**:
+**\_LIBCPP_ENABLE_CXX26_REMOVED_CODECVT**\:
: This macro is used to re-enable all named declarations in `<codecvt>`.
-**\_LIBCPP_ENABLE_CXX26_REMOVED_STRING_RESERVE**:
+**\_LIBCPP_ENABLE_CXX26_REMOVED_STRING_RESERVE**\:
: This macro is used to re-enable the function
`std::basic_string<...>::reserve()`.
-**\_LIBCPP_ENABLE_CXX26_REMOVED_STRSTREAM**:
+**\_LIBCPP_ENABLE_CXX26_REMOVED_STRSTREAM**\:
: This macro is used to re-enable all named declarations in `<strstream>`.
-**\_LIBCPP_ENABLE_CXX26_REMOVED_WSTRING_CONVERT**:
+**\_LIBCPP_ENABLE_CXX26_REMOVED_WSTRING_CONVERT**\:
: This macro is used to re-enable the `wstring_convert` and `wbuffer_convert`
in `<locale>`.
@@ -438,4 +439,3 @@ $ include-what-you-use -Xiwyu --mapping_file=/path/to/libcxx/include/libcxx.imp
If you would prefer to not use that flag, then you can replace `/path/to/include-what-you-use/share/libcxx.imp`
file with the libc++-provided `libcxx.imp` file.
-
diff --git a/libcxx/docs/VendorDocumentation.md b/libcxx/docs/VendorDocumentation.md
index 4ff5472ca5ea3..424eb5d58d868 100644
--- a/libcxx/docs/VendorDocumentation.md
+++ b/libcxx/docs/VendorDocumentation.md
@@ -38,7 +38,7 @@ $ ninja -C build install-cxx install-cxxabi install-unwind
```
:::{note}
-See {ref}`Vendor Configuration Options` below for more configuration options.
+See [Vendor Configuration Options](#vendor-configuration-options) below for more configuration options.
:::
After building the various `install-XXX` targets, shared libraries for libc++, libc++abi and
@@ -186,7 +186,7 @@ C Standard Libraries don't always provide all the usual bells and whistles.
Whether to include support for time zones in the library. Disabling
time zone support can be useful when porting to platforms that don't
ship the IANA time zone database. When time zones are not supported,
-time zone support in \<chrono> will be disabled.
+time zone support in `<chrono>` will be disabled.
:::
:::{option} LIBCXX_INSTALL_LIBRARY_DIR:PATH
@@ -652,4 +652,3 @@ removed from the library. The minimum header version can be set with the CMake v
[libc++abi]: http://libcxxabi.llvm.org/
[libcxxrt]: https://github.com/libcxxrt/libcxxrt
-
diff --git a/libcxx/docs/conf.py b/libcxx/docs/conf.py
index 729c5211f18a2..979ee12a6fea5 100644
--- a/libcxx/docs/conf.py
+++ b/libcxx/docs/conf.py
@@ -13,9 +13,20 @@
import sys, os
from datetime import date
+from docutils import nodes
+
from llvm_sphinx import * # see llvm-project/utils/docs/README.md
globals().update(common_conf(tags, markdown=Markdown.ALWAYS))
+myst_enable_extensions += ["deflist", "substitution"]
+myst_substitutions = {
+ "Complete": "{complete}`Complete`",
+ "InProgress": "{inprogress}`In Progress`",
+ "NotStarted": "{notstarted}`Not Started`",
+ "NothingToDo": "{nothingtodo}`Nothing To Do`",
+ "Partial": "{partial}`Partial`",
+ "Review": "{inreview}`Review`",
+}
# -- General configuration -----------------------------------------------------
@@ -193,7 +204,7 @@
# One entry per manual page. List of tuples
# (source start file, name, description, authors, manual section).
-man_pages = [("contents", "libc++", "libc++ Documentation", ["LLVM project"], 1)]
+man_pages = [("index", "libc++", "libc++ Documentation", ["LLVM project"], 1)]
# If true, show URL addresses after external links.
# man_show_urls = False
@@ -234,3 +245,15 @@
# Enable this if you want TODOs to show up in the generated documentation.
todo_include_todos = True
+
+
+def _flatten_table_spans_for_man(app, doctree, docname):
+ if app.builder.name != "man":
+ return
+ for entry in doctree.findall(nodes.entry):
+ entry.attributes.pop("morecols", None)
+ entry.attributes.pop("morerows", None)
+
+
+def setup(app):
+ app.connect("doctree-resolved", _flatten_table_spans_for_man)
diff --git a/libcxx/docs/index.md b/libcxx/docs/index.md
index 9a74d39a6c440..2f7de42689758 100644
--- a/libcxx/docs/index.md
+++ b/libcxx/docs/index.md
@@ -225,9 +225,12 @@ DesignDocs/WindowsSupport
- [LLVM Homepage](https://llvm.org/)
- [libc++abi Homepage](http://libcxxabi.llvm.org/)
-- [LLVM Bug Tracker](https://github.com/llvm/llvm-project/labels/libc++/)
+- [LLVM Bug Tracker]
- [libcxx-commits Mailing List](http://lists.llvm.org/mailman/listinfo/libcxx-commits)
-- [libc++ forum](https://discourse.llvm.org/c/runtimes/libcxx/)
-- [libc++ chat](https://discord.com/channels/636084430946959380/636732894974312448) ([invite link](https://discord.gg/xS7Z362))
+- [libc++ forum]
+- [libc++ chat] ([invite link](https://discord.gg/xS7Z362))
- [Browse libc++ Sources](https://github.com/llvm/llvm-project/tree/main/libcxx/)
+[LLVM Bug Tracker]: https://github.com/llvm/llvm-project/labels/libc++/
+[libc++ forum]: https://discourse.llvm.org/c/runtimes/libcxx/
+[libc++ chat]: https://discord.com/channels/636084430946959380/636732894974312448
diff --git a/libcxx/utils/generate_feature_test_macro_components.py b/libcxx/utils/generate_feature_test_macro_components.py
index a6502286ed552..be34127b930af 100755
--- a/libcxx/utils/generate_feature_test_macro_components.py
+++ b/libcxx/utils/generate_feature_test_macro_components.py
@@ -189,7 +189,7 @@ def add_version_header(tc):
},
{
"name": "__cpp_lib_atomic_min_max",
- "values": {"c++26": 202403}, # P0493R5: Atomic minimum/maximum
+ "values": {"c++26": 202403}, # P0493R5: Atomic minimum/maximum
"headers": ["atomic"],
},
{
@@ -508,7 +508,7 @@ def add_version_header(tc):
{
"name": "__cpp_lib_debugging",
"values": {
- "c++26": 202311, # P2546R5 Debugging Support
+ "c++26": 202311, # P2546R5 Debugging Support
# "c++26": 202403, # P2810R4: is_debugger_present is_replaceable
},
"headers": ["debugging"],
@@ -516,8 +516,18 @@ def add_version_header(tc):
},
{
"name": "__cpp_lib_default_template_type_for_algorithm_values",
- "values": {"c++26": 202403}, # P2248R8: Enabling list-initialization for algorithms
- "headers": ["algorithm", "deque", "forward_list", "list", "ranges", "string", "vector"],
+ "values": {
+ "c++26": 202403
+ }, # P2248R8: Enabling list-initialization for algorithms
+ "headers": [
+ "algorithm",
+ "deque",
+ "forward_list",
+ "list",
+ "ranges",
+ "string",
+ "vector",
+ ],
"unimplemented": True,
},
{
@@ -725,7 +735,9 @@ def add_version_header(tc):
},
{
"name": "__cpp_lib_generate_random",
- "values": {"c++26": 202403}, # P1068R11: Vector API for random number generation
+ "values": {
+ "c++26": 202403
+ }, # P1068R11: Vector API for random number generation
"headers": ["random"],
"unimplemented": True,
},
@@ -1164,7 +1176,7 @@ def add_version_header(tc):
},
{
"name": "__cpp_lib_ranges_concat",
- "values": {"c++26": 202403}, # P2542R8: views::concat
+ "values": {"c++26": 202403}, # P2542R8: views::concat
"headers": ["ranges"],
},
{
@@ -1259,7 +1271,7 @@ def add_version_header(tc):
},
{
"name": "__cpp_lib_reference_wrapper",
- "values": {"c++26": 202403}, # P2944R3: Comparisons for reference_wrapper
+ "values": {"c++26": 202403}, # P2944R3: Comparisons for reference_wrapper
"headers": ["functional"],
},
{
@@ -1464,7 +1476,7 @@ def add_version_header(tc):
{
"name": "__cpp_lib_submdspan",
"values": {
- "c++26": 202306, # P2630R4: submdspan
+ "c++26": 202306, # P2630R4: submdspan
# "c++26": 202403, # P2642R6: Padded mdspan layouts
},
"headers": ["mdspan"],
@@ -1625,7 +1637,14 @@ def add_version_header(tc):
for tc in feature_test_macros:
assert tc["headers"] == sorted(tc["headers"]), tc
assert ("libcxx_guard" in tc) == ("test_suite_guard" in tc), tc
- valid_keys = ["name", "values", "headers", "libcxx_guard", "test_suite_guard", "unimplemented"]
+ valid_keys = [
+ "name",
+ "values",
+ "headers",
+ "libcxx_guard",
+ "test_suite_guard",
+ "unimplemented",
+ ]
assert all(key in valid_keys for key in tc.keys()), tc
# Map from each header to the Lit annotations that should be used for
@@ -2096,34 +2115,31 @@ def get_status_table():
def produce_docs():
- doc_str = """.. _FeatureTestMacroTable:
+ doc_str = """(featuretestmacrotable)=
-==========================
-Feature Test Macro Support
-==========================
+# Feature Test Macro Support
-.. contents::
- :local:
+:::{{contents}}
+:local: true
+:::
-Overview
-========
+## Overview
This file documents the feature test macros currently supported by libc++.
-.. _feature-status:
+(feature-status)=
-Status
-======
+## Status
+```{{eval-rst}}
.. table:: Current Status
:name: feature-status-table
:widths: auto
{status_tables}
+```
-""".format(
- status_tables=create_table(get_status_table(), 4)
- )
+""".format(status_tables=create_table(get_status_table(), 4))
table_doc_path = os.path.join(docs_path, "FeatureTestMacroTable.md")
with open(table_doc_path, "w", newline="\n") as f:
@@ -2132,7 +2148,10 @@ def produce_docs():
Std = NewType("Std", str) # Standard version number
Ftm = NewType("Ftm", str) # The name of a feature test macro
-Value = NewType("Value", str) # The value of a feature test macro including the L suffix
+Value = NewType(
+ "Value", str
+) # The value of a feature test macro including the L suffix
+
@dataclass
class Metadata:
@@ -2156,6 +2175,7 @@ class FtmHeaderTest:
implemented: bool = None
condition: str = None
+
def get_ftms(
data, std_dialects: List[Std], use_implemented_status: bool
) -> Dict[Ftm, Dict[Std, Optional[Value]]]:
@@ -2228,7 +2248,7 @@ def generate_version_header_dialect_block(data: Dict[Ftm, VersionHeader]) -> str
def generate_version_header_implementation(
- data: Dict[Std, Dict[Ftm, VersionHeader]]
+ data: Dict[Std, Dict[Ftm, VersionHeader]],
) -> str:
"""Generates the body of the version header."""
@@ -2246,6 +2266,7 @@ def generate_version_header_implementation(
return "\n\n".join(result)
+
#
# The templates used to create a FTM test file
#
@@ -2296,6 +2317,7 @@ def generate_version_header_implementation(
{tests}\
"""
+
class FeatureTestMacros:
"""Provides all feature-test macro (FTM) output components.
@@ -2455,14 +2477,16 @@ def implemented_ftms(self) -> Dict[Ftm, Dict[Std, Optional[Value]]]:
return get_ftms(self.__data, self.std_dialects, True)
-
def is_implemented(self, ftm: Ftm, std: Std) -> bool:
"""Has the FTM `ftm` been implemented in the dialect `std`?"""
# When a paper for C++20 has not been implemented in libc++, then there will be no
# FTM entry in implemented_ftms for C++23 and later. Similarly, a paper like <format>
# has no entry in standard_ftms for e.g. C++11.
- if not std in self.implemented_ftms[ftm].keys() or not std in self.standard_ftms[ftm].keys():
+ if (
+ not std in self.implemented_ftms[ftm].keys()
+ or not std in self.standard_ftms[ftm].keys()
+ ):
return False
return self.implemented_ftms[ftm][std] == self.standard_ftms[ftm][std]
@@ -2565,18 +2589,17 @@ def header_ftm_data(self, header: str) -> Dict[Std, List[Dict[Ftm, FtmHeaderTest
continue
result[get_std_number(std)].append(
- {
- ftm: FtmHeaderTest(
- values[std],
- self.is_implemented(ftm, std),
- self.ftm_metadata[ftm].test_suite_guard,
- )
- }
+ {
+ ftm: FtmHeaderTest(
+ values[std],
+ self.is_implemented(ftm, std),
+ self.ftm_metadata[ftm].test_suite_guard,
+ )
+ }
)
return result
-
def generate_ftm_test(self, std: Std, ftm: Ftm, value: FtmHeaderTest) -> str:
"""Adds a single `ftm` test for C++ `std` based on the status information in `value`.
@@ -2636,9 +2659,7 @@ def generate_ftm_test(self, std: Std, ftm: Ftm, value: FtmHeaderTest) -> str:
)
if not value.implemented:
- return ftm_not_implemented.format(
- ftm=ftm, value=value.value, dialect=std
- )
+ return ftm_not_implemented.format(ftm=ftm, value=value.value, dialect=std)
if self.ftm_metadata[ftm].test_suite_guard:
return ftm_conditionally_implemented.format(
@@ -2660,7 +2681,7 @@ def generate_header_test_dialect(
for ftm, value in element.items()
)
- def generate_lit_markup(self, header:str) -> str:
+ def generate_lit_markup(self, header: str) -> str:
if not header in lit_markup.keys():
return ""
@@ -2672,28 +2693,30 @@ def generate_header_test_file(self, header: str) -> str:
# FTM block before the first Standard that introduced them.
# This test the macros are not available before this version.
data = ftm_header_test_file_dialect_block.format(
- pp_if="if",
- operator="<",
- dialect=get_std_number(self.std_dialects[0]),
- tests=self.generate_header_test_dialect(
- None, next(iter(self.header_ftm_data(header).values()))
- ),
- )
+ pp_if="if",
+ operator="<",
+ dialect=get_std_number(self.std_dialects[0]),
+ tests=self.generate_header_test_dialect(
+ None, next(iter(self.header_ftm_data(header).values()))
+ ),
+ )
# FTM for all Standards that have FTM defined.
# Note in libc++ the TEST_STD_VER contains 99 for the Standard
# in development, therefore the last entry uses a different #elif.
data += "".join(
- ftm_header_test_file_dialect_block.format(
- pp_if="elif",
- operator="==" if std != get_std_number(self.std_dialects[-1]) else ">",
- dialect=std
+ ftm_header_test_file_dialect_block.format(
+ pp_if="elif",
+ operator="==" if std != get_std_number(self.std_dialects[-1]) else ">",
+ dialect=(
+ std
if std != get_std_number(self.std_dialects[-1])
- else get_std_number(self.std_dialects[-2]),
- tests=self.generate_header_test_dialect(f"c++{std}", values),
- )
- for std, values in self.header_ftm_data(header).items()
+ else get_std_number(self.std_dialects[-2])
+ ),
+ tests=self.generate_header_test_dialect(f"c++{std}", values),
)
+ for std, values in self.header_ftm_data(header).items()
+ )
# The final #endif for the last #elif block.
data += f"\n#endif // TEST_STD_VER > {get_std_number(self.std_dialects[-2])}"
@@ -2708,7 +2731,7 @@ def generate_header_test_file(self, header: str) -> str:
if header in self.__unavailable_headers
else ftm_header_test_file_include_unconditional.format(header=header)
),
- data=data
+ data=data,
)
def generate_header_test_directory(self, path: os.path) -> None:
@@ -2736,7 +2759,8 @@ def main():
ftm = FeatureTestMacros(
os.path.join(
source_root, "test", "libcxx", "feature_test_macro", "test_data.json"
- ), headers_not_available
+ ),
+ headers_not_available,
)
version_header_path = os.path.join(include_path, "version")
with open(version_header_path, "w", newline="\n") as f:
More information about the llvm-branch-commits
mailing list