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