libcxx-compat: revert llvmorg-19-init-4003-g55357160d0e1:

[libc++] Use GCC type traits builtins for remove_cv and remove_cvref (#81386)

  They have been added recently to GCC without support for mangling. This
  patch uses them in structs and adds aliases to these structs instead of
  the builtins directly.

PR:		280562
MFC after:	1 month
This commit is contained in:
Dimitry Andric 2024-08-05 22:27:51 +02:00
parent f3859a1a13
commit 072b5fb698
2 changed files with 15 additions and 15 deletions

View file

@ -19,17 +19,22 @@
_LIBCPP_BEGIN_NAMESPACE_STD
#if __has_builtin(__remove_cv) && !defined(_LIBCPP_COMPILER_GCC)
template <class _Tp>
struct remove_cv {
using type _LIBCPP_NODEBUG = __remove_cv(_Tp);
};
#if defined(_LIBCPP_COMPILER_GCC)
template <class _Tp>
using __remove_cv_t = typename remove_cv<_Tp>::type;
#else
template <class _Tp>
using __remove_cv_t = __remove_cv(_Tp);
#else
template <class _Tp>
struct _LIBCPP_TEMPLATE_VIS remove_cv {
typedef __remove_volatile_t<__remove_const_t<_Tp> > type;
};
template <class _Tp>
using __remove_cv_t = __remove_volatile_t<__remove_const_t<_Tp> >;
#endif // __has_builtin(__remove_cv)
#if _LIBCPP_STD_VER >= 14

View file

@ -20,26 +20,21 @@
_LIBCPP_BEGIN_NAMESPACE_STD
#if defined(_LIBCPP_COMPILER_GCC)
template <class _Tp>
struct __remove_cvref_gcc {
using type = __remove_cvref(_Tp);
};
template <class _Tp>
using __remove_cvref_t _LIBCPP_NODEBUG = typename __remove_cvref_gcc<_Tp>::type;
#else
#if __has_builtin(__remove_cvref) && !defined(_LIBCPP_COMPILER_GCC)
template <class _Tp>
using __remove_cvref_t _LIBCPP_NODEBUG = __remove_cvref(_Tp);
#else
template <class _Tp>
using __remove_cvref_t _LIBCPP_NODEBUG = __remove_cv_t<__libcpp_remove_reference_t<_Tp> >;
#endif // __has_builtin(__remove_cvref)
template <class _Tp, class _Up>
using __is_same_uncvref = _IsSame<__remove_cvref_t<_Tp>, __remove_cvref_t<_Up> >;
struct __is_same_uncvref : _IsSame<__remove_cvref_t<_Tp>, __remove_cvref_t<_Up> > {};
#if _LIBCPP_STD_VER >= 20
template <class _Tp>
struct remove_cvref {
using type _LIBCPP_NODEBUG = __remove_cvref(_Tp);
using type _LIBCPP_NODEBUG = __remove_cvref_t<_Tp>;
};
template <class _Tp>