Libc++ 22.0.0 (In-Progress) Release Notes¶
Written by the Libc++ Team
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.
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. 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++ 22.0.0?¶
Implemented Papers¶
Improvements and New Features¶
The performance of
map::map(const map&)
has been improved up to 2.3xThe performance of
map::operator=(const map&)
has been improved by up to 11xThe performance of
unordered_set::unordered_set(const unordered_set&)
has been improved by up to 3.3x.The performance of
unordered_set::operator=(const unordered_set&)
has been improved by up to 5x.The performance of
map::erase
andset::erase
has been improved by up to 2xThe performance of
find(key)
inmap
,set
,multimap
andmultiset
has been improved by up to 2.3xSome reallocations are now avoided in std::filesystem::path::lexically_relative, resulting in a performance improvement of up to 1.7x.
The performance of the
(iterator, iterator)
constructors ofmap
,set
,multimap
andmultiset
has been improved by up to 3xThe performance of
insert(iterator, iterator)
ofmap
,set
,multimap
andmultiset
has been improved by up to 2.5xThe performance of
erase(iterator, iterator)
in the unordered containers has been improved by up to 1.9xThe performance of
map::insert_or_assign
has been improved by up to 2xofstream::write
has been optimized to pass through large strings to system calls directly instead of copying them in chunks into a buffer.
Deprecations and Removals¶
Potentially breaking changes¶
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 fromfind
will be broken, andlower_bound
orequal_range
should be used instead.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¶
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.