diff options
author | Louis Dionne <ldionne.2@gmail.com> | 2023-03-06 15:43:26 -0500 |
---|---|---|
committer | Louis Dionne <ldionne.2@gmail.com> | 2023-03-19 10:14:32 -0400 |
commit | c0cde79e9e3b3c5bb54c55b0eabe8142674028a4 (patch) | |
tree | 7a5e46d64b03c7e2d23b37ec1cdee85e528044ec /libcxx/docs | |
parent | fb066c4622c8665612961cc74d2715ff32943272 (diff) | |
download | llvm-c0cde79e9e3b3c5bb54c55b0eabe8142674028a4.tar.gz |
[libc++] Remove C++03 extensions for std::allocator_arg & friends
As explained in the release note, libc++ used to provide various
global variables as an extension in C++03 mode. Unfortunately, that
made our definition non-conforming in all standard modes. This was
never a big problem until recently, since we are trying to support
C++20 Modules in libc++, and that requires cleaning up the definition
of these variables.
This change is the first in a series of changes to achieve our end goal.
This patch removes the ability for users to rely on the (incorrect)
definition of those global variables inside the shared library. The
plan is to then remove those definitions from the shared library
(which is an ABI break but I don't think it will have impact), and
finally to make our definition of those variables conforming in all
standard modes.
Differential Revision: https://reviews.llvm.org/D145422
Diffstat (limited to 'libcxx/docs')
-rw-r--r-- | libcxx/docs/ReleaseNotes.rst | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/libcxx/docs/ReleaseNotes.rst b/libcxx/docs/ReleaseNotes.rst index 386ecc904a9b..aa14e6bfcd97 100644 --- a/libcxx/docs/ReleaseNotes.rst +++ b/libcxx/docs/ReleaseNotes.rst @@ -73,6 +73,15 @@ Deprecations and Removals from the Standard since it was never used, the proper specialization to use instead is ``template<size_t N> struct formatter<charT[N], charT>``. +- Libc++ used to provide some C++11 tag type global variables in C++03 as an extension, which are removed in + this release. Those variables were ``std::allocator_arg``, ``std::defer_lock``, ``std::try_to_lock``, + ``std::adopt_lock``, and ``std::piecewise_construct``. Note that the types associated to those variables are + still provided in C++03 as an extension (e.g. ``std::piecewise_construct_t``). Providing those variables in + C++03 mode made it impossible to define them properly -- C++11 mandated that they be ``constexpr`` variables, + which is impossible in C++03 mode. Furthermore, C++17 mandated that they be ``inline constexpr`` variables, + which led to ODR violations when mixed with the C++03 definition. Cleaning this up is required for libc++ to + make progress on support for C++20 modules. + Upcoming Deprecations and Removals ---------------------------------- |