blob: 7558fd2a9b7b6e5545198ea7b984dda285081e60 [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-------------------------
Louis Dionneeafd6fb2022-09-26 09:45:14 -040053- ``unary_function`` and ``binary_function`` are no longer provided in C++17 and newer Standard modes.
54 They can be re-enabled with ``_LIBCPP_ENABLE_CXX17_REMOVED_UNARY_BINARY_FUNCTION``.
55
Mark de Weverf6df9e82022-08-20 10:34:26 +020056- Several incidental transitive includes have been removed from libc++. Those
57 includes are removed based on the language version used. Incidental transitive
58 inclusions of the following headers have been removed:
59
60 - C++20: ``chrono``
61 - C++2b: ``algorithm``, ``array``, ``atomic``, ``bit``, ``chrono``,
Mark de Weveradc1d1c2022-09-03 13:37:09 +020062 ``climits``, ``cmath``, ``compare``, ``concepts``, ``cstdarg`, ``cstddef``,
63 ``cstdint``, ``cstdlib``, ``cstring``, ``ctime``, ``exception``,
64 ``functional``, ``initializer_list``, ``iosfwd``, ``iterator``, ``limits``,
65 ``memory``, ``new``, ``numeric``, ``optional``, ``ratio``, ``stdexcept``,
66 ``string``, ``tuple``, ``type_traits``, ``typeinfo``, ``unordered_map``,
67 ``utility``, ``variant``, ``vector``.
Mark de Weverf6df9e82022-08-20 10:34:26 +020068
69 Users can also remove all incidental transitive includes by defining
70 ``_LIBCPP_REMOVE_TRANSITIVE_INCLUDES`` regardless of the language version
71 in use. Note that in the future, libc++ reserves the right to remove
72 incidental transitive includes more aggressively, in particular regardless
73 of the language version in use.
74
Louis Dionne591c9912022-05-26 10:58:28 -040075- The legacy testing system for libc++, libc++abi and libunwind has been removed.
76 All known clients have been migrated to the new configuration system, but please
77 reach out to the libc++ developers if you find something missing in the new
78 configuration system.
Louis Dionne12507ef2022-03-07 09:00:17 -050079
Louis Dionne1ce86ad2022-07-21 12:48:14 -040080Upcoming Deprecations and Removals
81----------------------------------
82
Adrian Vogelsgesang55e0c492022-07-31 16:12:42 -070083API Changes
84-----------
85- The comparison operators on ``thread::id`` are now defined as free-standing
86 functions instead of as hidden friends, in conformance with the C++ standard.
87 Also see `issue 56187 <https://github.com/llvm/llvm-project/issues/56187>`_.
88
Nikolas Klauser3e7bca12022-08-19 15:41:56 +020089- ``_LIBCPP_ENABLE_NODISCARD`` and ``_LIBCPP_DISABLE_NODISCARD_AFTER_CXX17`` are no longer respected.
90 Any standards-required ``[[nodiscard]]`` applications in C++20 are now always enabled. Any extended applications
Nikolas Klauserbbb13612022-09-01 12:02:58 +020091 are now enabled by default and can be disabled by defining ``_LIBCPP_DISABLE_NODISCARD_EXT``.
Nikolas Klauser3e7bca12022-08-19 15:41:56 +020092
Louis Dionnec23f69f2022-09-19 15:38:18 -040093- ``_LIBCPP_VERSION`` was previously defined to e.g. ``15001`` to represent LLVM 15.0.01, but this value had been
94 left undocumented. Starting with LLVM 16, ``_LIBCPP_VERSION`` will contain the version of LLVM represented as
95 ``XXYYZZ``. In other words, ``_LIBCPP_VERSION`` is gaining a digit. This should not be an issue for existing
96 code, since using e.g. ``_LIBCPP_VERSION > 15000`` will still give the right answer now that ``_LIBCPP_VERSION``
97 is defined as e.g. ``160000`` (with one more digit).
98
Louis Dionne1ce86ad2022-07-21 12:48:14 -040099ABI Affecting Changes
100---------------------
Louis Dionneade70ff2022-09-06 17:07:18 -0400101- In freestanding mode, ``atomic<small enum class>`` does not contain a lock byte anymore if the platform
102 can implement lockfree atomics for that size. More specifically, in LLVM <= 11.0.1, an ``atomic<small enum class>``
103 would not contain a lock byte. This was broken in LLVM >= 12.0.0, where it started including a lock byte despite
104 the platform supporting lockfree atomics for that size. Starting in LLVM 15.0.1, the ABI for these types has been
105 restored to what it used to be (no lock byte), which is the most efficient implementation.
106
107 This ABI break only affects users that compile with ``-ffreestanding``, and only for ``atomic<T>`` where ``T``
108 is a non-builtin type that could be lockfree on the platform. See https://llvm.org/D133377 for more details.
Joe Loser8fcb1d92021-10-28 15:38:02 -0400109
Louis Dionne14918c82021-10-18 13:58:31 -0400110Build System Changes
111--------------------
Louis Dionne6a0104e2022-09-21 09:50:53 -0400112- Support for ``libcxx``, ``libcxxabi`` and ``libunwind`` in ``LLVM_ENABLE_PROJECTS`` has officially
113 been removed. Instead, please build according to :ref:`these instructions <build instructions>`.