xref: /openbsd-src/gnu/llvm/libcxx/docs/ReleaseNotes.rst (revision 5a38ef86d0b61900239c7913d24a05e7b88a58f0)
1=========================================
2Libc++ 13.0.0 (In-Progress) Release Notes
3=========================================
4
5.. contents::
6   :local:
7   :depth: 2
8
9Written by the `Libc++ Team <https://libcxx.llvm.org>`_
10
11.. warning::
12
13   These are in-progress notes for the upcoming libc++ 13 release.
14   Release notes for previous releases can be found on
15   `the Download Page <https://releases.llvm.org/download.html>`_.
16
17Introduction
18============
19
20This document contains the release notes for the libc++ C++ Standard Library,
21part of the LLVM Compiler Infrastructure, release 13.0.0. Here we describe the
22status 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
24documentation <https://llvm.org/docs/ReleaseNotes.html>`_. All LLVM releases may
25be downloaded from the `LLVM releases web site <https://llvm.org/releases/>`_.
26
27For more information about libc++, please see the `Libc++ Web Site
28<https://libcxx.llvm.org>`_ or the `LLVM Web Site <https://llvm.org>`_.
29
30Note that if you are reading this file from a Git checkout or the
31main Libc++ web page, this document applies to the *next* release, not
32the current one. To see the release notes for a specific release, please
33see the `releases page <https://llvm.org/releases/>`_.
34
35What's New in Libc++ 13.0.0?
36============================
37
38- Support for older compilers has been removed. Several additional platforms
39  are now officially supported. :ref:`platform_and_compiler_support` contains
40  the complete overview of platforms and compilers supported by libc++.
41- The large headers ``<algorithm>``, ``<iterator>``, and ``<utility>`` have
42  been split in more granular headers. This reduces the size of included code
43  when using libc++. This may lead to missing includes after upgrading to
44  libc++13.
45
46New Features
47------------
48
49- ``std::filesystem`` is now feature complete for the Windows platform using
50  MinGW. MSVC isn't supported since it lacks 128-bit integer support.
51- The implementation of the C++20 concepts library has been completed.
52- Several C++20 ``constexpr`` papers have been completed:
53
54  - `P0879R0 <https://wg21.link/P0879R0>`_ ``constexpr`` for ``std::swap()``
55    and swap related functions
56  - `P1032R1 <https://wg21.link/P1032R1>`_ Misc ``constexpr`` bits
57  - `P0883 <https://wg21.link/P0883>`_ Fixing Atomic Initialization
58
59- More C++20 features have been implemented. :doc:`Status/Cxx20` has the full
60  overview of libc++'s C++20 implementation status.
61- More C++2b features have been implemented. :doc:`Status/Cxx2b` has the
62  full overview of libc++'s C++2b implementation status.
63- The CMake option ``LIBCXX_ENABLE_INCOMPLETE_FEATURES`` has been added. This
64  option allows libc++ vendors to disable headers that aren't production
65  quality yet. Currently, turning the option off disables the headers
66  ``<format>`` and ``<ranges>``.
67- The documentation conversion from html to restructured text has been
68  completed.
69
70API Changes
71-----------
72
73- There has been several changes in the tuple constructors provided by libc++.
74  Those changes were made as part of an effort to regularize libc++'s tuple
75  implementation, which contained several subtle bugs due to these extensions.
76  If you notice a build breakage when initializing a tuple, make sure you
77  properly initialize all the tuple elements - this is probably the culprit.
78
79  In particular, the extension allowing tuples to be constructed from fewer
80  elements than the number of elements in the tuple (in which case the remaining
81  elements would be default-constructed) has been removed. See https://godbolt.org/z/sqozjd.
82
83  Also, the extension allowing a tuple to be constructed from an array has been
84  removed. See https://godbolt.org/z/5esqbW.
85
86- The ``std::pointer_safety`` utility and related functions are not available
87  in C++03 anymore. Furthermore, in other standard modes, it has changed from
88  a struct to a scoped enumeration, which is an ABI break. Finally, the
89  ``std::get_pointer_safety`` function was previously in the dylib, but it
90  is now defined as inline in the headers.
91
92  While this is technically both an API and an ABI break, we do not expect
93  ``std::pointer_safety`` to have been used at all in real code, since we
94  never implemented the underlying support for garbage collection.
95
96- The `LIBCXXABI_ENABLE_PIC` CMake option was removed. If you are building your
97  own libc++abi from source and were using `LIBCXXABI_ENABLE_PIC`, please use
98  `CMAKE_POSITION_INDEPENDENT_CODE=ON` instead.
99
100- When the header <variant> is included, it will no longer include <array> transitively.
101
102- The ``std::result_of`` and ``std::is_literal_type`` type traits have been removed in
103  C++20 mode.
104