Written by the Libc++ Team
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.
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. All LLVM releases may be downloaded from the LLVM releases web site.
For more information about libc++, please see the Libc++ Web Site or the LLVM Web Site.
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.
- P2747R2:
constexpr
placement new (Github) - P2609R3: Relaxing Ranges Just A Smidge (Github)
- P2985R0: A type trait for detecting virtual base classes (Github)
std::jthread
and<stop_token>
are not guarded behind-fexperimental-library
anymore
- The
lexicographical_compare
andranges::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 makestd::get_temporary_buffer
andstd::return_temporary_buffer
available. - The
_LIBCPP_ENABLE_CXX20_REMOVED_UNCAUGHT_EXCEPTION
macro has been added to makestd::uncaught_exception
available in C++20 and later modes.
- TODO: The
LIBCXX_ENABLE_ASSERTIONS
CMake variable and the_LIBCPP_ENABLE_ASSERTIONS
macro that were used to enable the safe mode will be removed in LLVM 20. - 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
. - TODO: The relational operators for
std::chrono::weekday
will be removed entirely, and the_LIBCPP_ENABLE_REMOVED_WEEKDAY_RELATIONAL_OPERATORS
macro that was used to re-enable this extension will be ignored in LLVM 20. - 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.
- TODO
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.
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++.
- TODO
- TODO