blob: 8d11c1bc2285de38b7714ebd4324e83aaf02b65c [file] [log] [blame]
Hans Wennborg003a9982019-07-18 11:51:05 +00001=========================================
Tom Stellardf3752922022-07-26 19:43:55 -07002Libc++ 16.0.0 (In-Progress) Release Notes
Hans Wennborg003a9982019-07-18 11:51:05 +00003=========================================
Louis Dionne42222072018-09-06 14:46:22 +00004
5.. contents::
6 :local:
7 :depth: 2
8
Hans Wennborg3329a842018-09-10 08:57:12 +00009Written by the `Libc++ Team <https://libcxx.llvm.org>`_
Louis Dionne42222072018-09-06 14:46:22 +000010
11.. warning::
12
Tom Stellardf3752922022-07-26 19:43:55 -070013 These are in-progress notes for the upcoming libc++ 16 release.
Louis Dionne42222072018-09-06 14:46:22 +000014 Release notes for previous releases can be found on
Hans Wennborg3329a842018-09-10 08:57:12 +000015 `the Download Page <https://releases.llvm.org/download.html>`_.
Louis Dionne42222072018-09-06 14:46:22 +000016
17Introduction
18============
19
20This document contains the release notes for the libc++ C++ Standard Library,
Tom Stellardf3752922022-07-26 19:43:55 -070021part of the LLVM Compiler Infrastructure, release 16.0.0. Here we describe the
Louis Dionne42222072018-09-06 14:46:22 +000022status of libc++ in some detail, including major improvements from the previous
23release and new feature work. For the general LLVM release notes, see `the LLVM
Hans Wennborg3329a842018-09-10 08:57:12 +000024documentation <https://llvm.org/docs/ReleaseNotes.html>`_. All LLVM releases may
25be downloaded from the `LLVM releases web site <https://llvm.org/releases/>`_.
Louis Dionne42222072018-09-06 14:46:22 +000026
27For more information about libc++, please see the `Libc++ Web Site
Hans Wennborg3329a842018-09-10 08:57:12 +000028<https://libcxx.llvm.org>`_ or the `LLVM Web Site <https://llvm.org>`_.
Louis Dionne42222072018-09-06 14:46:22 +000029
Hans Wennborgfc14f4e2020-01-15 10:02:56 +010030Note that if you are reading this file from a Git checkout or the
Louis Dionne42222072018-09-06 14:46:22 +000031main Libc++ web page, this document applies to the *next* release, not
32the current one. To see the release notes for a specific release, please
Hans Wennborg3329a842018-09-10 08:57:12 +000033see the `releases page <https://llvm.org/releases/>`_.
Louis Dionne42222072018-09-06 14:46:22 +000034
Tom Stellardf3752922022-07-26 19:43:55 -070035What's New in Libc++ 16.0.0?
Hans Wennborg003a9982019-07-18 11:51:05 +000036============================
Louis Dionne42222072018-09-06 14:46:22 +000037
Nikolas Klauser4f4a9bd2022-06-17 20:20:48 +020038Implemented Papers
39------------------
Igor Zhukova925f622022-08-02 12:46:31 +020040- P2499R0 - ``string_view`` range constructor should be ``explicit``
Nikolas Klauser73015c12022-08-13 13:52:35 +020041- P2417R2 - A more constexpr bitset
Louis Dionne42222072018-09-06 14:46:22 +000042
Louis Dionne1ce86ad2022-07-21 12:48:14 -040043Improvements and New Features
44-----------------------------
Nikolas Klauser4f4a9bd2022-06-17 20:20:48 +020045
Louis Dionne1ce86ad2022-07-21 12:48:14 -040046Deprecations and Removals
47-------------------------
Mark de Weverf6df9e82022-08-20 10:34:26 +020048- Several incidental transitive includes have been removed from libc++. Those
49 includes are removed based on the language version used. Incidental transitive
50 inclusions of the following headers have been removed:
51
52 - C++20: ``chrono``
53 - C++2b: ``algorithm``, ``array``, ``atomic``, ``bit``, ``chrono``,
54 ``climits``, ``cmath``, ``compare``, ``concepts``, ``cstdlib``,
55 ``cstring``, ``ctime``, ``exception``, ``functional``,
56 ``initializer_list``, ``iosfwd``, ``iterator``, ``memory``, ``new``,
57 ``optional``, ``ratio``, ``stdexcept``, ``tuple``, ``typeinfo``,
58 ``unordered_map``, ``utility``, ``variant``, ``vector``.
59
60 Users can also remove all incidental transitive includes by defining
61 ``_LIBCPP_REMOVE_TRANSITIVE_INCLUDES`` regardless of the language version
62 in use. Note that in the future, libc++ reserves the right to remove
63 incidental transitive includes more aggressively, in particular regardless
64 of the language version in use.
65
Louis Dionne12507ef2022-03-07 09:00:17 -050066
Louis Dionne1ce86ad2022-07-21 12:48:14 -040067Upcoming Deprecations and Removals
68----------------------------------
69
Adrian Vogelsgesang55e0c492022-07-31 16:12:42 -070070API Changes
71-----------
72- The comparison operators on ``thread::id`` are now defined as free-standing
73 functions instead of as hidden friends, in conformance with the C++ standard.
74 Also see `issue 56187 <https://github.com/llvm/llvm-project/issues/56187>`_.
75
Nikolas Klauser3e7bca12022-08-19 15:41:56 +020076- ``_LIBCPP_ENABLE_NODISCARD`` and ``_LIBCPP_DISABLE_NODISCARD_AFTER_CXX17`` are no longer respected.
77 Any standards-required ``[[nodiscard]]`` applications in C++20 are now always enabled. Any extended applications
Nikolas Klauserbbb13612022-09-01 12:02:58 +020078 are now enabled by default and can be disabled by defining ``_LIBCPP_DISABLE_NODISCARD_EXT``.
Nikolas Klauser3e7bca12022-08-19 15:41:56 +020079
Louis Dionne1ce86ad2022-07-21 12:48:14 -040080ABI Affecting Changes
81---------------------
Joe Loser8fcb1d92021-10-28 15:38:02 -040082
Louis Dionne14918c82021-10-18 13:58:31 -040083Build System Changes
84--------------------