You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
[libc++] Remove deprecated char_traits base template
This patch has quite a bit of history. First, it must be noted that
the Standard only specifies specializations of char_traits for char,
char8_t, char16_t, char32_t and wchar_t. However, before this patch,
we would provide a base template that accepted anything, and as a
result code like `std::basic_string<long long>` would compile but
nobody knows what it really does. It basically compiles by accident.
We marked the base template as deprecated in LLVM 15 or 16 and were
planning on removing it in LLVM 17, which we did in e30a148.
However, it turned out that the deprecation warning had never been
visible in user code since Clang did not surface that warning from
system headers. As a result, this caught people by surprise and we
decided to reintroduce the base template in LLVM 17 in cce062d.
Since then, llvm#70353 changed Clang so that such deprecation warnings
would be visible from user code. Hence, this patch closes the loop
and removes the deprecated specializations.
TODO: This will be landed in the LLVM 19 time frame, not before.
TODO: This patch also needs to update the release notes for LLVM 19 once we have some.
struct_LIBCPP_DEPRECATED_("char_traits<T> for T not equal to char, wchar_t, char8_t, char16_t or char32_t is non-standard and is provided for a temporary period. It will be removed in LLVM 19, so please migrate off of it.")
Copy file name to clipboardExpand all lines: libcxx/test/libcxx/strings/char.traits/char.traits.specializations/arbitrary_char_type.deprecated.verify.cpp
0 commit comments