summaryrefslogtreecommitdiff
path: root/libcxx/docs
diff options
context:
space:
mode:
authorLouis Dionne <ldionne.2@gmail.com>2023-03-06 15:43:26 -0500
committerLouis Dionne <ldionne.2@gmail.com>2023-03-19 10:14:32 -0400
commitc0cde79e9e3b3c5bb54c55b0eabe8142674028a4 (patch)
tree7a5e46d64b03c7e2d23b37ec1cdee85e528044ec /libcxx/docs
parentfb066c4622c8665612961cc74d2715ff32943272 (diff)
downloadllvm-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.rst9
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
----------------------------------