blob: 2f0fb9d88d95466d6821106261a977f7f8b16574 [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-----------------------------
Tom Honermann8a07d8c2022-09-10 10:16:20 -040047- Declarations of ``std::c8rtomb()`` and ``std::mbrtoc8()`` from P0482R6 are
48 now provided when implementations in the global namespace are provided by
49 the C library.
Nikolas Klauser4f4a9bd2022-06-17 20:20:48 +020050
Louis Dionne1ce86ad2022-07-21 12:48:14 -040051Deprecations and Removals
52-------------------------
Mark de Weverf6df9e82022-08-20 10:34:26 +020053- Several incidental transitive includes have been removed from libc++. Those
54 includes are removed based on the language version used. Incidental transitive
55 inclusions of the following headers have been removed:
56
57 - C++20: ``chrono``
58 - C++2b: ``algorithm``, ``array``, ``atomic``, ``bit``, ``chrono``,
Mark de Weveradc1d1c2022-09-03 13:37:09 +020059 ``climits``, ``cmath``, ``compare``, ``concepts``, ``cstdarg`, ``cstddef``,
60 ``cstdint``, ``cstdlib``, ``cstring``, ``ctime``, ``exception``,
61 ``functional``, ``initializer_list``, ``iosfwd``, ``iterator``, ``limits``,
62 ``memory``, ``new``, ``numeric``, ``optional``, ``ratio``, ``stdexcept``,
63 ``string``, ``tuple``, ``type_traits``, ``typeinfo``, ``unordered_map``,
64 ``utility``, ``variant``, ``vector``.
Mark de Weverf6df9e82022-08-20 10:34:26 +020065
66 Users can also remove all incidental transitive includes by defining
67 ``_LIBCPP_REMOVE_TRANSITIVE_INCLUDES`` regardless of the language version
68 in use. Note that in the future, libc++ reserves the right to remove
69 incidental transitive includes more aggressively, in particular regardless
70 of the language version in use.
71
Louis Dionne12507ef2022-03-07 09:00:17 -050072
Louis Dionne1ce86ad2022-07-21 12:48:14 -040073Upcoming Deprecations and Removals
74----------------------------------
75
Adrian Vogelsgesang55e0c492022-07-31 16:12:42 -070076API Changes
77-----------
78- The comparison operators on ``thread::id`` are now defined as free-standing
79 functions instead of as hidden friends, in conformance with the C++ standard.
80 Also see `issue 56187 <https://github.com/llvm/llvm-project/issues/56187>`_.
81
Nikolas Klauser3e7bca12022-08-19 15:41:56 +020082- ``_LIBCPP_ENABLE_NODISCARD`` and ``_LIBCPP_DISABLE_NODISCARD_AFTER_CXX17`` are no longer respected.
83 Any standards-required ``[[nodiscard]]`` applications in C++20 are now always enabled. Any extended applications
Nikolas Klauserbbb13612022-09-01 12:02:58 +020084 are now enabled by default and can be disabled by defining ``_LIBCPP_DISABLE_NODISCARD_EXT``.
Nikolas Klauser3e7bca12022-08-19 15:41:56 +020085
Louis Dionne1ce86ad2022-07-21 12:48:14 -040086ABI Affecting Changes
87---------------------
Joe Loser8fcb1d92021-10-28 15:38:02 -040088
Louis Dionne14918c82021-10-18 13:58:31 -040089Build System Changes
90--------------------