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

This reverts commit 55357160d0e151c32f86e1d6683b4bddbb706aa1.
This is only being reverted from the LLVM 19 branch as a
convenience to avoid breaking some IDEs which were not ready
for that change.

Fixes #99464
This commit is contained in:
Louis Dionne 2024-07-31 10:40:14 -04:00 committed by Tobias Hieta
parent b14801954e
commit 0e615206e3
2 changed files with 18 additions and 16 deletions

View File

@ -10,6 +10,8 @@
#define _LIBCPP___TYPE_TRAITS_REMOVE_CV_H
#include <__config>
#include <__type_traits/remove_const.h>
#include <__type_traits/remove_volatile.h>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
@ -17,18 +19,23 @@
_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);
#endif
#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
template <class _Tp>

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>