[libc++] Keep char_traits<T> for arbitrary T around until LLVM 18
This is in response to failures seen after landing D138307.
Differential Revision: https://reviews.llvm.org/D138596
NOKEYCHECK=True
GitOrigin-RevId: 08a0faf4cd32bce6c51027ea9b5ec351747995b4
diff --git a/docs/ReleaseNotes.rst b/docs/ReleaseNotes.rst
index bbee243..63d6f29 100644
--- a/docs/ReleaseNotes.rst
+++ b/docs/ReleaseNotes.rst
@@ -100,19 +100,14 @@
- The ``_LIBCPP_DEBUG`` macro is not honored anymore, and it is an error to try to use it. Please migrate to
``_LIBCPP_ENABLE_DEBUG_MODE`` instead.
-- A base template for ``std::char_traits`` is not provided anymore. The Standard mandates that the library
- provides specializations for several types like ``char`` and ``wchar_t``, which libc++ does. However, libc++
- used to additionally provide a default implementation for ``std::char_traits<T>`` for arbitrary ``T``. Not
- only does the Standard not mandate that one is provided, but such an implementation is bound to be incorrect
- for some types, so it has been removed. As an exception, ``std::char_traits<unsigned char>`` and
- ``std::char_traits<signed char>`` are kept for a limited period of time and marked as deprecated to let people
- move off of those, since we know there were some users of those. They will be removed in LLVM 18.
-
Upcoming Deprecations and Removals
----------------------------------
-- The specializations of ``std::char_traits`` for ``unsigned char`` and ``signed char`` are provided until
- LLVM 18. Those non-standard specializations are provided for a transition period and marked as deprecated
- but will be removed in the future.
+- The base template for ``std::char_traits`` has been marked as deprecated and will be removed in LLVM 18. If
+ you are using ``std::char_traits`` with types other than ``char``, ``wchar_t``, ``char8_t``, ``char16_t``,
+ ``char32_t`` or a custom character type for which you specialized ``std::char_traits``, your code will stop
+ working when we remove the base template. The Standard does not mandate that a base template is provided,
+ and such a base template is bound to be incorrect for some types, which could currently cause unexpected
+ behavior while going undetected.
API Changes
-----------