[PATCH 4/4] libstdc++: Remove std::__is_pointer and std::__is_scalar [PR115497]
Jonathan Wakely
jwakely@redhat.com
Fri Jun 21 09:31:15 GMT 2024
Oops, this patch series actually depends on
https://gcc.gnu.org/pipermail/gcc-patches/2024-June/655267.html which
was posted separately, but needs to be applied before 4/4 in this
series.
On Thu, 20 Jun 2024 at 16:35, Jonathan Wakely <jwakely@redhat.com> wrote:
>
> We still have __is_arithmetic in <bits/cpp_type_traits.h> after this,
> but that needs a lot more work to remove its uses from <cmath> and
> <tr1/cmath>.
>
> Tested x86_64-linux.
>
> -- >8 --
>
> This removes the std::__is_pointer and std::__is_scalar traits, as they
> conflicts with a Clang built-in.
>
> Although Clang has a hack to make the class templates work despite using
> reserved names, removing these class templates will allow that hack to
> be dropped at some future date.
>
> libstdc++-v3/ChangeLog:
>
> PR libstdc++/115497
> * include/bits/cpp_type_traits.h (__is_pointer, __is_scalar):
> Remove.
> (__is_arithmetic): Do not use __is_pointer in the primary
> template. Add partial specialization for pointers.
> ---
> libstdc++-v3/include/bits/cpp_type_traits.h | 33 ---------------------
> 1 file changed, 33 deletions(-)
>
> diff --git a/libstdc++-v3/include/bits/cpp_type_traits.h b/libstdc++-v3/include/bits/cpp_type_traits.h
> index 4d83b9472e6..abe0c7603e3 100644
> --- a/libstdc++-v3/include/bits/cpp_type_traits.h
> +++ b/libstdc++-v3/include/bits/cpp_type_traits.h
> @@ -343,31 +343,6 @@ __INT_N(__GLIBCXX_TYPE_INT_N_3)
> };
> #endif
>
> - //
> - // Pointer types
> - //
> -#if _GLIBCXX_USE_BUILTIN_TRAIT(__is_pointer)
> - template<typename _Tp, bool _IsPtr = __is_pointer(_Tp)>
> - struct __is_pointer : __truth_type<_IsPtr>
> - {
> - enum { __value = _IsPtr };
> - };
> -#else
> - template<typename _Tp>
> - struct __is_pointer
> - {
> - enum { __value = 0 };
> - typedef __false_type __type;
> - };
> -
> - template<typename _Tp>
> - struct __is_pointer<_Tp*>
> - {
> - enum { __value = 1 };
> - typedef __true_type __type;
> - };
> -#endif
> -
> //
> // An arithmetic type is an integer type or a floating point type
> //
> @@ -376,14 +351,6 @@ __INT_N(__GLIBCXX_TYPE_INT_N_3)
> : public __traitor<__is_integer<_Tp>, __is_floating<_Tp> >
> { };
>
> - //
> - // A scalar type is an arithmetic type or a pointer type
> - //
> - template<typename _Tp>
> - struct __is_scalar
> - : public __traitor<__is_arithmetic<_Tp>, __is_pointer<_Tp> >
> - { };
> -
> //
> // For use in std::copy and std::find overloads for streambuf iterators.
> //
> --
> 2.45.2
>
More information about the Libstdc++
mailing list