| ========================================= |
| Libc++ 13.0.0 (In-Progress) Release Notes |
| ========================================= |
| |
| .. contents:: |
| :local: |
| :depth: 2 |
| |
| Written by the `Libc++ Team <https://libcxx.llvm.org>`_ |
| |
| .. warning:: |
| |
| These are in-progress notes for the upcoming libc++ 13 release. |
| Release notes for previous releases can be found on |
| `the Download Page <https://releases.llvm.org/download.html>`_. |
| |
| Introduction |
| ============ |
| |
| This document contains the release notes for the libc++ C++ Standard Library, |
| part of the LLVM Compiler Infrastructure, release 13.0.0. Here we describe the |
| status of libc++ in some detail, including major improvements from the previous |
| release and new feature work. For the general LLVM release notes, see `the LLVM |
| documentation <https://llvm.org/docs/ReleaseNotes.html>`_. All LLVM releases may |
| be downloaded from the `LLVM releases web site <https://llvm.org/releases/>`_. |
| |
| For more information about libc++, please see the `Libc++ Web Site |
| <https://libcxx.llvm.org>`_ or the `LLVM Web Site <https://llvm.org>`_. |
| |
| Note that if you are reading this file from a Git checkout or the |
| main Libc++ web page, this document applies to the *next* release, not |
| the current one. To see the release notes for a specific release, please |
| see the `releases page <https://llvm.org/releases/>`_. |
| |
| What's New in Libc++ 13.0.0? |
| ============================ |
| |
| - Support for older compilers has been removed. Several additional platforms |
| are now officially supported. :ref:`platform_and_compiler_support` contains |
| the complete overview of platforms and compilers supported by libc++. |
| - The large headers ``<algorithm>``, ``<iterator>``, and ``<utility>`` have |
| been split in more granular headers. This reduces the size of included code |
| when using libc++. This may lead to missing includes after upgrading to |
| libc++13. |
| |
| New Features |
| ------------ |
| |
| - ``std::filesystem`` is now feature complete for the Windows platform using |
| MinGW. MSVC isn't supported since it lacks 128-bit integer support. |
| - The implementation of the C++20 concepts library has been completed. |
| - Several C++20 ``constexpr`` papers have been completed: |
| |
| - `P0879R0 <https://wg21.link/P0879R0>`_ ``constexpr`` for ``std::swap()`` |
| and swap related functions |
| - `P1032R1 <https://wg21.link/P1032R1>`_ Misc ``constexpr`` bits |
| - `P0883 <https://wg21.link/P0883>`_ Fixing Atomic Initialization |
| |
| - More C++20 features have been implemented. :doc:`Status/Cxx20` has the full |
| overview of libc++'s C++20 implementation status. |
| - More C++2b features have been implemented. :doc:`Status/Cxx2b` has the |
| full overview of libc++'s C++2b implementation status. |
| - The CMake option ``LIBCXX_ENABLE_INCOMPLETE_FEATURES`` has been added. This |
| option allows libc++ vendors to disable headers that aren't production |
| quality yet. Currently, turning the option off disables the headers |
| ``<format>`` and ``<ranges>``. |
| - The documentation conversion from html to restructured text has been |
| completed. |
| |
| API Changes |
| ----------- |
| |
| - There has been several changes in the tuple constructors provided by libc++. |
| Those changes were made as part of an effort to regularize libc++'s tuple |
| implementation, which contained several subtle bugs due to these extensions. |
| If you notice a build breakage when initializing a tuple, make sure you |
| properly initialize all the tuple elements - this is probably the culprit. |
| |
| In particular, the extension allowing tuples to be constructed from fewer |
| elements than the number of elements in the tuple (in which case the remaining |
| elements would be default-constructed) has been removed. See https://godbolt.org/z/sqozjd. |
| |
| Also, the extension allowing a tuple to be constructed from an array has been |
| removed. See https://godbolt.org/z/5esqbW. |
| |
| - The ``std::pointer_safety`` utility and related functions are not available |
| in C++03 anymore. Furthermore, in other standard modes, it has changed from |
| a struct to a scoped enumeration, which is an ABI break. Finally, the |
| ``std::get_pointer_safety`` function was previously in the dylib, but it |
| is now defined as inline in the headers. |
| |
| While this is technically both an API and an ABI break, we do not expect |
| ``std::pointer_safety`` to have been used at all in real code, since we |
| never implemented the underlying support for garbage collection. |
| |
| - The `LIBCXXABI_ENABLE_PIC` CMake option was removed. If you are building your |
| own libc++abi from source and were using `LIBCXXABI_ENABLE_PIC`, please use |
| `CMAKE_POSITION_INDEPENDENT_CODE=ON` instead. |
| |
| - When the header <variant> is included, it will no longer include <array> transitively. |
| |
| - The ``std::result_of`` and ``std::is_literal_type`` type traits have been removed in |
| C++20 mode. |