Libc++ 24.0.0 Release Notes¶
Written by the Libc++ Team
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.
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. 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.
What’s New in Libc++ 24.0.0?¶
Implemented Papers¶
P0493R5: Atomic minimum/maximum (Github)
P3059R2: Making user-defined constructors of view iterators/sentinels private (Github)
P0792R14:
function_ref: a type-erased callable reference (Github)P3016R6: Resolve inconsistencies in begin/end for
valarrayand braced initializer lists (Github)P3948R1:
constant_wrapperis the only tool needed for passing constant expressions via function arguments (Github)P3961R1: Less double indirection in
function_ref(RU-220) (Github)P1901R2: Enabling the Use of
weak_ptras Keys in Unordered Associative Containers (Github)P0528R3: The Curious Case of Padding Bits, Featuring Atomic Compare-and-Exchange (Github)
Improvements and New Features¶
Deprecations and Removals¶
The
std::launch::anyenumerator that was accidentally provided as an extension is now deprecated. It will be removed in LLVM 25.
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_LLVM23macro 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_WARNINGScan be defined as an escape hatch. This escape hatch will be removed in LLVM 24.
Announcements About Future Releases¶
std::allocatoris trivially default constructible since LLVM 22. In LLVM 23 and LLVM 24, the_LIBCPP_DEPRECATED_ABI_NON_TRIVIAL_ALLOCATORmacro 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[]returnsboolsince LLVM 22, fixing a conformance bug. In LLVM 23 and LLVM 24, the_LIBCPP_DEPRECATED_ABI_BITSET_CONST_SUBSCRIPT_RETURN_REFmacro 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.