blob: 9831d03a6ec45798cdf750e8bc17b4652074234a [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
Igor Zhukov57ea60e2022-08-21 22:21:08 +070042- P2445R1 - ``std::forward_like``
Igor Zhukov85a33632022-09-03 18:49:50 +070043- P2273R3 - Making ``std::unique_ptr`` constexpr
Louis Dionne42222072018-09-06 14:46:22 +000044
Louis Dionne1ce86ad2022-07-21 12:48:14 -040045Improvements and New Features
46-----------------------------
Nikolas Klauser4f4a9bd2022-06-17 20:20:48 +020047
Louis Dionne1ce86ad2022-07-21 12:48:14 -040048Deprecations and Removals
49-------------------------
Mark de Weverf6df9e82022-08-20 10:34:26 +020050- Several incidental transitive includes have been removed from libc++. Those
51 includes are removed based on the language version used. Incidental transitive
52 inclusions of the following headers have been removed:
53
54 - C++20: ``chrono``
55 - C++2b: ``algorithm``, ``array``, ``atomic``, ``bit``, ``chrono``,
56 ``climits``, ``cmath``, ``compare``, ``concepts``, ``cstdlib``,
57 ``cstring``, ``ctime``, ``exception``, ``functional``,
58 ``initializer_list``, ``iosfwd``, ``iterator``, ``memory``, ``new``,
59 ``optional``, ``ratio``, ``stdexcept``, ``tuple``, ``typeinfo``,
60 ``unordered_map``, ``utility``, ``variant``, ``vector``.
61
62 Users can also remove all incidental transitive includes by defining
63 ``_LIBCPP_REMOVE_TRANSITIVE_INCLUDES`` regardless of the language version
64 in use. Note that in the future, libc++ reserves the right to remove
65 incidental transitive includes more aggressively, in particular regardless
66 of the language version in use.
67
Louis Dionne12507ef2022-03-07 09:00:17 -050068
Louis Dionne1ce86ad2022-07-21 12:48:14 -040069Upcoming Deprecations and Removals
70----------------------------------
71
Adrian Vogelsgesang55e0c492022-07-31 16:12:42 -070072API Changes
73-----------
74- The comparison operators on ``thread::id`` are now defined as free-standing
75 functions instead of as hidden friends, in conformance with the C++ standard.
76 Also see `issue 56187 <https://github.com/llvm/llvm-project/issues/56187>`_.
77
Nikolas Klauser3e7bca12022-08-19 15:41:56 +020078- ``_LIBCPP_ENABLE_NODISCARD`` and ``_LIBCPP_DISABLE_NODISCARD_AFTER_CXX17`` are no longer respected.
79 Any standards-required ``[[nodiscard]]`` applications in C++20 are now always enabled. Any extended applications
Nikolas Klauserbbb13612022-09-01 12:02:58 +020080 are now enabled by default and can be disabled by defining ``_LIBCPP_DISABLE_NODISCARD_EXT``.
Nikolas Klauser3e7bca12022-08-19 15:41:56 +020081
Louis Dionne1ce86ad2022-07-21 12:48:14 -040082ABI Affecting Changes
83---------------------
Joe Loser8fcb1d92021-10-28 15:38:02 -040084
Louis Dionne14918c82021-10-18 13:58:31 -040085Build System Changes
86--------------------