[libcxx-commits] [libcxx] [libc++] Remove workarounds for __{add, remove}_pointer on AppleClang (PR #199821)
Nikolas Klauser via libcxx-commits
libcxx-commits at lists.llvm.org
Tue May 26 23:07:58 PDT 2026
https://github.com/philnik777 updated https://github.com/llvm/llvm-project/pull/199821
>From 46cb4dd23ecf385ad13994a1f9fb32b0dee415e5 Mon Sep 17 00:00:00 2001
From: Nikolas Klauser <nikolasklauser at berlin.de>
Date: Wed, 27 May 2026 05:38:41 +0200
Subject: [PATCH] [libc++] Remove workarounds for __{add,remove}_pointer on
AppleClang
---
libcxx/include/CMakeLists.txt | 2 +-
.../referenceable.h} | 14 +-
libcxx/include/__config | 4 -
libcxx/include/__iterator/common_iterator.h | 2 +-
libcxx/include/__iterator/concepts.h | 2 +-
libcxx/include/__iterator/iter_move.h | 2 +-
libcxx/include/__iterator/iterator_traits.h | 2 +-
.../__ranges/adjacent_transform_view.h | 2 +-
libcxx/include/__ranges/transform_view.h | 2 +-
libcxx/include/__ranges/zip_transform_view.h | 2 +-
libcxx/include/__type_traits/add_pointer.h | 31 +--
libcxx/include/__type_traits/remove_pointer.h | 19 +-
libcxx/include/module.modulemap.in | 5 +-
.../meta/is_referenceable.compile.pass.cpp | 190 ------------------
.../meta.trans/objc_support.compile.pass.mm | 12 --
15 files changed, 20 insertions(+), 271 deletions(-)
rename libcxx/include/{__type_traits/is_referenceable.h => __concepts/referenceable.h} (77%)
delete mode 100644 libcxx/test/libcxx/utilities/meta/is_referenceable.compile.pass.cpp
diff --git a/libcxx/include/CMakeLists.txt b/libcxx/include/CMakeLists.txt
index 4ca7653026e47..5e9040a62dd53 100644
--- a/libcxx/include/CMakeLists.txt
+++ b/libcxx/include/CMakeLists.txt
@@ -324,6 +324,7 @@ set(files
__concepts/movable.h
__concepts/predicate.h
__concepts/primary_template.h
+ __concepts/referenceable.h
__concepts/regular.h
__concepts/relation.h
__concepts/same_as.h
@@ -877,7 +878,6 @@ set(files
__type_traits/is_polymorphic.h
__type_traits/is_reference.h
__type_traits/is_reference_wrapper.h
- __type_traits/is_referenceable.h
__type_traits/is_same.h
__type_traits/is_scalar.h
__type_traits/is_signed.h
diff --git a/libcxx/include/__type_traits/is_referenceable.h b/libcxx/include/__concepts/referenceable.h
similarity index 77%
rename from libcxx/include/__type_traits/is_referenceable.h
rename to libcxx/include/__concepts/referenceable.h
index 3a9d2858ba4c9..471d1157a9b87 100644
--- a/libcxx/include/__type_traits/is_referenceable.h
+++ b/libcxx/include/__concepts/referenceable.h
@@ -16,19 +16,15 @@
# pragma GCC system_header
#endif
-_LIBCPP_BEGIN_NAMESPACE_STD
+#if _LIBCPP_STD_VER >= 20
-template <class _Tp, class = void>
-inline const bool __is_referenceable_v = false;
+_LIBCPP_BEGIN_NAMESPACE_STD
template <class _Tp>
-inline const bool __is_referenceable_v<_Tp, __void_t<_Tp&> > = true;
-
-#if _LIBCPP_STD_VER >= 20
-template <class _Tp>
-concept __referenceable = __is_referenceable_v<_Tp>;
-#endif
+concept __referenceable = requires { typename __void_t<_Tp&>; };
_LIBCPP_END_NAMESPACE_STD
+#endif
+
#endif // _LIBCPP___TYPE_TRAITS_IS_REFERENCEABLE_H
diff --git a/libcxx/include/__config b/libcxx/include/__config
index a34c6ee502bb2..a6e94b6ff70ea 100644
--- a/libcxx/include/__config
+++ b/libcxx/include/__config
@@ -471,10 +471,6 @@ typedef __char32_t char32_t;
# define _LIBCPP_CTAD_SUPPORTED_FOR_TYPE(_ClassName) static_assert(true, "")
# endif
-# if defined(__OBJC__) && defined(_LIBCPP_APPLE_CLANG_VER)
-# define _LIBCPP_WORKAROUND_OBJCXX_COMPILER_INTRINSICS
-# endif
-
# define _PSTL_PRAGMA(x) _Pragma(#x)
// Enable SIMD for compilers that support OpenMP 4.0
diff --git a/libcxx/include/__iterator/common_iterator.h b/libcxx/include/__iterator/common_iterator.h
index 152ebdf55c788..b234b3810308f 100644
--- a/libcxx/include/__iterator/common_iterator.h
+++ b/libcxx/include/__iterator/common_iterator.h
@@ -17,6 +17,7 @@
#include <__concepts/copyable.h>
#include <__concepts/derived_from.h>
#include <__concepts/equality_comparable.h>
+#include <__concepts/referenceable.h>
#include <__concepts/same_as.h>
#include <__config>
#include <__iterator/concepts.h>
@@ -28,7 +29,6 @@
#include <__memory/addressof.h>
#include <__type_traits/conditional.h>
#include <__type_traits/is_pointer.h>
-#include <__type_traits/is_referenceable.h>
#include <__utility/declval.h>
#include <variant>
diff --git a/libcxx/include/__iterator/concepts.h b/libcxx/include/__iterator/concepts.h
index a3f07e8032888..9aa2334844a93 100644
--- a/libcxx/include/__iterator/concepts.h
+++ b/libcxx/include/__iterator/concepts.h
@@ -21,6 +21,7 @@
#include <__concepts/movable.h>
#include <__concepts/predicate.h>
#include <__concepts/primary_template.h>
+#include <__concepts/referenceable.h>
#include <__concepts/regular.h>
#include <__concepts/relation.h>
#include <__concepts/same_as.h>
@@ -40,7 +41,6 @@
#include <__type_traits/invoke.h>
#include <__type_traits/is_pointer.h>
#include <__type_traits/is_reference.h>
-#include <__type_traits/is_referenceable.h>
#include <__type_traits/remove_cv.h>
#include <__type_traits/remove_cvref.h>
#include <__utility/forward.h>
diff --git a/libcxx/include/__iterator/iter_move.h b/libcxx/include/__iterator/iter_move.h
index a726b6e329e90..91f8332a88e35 100644
--- a/libcxx/include/__iterator/iter_move.h
+++ b/libcxx/include/__iterator/iter_move.h
@@ -11,10 +11,10 @@
#define _LIBCPP___ITERATOR_ITER_MOVE_H
#include <__concepts/class_or_enum.h>
+#include <__concepts/referenceable.h>
#include <__config>
#include <__iterator/iterator_traits.h>
#include <__type_traits/is_reference.h>
-#include <__type_traits/is_referenceable.h>
#include <__type_traits/remove_cvref.h>
#include <__utility/declval.h>
#include <__utility/forward.h>
diff --git a/libcxx/include/__iterator/iterator_traits.h b/libcxx/include/__iterator/iterator_traits.h
index db7228297fc73..4327317b23d46 100644
--- a/libcxx/include/__iterator/iterator_traits.h
+++ b/libcxx/include/__iterator/iterator_traits.h
@@ -16,6 +16,7 @@
#include <__concepts/copyable.h>
#include <__concepts/equality_comparable.h>
#include <__concepts/primary_template.h>
+#include <__concepts/referenceable.h>
#include <__concepts/same_as.h>
#include <__concepts/totally_ordered.h>
#include <__config>
@@ -32,7 +33,6 @@
#include <__type_traits/is_convertible.h>
#include <__type_traits/is_object.h>
#include <__type_traits/is_reference.h>
-#include <__type_traits/is_referenceable.h>
#include <__type_traits/nat.h>
#include <__type_traits/remove_const.h>
#include <__type_traits/remove_cv.h>
diff --git a/libcxx/include/__ranges/adjacent_transform_view.h b/libcxx/include/__ranges/adjacent_transform_view.h
index 11b1176824fa3..4863d074482dc 100644
--- a/libcxx/include/__ranges/adjacent_transform_view.h
+++ b/libcxx/include/__ranges/adjacent_transform_view.h
@@ -19,6 +19,7 @@
#include <__concepts/derived_from.h>
#include <__concepts/equality_comparable.h>
#include <__concepts/invocable.h>
+#include <__concepts/referenceable.h>
#include <__cstddef/size_t.h>
#include <__functional/bind_back.h>
#include <__functional/invoke.h>
@@ -45,7 +46,6 @@
#include <__type_traits/decay.h>
#include <__type_traits/is_nothrow_constructible.h>
#include <__type_traits/is_object.h>
-#include <__type_traits/is_referenceable.h>
#include <__type_traits/make_unsigned.h>
#include <__type_traits/maybe_const.h>
#include <__utility/declval.h>
diff --git a/libcxx/include/__ranges/transform_view.h b/libcxx/include/__ranges/transform_view.h
index ab1adf9cdbe68..98b38dd9b2aa1 100644
--- a/libcxx/include/__ranges/transform_view.h
+++ b/libcxx/include/__ranges/transform_view.h
@@ -16,6 +16,7 @@
#include <__concepts/derived_from.h>
#include <__concepts/equality_comparable.h>
#include <__concepts/invocable.h>
+#include <__concepts/referenceable.h>
#include <__config>
#include <__functional/bind_back.h>
#include <__functional/invoke.h>
@@ -37,7 +38,6 @@
#include <__type_traits/is_nothrow_constructible.h>
#include <__type_traits/is_object.h>
#include <__type_traits/is_reference.h>
-#include <__type_traits/is_referenceable.h>
#include <__type_traits/maybe_const.h>
#include <__type_traits/remove_cvref.h>
#include <__utility/forward.h>
diff --git a/libcxx/include/__ranges/zip_transform_view.h b/libcxx/include/__ranges/zip_transform_view.h
index 07aa182f2858f..c56632a2608a1 100644
--- a/libcxx/include/__ranges/zip_transform_view.h
+++ b/libcxx/include/__ranges/zip_transform_view.h
@@ -17,6 +17,7 @@
#include <__concepts/derived_from.h>
#include <__concepts/equality_comparable.h>
#include <__concepts/invocable.h>
+#include <__concepts/referenceable.h>
#include <__functional/invoke.h>
#include <__iterator/concepts.h>
#include <__iterator/incrementable_traits.h>
@@ -33,7 +34,6 @@
#include <__type_traits/invoke.h>
#include <__type_traits/is_object.h>
#include <__type_traits/is_reference.h>
-#include <__type_traits/is_referenceable.h>
#include <__type_traits/maybe_const.h>
#include <__type_traits/remove_cvref.h>
#include <__utility/forward.h>
diff --git a/libcxx/include/__type_traits/add_pointer.h b/libcxx/include/__type_traits/add_pointer.h
index fa9376699a74a..09d92ed3a647e 100644
--- a/libcxx/include/__type_traits/add_pointer.h
+++ b/libcxx/include/__type_traits/add_pointer.h
@@ -10,9 +10,6 @@
#define _LIBCPP___TYPE_TRAITS_ADD_POINTER_H
#include <__config>
-#include <__type_traits/is_referenceable.h>
-#include <__type_traits/is_void.h>
-#include <__type_traits/remove_reference.h>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
@@ -20,40 +17,18 @@
_LIBCPP_BEGIN_NAMESPACE_STD
-#if !defined(_LIBCPP_WORKAROUND_OBJCXX_COMPILER_INTRINSICS)
-
template <class _Tp>
struct _LIBCPP_NO_SPECIALIZATIONS add_pointer {
using type _LIBCPP_NODEBUG = __add_pointer(_Tp);
};
-# ifdef _LIBCPP_COMPILER_GCC
+#ifdef _LIBCPP_COMPILER_GCC
template <class _Tp>
using __add_pointer_t _LIBCPP_NODEBUG = typename add_pointer<_Tp>::type;
-# else
-template <class _Tp>
-using __add_pointer_t _LIBCPP_NODEBUG = __add_pointer(_Tp);
-# endif
-
#else
-template <class _Tp, bool = __is_referenceable_v<_Tp> || is_void<_Tp>::value>
-struct __add_pointer_impl {
- using type _LIBCPP_NODEBUG = __libcpp_remove_reference_t<_Tp>*;
-};
-template <class _Tp>
-struct __add_pointer_impl<_Tp, false> {
- using type _LIBCPP_NODEBUG = _Tp;
-};
-
template <class _Tp>
-using __add_pointer_t = typename __add_pointer_impl<_Tp>::type;
-
-template <class _Tp>
-struct _LIBCPP_NO_SPECIALIZATIONS add_pointer {
- using type _LIBCPP_NODEBUG = __add_pointer_t<_Tp>;
-};
-
-#endif // !defined(_LIBCPP_WORKAROUND_OBJCXX_COMPILER_INTRINSICS)
+using __add_pointer_t _LIBCPP_NODEBUG = __add_pointer(_Tp);
+#endif
#if _LIBCPP_STD_VER >= 14
template <class _Tp>
diff --git a/libcxx/include/__type_traits/remove_pointer.h b/libcxx/include/__type_traits/remove_pointer.h
index 975ed43047dee..bbd80e86a643c 100644
--- a/libcxx/include/__type_traits/remove_pointer.h
+++ b/libcxx/include/__type_traits/remove_pointer.h
@@ -17,31 +17,18 @@
_LIBCPP_BEGIN_NAMESPACE_STD
-#if !defined(_LIBCPP_WORKAROUND_OBJCXX_COMPILER_INTRINSICS) && __has_builtin(__remove_pointer)
template <class _Tp>
struct _LIBCPP_NO_SPECIALIZATIONS remove_pointer {
using type _LIBCPP_NODEBUG = __remove_pointer(_Tp);
};
-# ifdef _LIBCPP_COMPILER_GCC
+#ifdef _LIBCPP_COMPILER_GCC
template <class _Tp>
using __remove_pointer_t _LIBCPP_NODEBUG = typename remove_pointer<_Tp>::type;
-# else
-template <class _Tp>
-using __remove_pointer_t _LIBCPP_NODEBUG = __remove_pointer(_Tp);
-# endif
#else
-// clang-format off
-template <class _Tp> struct remove_pointer {using type _LIBCPP_NODEBUG = _Tp;};
-template <class _Tp> struct remove_pointer<_Tp*> {using type _LIBCPP_NODEBUG = _Tp;};
-template <class _Tp> struct remove_pointer<_Tp* const> {using type _LIBCPP_NODEBUG = _Tp;};
-template <class _Tp> struct remove_pointer<_Tp* volatile> {using type _LIBCPP_NODEBUG = _Tp;};
-template <class _Tp> struct remove_pointer<_Tp* const volatile> {using type _LIBCPP_NODEBUG = _Tp;};
-// clang-format on
-
template <class _Tp>
-using __remove_pointer_t = typename remove_pointer<_Tp>::type;
-#endif // !defined(_LIBCPP_WORKAROUND_OBJCXX_COMPILER_INTRINSICS) && __has_builtin(__remove_pointer)
+using __remove_pointer_t _LIBCPP_NODEBUG = __remove_pointer(_Tp);
+#endif
#if _LIBCPP_STD_VER >= 14
template <class _Tp>
diff --git a/libcxx/include/module.modulemap.in b/libcxx/include/module.modulemap.in
index 5fa74b5b5db78..51a2b77a9ba45 100644
--- a/libcxx/include/module.modulemap.in
+++ b/libcxx/include/module.modulemap.in
@@ -263,10 +263,6 @@ module std_core [system] {
header "__type_traits/is_reference.h"
export std_core.type_traits.integral_constant
}
- module is_referenceable {
- header "__type_traits/is_referenceable.h"
- export std_core.type_traits.integral_constant
- }
module is_same {
header "__type_traits/is_same.h"
export std_core.type_traits.integral_constant
@@ -1088,6 +1084,7 @@ module std [system] {
module movable { header "__concepts/movable.h" }
module predicate { header "__concepts/predicate.h" }
module primary_template { header "__concepts/primary_template.h" }
+ module referenceable { header "__concepts/referenceable.h" }
module regular { header "__concepts/regular.h" }
module relation { header "__concepts/relation.h" }
module same_as { header "__concepts/same_as.h" }
diff --git a/libcxx/test/libcxx/utilities/meta/is_referenceable.compile.pass.cpp b/libcxx/test/libcxx/utilities/meta/is_referenceable.compile.pass.cpp
deleted file mode 100644
index c230f6e16e0a2..0000000000000
--- a/libcxx/test/libcxx/utilities/meta/is_referenceable.compile.pass.cpp
+++ /dev/null
@@ -1,190 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-//
-
-// __is_referenceable_v<Tp>
-//
-// [defns.referenceable] defines "a referenceable type" as:
-// An object type, a function type that does not have cv-qualifiers
-// or a ref-qualifier, or a reference type.
-//
-
-#include <type_traits>
-#include <cassert>
-
-#include "test_macros.h"
-
-struct Foo {};
-
-static_assert((!std::__is_referenceable_v<void>), "");
-static_assert((std::__is_referenceable_v<int>), "");
-static_assert((std::__is_referenceable_v<int[3]>), "");
-static_assert((std::__is_referenceable_v<int[]>), "");
-static_assert((std::__is_referenceable_v<int&>), "");
-static_assert((std::__is_referenceable_v<const int&>), "");
-static_assert((std::__is_referenceable_v<int*>), "");
-static_assert((std::__is_referenceable_v<const int*>), "");
-static_assert((std::__is_referenceable_v<Foo>), "");
-static_assert((std::__is_referenceable_v<const Foo>), "");
-static_assert((std::__is_referenceable_v<Foo&>), "");
-static_assert((std::__is_referenceable_v<const Foo&>), "");
-#if TEST_STD_VER >= 11
-static_assert((std::__is_referenceable_v<Foo&&>), "");
-static_assert((std::__is_referenceable_v<const Foo&&>), "");
-#endif
-
-static_assert((std::__is_referenceable_v<int __attribute__((__vector_size__(8)))>), "");
-static_assert((std::__is_referenceable_v<const int __attribute__((__vector_size__(8)))>), "");
-static_assert((std::__is_referenceable_v<float __attribute__((__vector_size__(16)))>), "");
-static_assert((std::__is_referenceable_v<const float __attribute__((__vector_size__(16)))>), "");
-
-// Functions without cv-qualifiers are referenceable
-static_assert((std::__is_referenceable_v<void()>), "");
-#if TEST_STD_VER >= 11
-static_assert((!std::__is_referenceable_v<void() const>), "");
-static_assert((!std::__is_referenceable_v<void() &>), "");
-static_assert((!std::__is_referenceable_v<void() const&>), "");
-static_assert((!std::__is_referenceable_v<void() &&>), "");
-static_assert((!std::__is_referenceable_v<void() const&&>), "");
-#endif
-
-static_assert((std::__is_referenceable_v<void(int)>), "");
-#if TEST_STD_VER >= 11
-static_assert((!std::__is_referenceable_v<void(int) const>), "");
-static_assert((!std::__is_referenceable_v<void(int) &>), "");
-static_assert((!std::__is_referenceable_v<void(int) const&>), "");
-static_assert((!std::__is_referenceable_v<void(int) &&>), "");
-static_assert((!std::__is_referenceable_v<void(int) const&&>), "");
-#endif
-
-static_assert((std::__is_referenceable_v<void(int, float)>), "");
-#if TEST_STD_VER >= 11
-static_assert((!std::__is_referenceable_v<void(int, float) const>), "");
-static_assert((!std::__is_referenceable_v<void(int, float) &>), "");
-static_assert((!std::__is_referenceable_v<void(int, float) const&>), "");
-static_assert((!std::__is_referenceable_v<void(int, float) &&>), "");
-static_assert((!std::__is_referenceable_v<void(int, float) const&&>), "");
-#endif
-
-static_assert((std::__is_referenceable_v<void(int, float, Foo&)>), "");
-#if TEST_STD_VER >= 11
-static_assert((!std::__is_referenceable_v<void(int, float, Foo&) const>), "");
-static_assert((!std::__is_referenceable_v<void(int, float, Foo&) &>), "");
-static_assert((!std::__is_referenceable_v<void(int, float, Foo&) const&>), "");
-static_assert((!std::__is_referenceable_v<void(int, float, Foo&) &&>), "");
-static_assert((!std::__is_referenceable_v<void(int, float, Foo&) const&&>), "");
-#endif
-
-static_assert((std::__is_referenceable_v<void(...)>), "");
-#if TEST_STD_VER >= 11
-static_assert((!std::__is_referenceable_v<void(...) const>), "");
-static_assert((!std::__is_referenceable_v<void(...) &>), "");
-static_assert((!std::__is_referenceable_v<void(...) const&>), "");
-static_assert((!std::__is_referenceable_v<void(...) &&>), "");
-static_assert((!std::__is_referenceable_v<void(...) const&&>), "");
-#endif
-
-static_assert((std::__is_referenceable_v<void(int, ...)>), "");
-#if TEST_STD_VER >= 11
-static_assert((!std::__is_referenceable_v<void(int, ...) const>), "");
-static_assert((!std::__is_referenceable_v<void(int, ...) &>), "");
-static_assert((!std::__is_referenceable_v<void(int, ...) const&>), "");
-static_assert((!std::__is_referenceable_v<void(int, ...) &&>), "");
-static_assert((!std::__is_referenceable_v<void(int, ...) const&&>), "");
-#endif
-
-static_assert((std::__is_referenceable_v<void(int, float, ...)>), "");
-#if TEST_STD_VER >= 11
-static_assert((!std::__is_referenceable_v<void(int, float, ...) const>), "");
-static_assert((!std::__is_referenceable_v<void(int, float, ...) &>), "");
-static_assert((!std::__is_referenceable_v<void(int, float, ...) const&>), "");
-static_assert((!std::__is_referenceable_v<void(int, float, ...) &&>), "");
-static_assert((!std::__is_referenceable_v<void(int, float, ...) const&&>), "");
-#endif
-
-static_assert((std::__is_referenceable_v<void(int, float, Foo&, ...)>), "");
-#if TEST_STD_VER >= 11
-static_assert((!std::__is_referenceable_v<void(int, float, Foo&, ...) const>), "");
-static_assert((!std::__is_referenceable_v<void(int, float, Foo&, ...) &>), "");
-static_assert((!std::__is_referenceable_v<void(int, float, Foo&, ...) const&>), "");
-static_assert((!std::__is_referenceable_v<void(int, float, Foo&, ...) &&>), "");
-static_assert((!std::__is_referenceable_v<void(int, float, Foo&, ...) const&&>), "");
-#endif
-
-// member functions with or without cv-qualifiers are referenceable
-static_assert((std::__is_referenceable_v<void (Foo::*)()>), "");
-static_assert((std::__is_referenceable_v<void (Foo::*)() const>), "");
-#if TEST_STD_VER >= 11
-static_assert((std::__is_referenceable_v<void (Foo::*)() &>), "");
-static_assert((std::__is_referenceable_v<void (Foo::*)() const&>), "");
-static_assert((std::__is_referenceable_v<void (Foo::*)() &&>), "");
-static_assert((std::__is_referenceable_v<void (Foo::*)() const&&>), "");
-#endif
-
-static_assert((std::__is_referenceable_v<void (Foo::*)(int)>), "");
-static_assert((std::__is_referenceable_v<void (Foo::*)(int) const>), "");
-#if TEST_STD_VER >= 11
-static_assert((std::__is_referenceable_v<void (Foo::*)(int) &>), "");
-static_assert((std::__is_referenceable_v<void (Foo::*)(int) const&>), "");
-static_assert((std::__is_referenceable_v<void (Foo::*)(int) &&>), "");
-static_assert((std::__is_referenceable_v<void (Foo::*)(int) const&&>), "");
-#endif
-
-static_assert((std::__is_referenceable_v<void (Foo::*)(int, float)>), "");
-static_assert((std::__is_referenceable_v<void (Foo::*)(int, float) const>), "");
-#if TEST_STD_VER >= 11
-static_assert((std::__is_referenceable_v<void (Foo::*)(int, float) &>), "");
-static_assert((std::__is_referenceable_v<void (Foo::*)(int, float) const&>), "");
-static_assert((std::__is_referenceable_v<void (Foo::*)(int, float) &&>), "");
-static_assert((std::__is_referenceable_v<void (Foo::*)(int, float) const&&>), "");
-#endif
-
-static_assert((std::__is_referenceable_v<void (Foo::*)(int, float, Foo&)>), "");
-static_assert((std::__is_referenceable_v<void (Foo::*)(int, float, Foo&) const>), "");
-#if TEST_STD_VER >= 11
-static_assert((std::__is_referenceable_v<void (Foo::*)(int, float, Foo&) &>), "");
-static_assert((std::__is_referenceable_v<void (Foo::*)(int, float, Foo&) const&>), "");
-static_assert((std::__is_referenceable_v<void (Foo::*)(int, float, Foo&) &&>), "");
-static_assert((std::__is_referenceable_v<void (Foo::*)(int, float, Foo&) const&&>), "");
-#endif
-
-static_assert((std::__is_referenceable_v<void (Foo::*)(...)>), "");
-static_assert((std::__is_referenceable_v<void (Foo::*)(...) const>), "");
-#if TEST_STD_VER >= 11
-static_assert((std::__is_referenceable_v<void (Foo::*)(...) &>), "");
-static_assert((std::__is_referenceable_v<void (Foo::*)(...) const&>), "");
-static_assert((std::__is_referenceable_v<void (Foo::*)(...) &&>), "");
-static_assert((std::__is_referenceable_v<void (Foo::*)(...) const&&>), "");
-#endif
-
-static_assert((std::__is_referenceable_v<void (Foo::*)(int, ...)>), "");
-static_assert((std::__is_referenceable_v<void (Foo::*)(int, ...) const>), "");
-#if TEST_STD_VER >= 11
-static_assert((std::__is_referenceable_v<void (Foo::*)(int, ...) &>), "");
-static_assert((std::__is_referenceable_v<void (Foo::*)(int, ...) const&>), "");
-static_assert((std::__is_referenceable_v<void (Foo::*)(int, ...) &&>), "");
-static_assert((std::__is_referenceable_v<void (Foo::*)(int, ...) const&&>), "");
-#endif
-
-static_assert((std::__is_referenceable_v<void (Foo::*)(int, float, ...)>), "");
-static_assert((std::__is_referenceable_v<void (Foo::*)(int, float, ...) const>), "");
-#if TEST_STD_VER >= 11
-static_assert((std::__is_referenceable_v<void (Foo::*)(int, float, ...) &>), "");
-static_assert((std::__is_referenceable_v<void (Foo::*)(int, float, ...) const&>), "");
-static_assert((std::__is_referenceable_v<void (Foo::*)(int, float, ...) &&>), "");
-static_assert((std::__is_referenceable_v<void (Foo::*)(int, float, ...) const&&>), "");
-#endif
-
-static_assert((std::__is_referenceable_v<void (Foo::*)(int, float, Foo&, ...)>), "");
-static_assert((std::__is_referenceable_v<void (Foo::*)(int, float, Foo&, ...) const>), "");
-#if TEST_STD_VER >= 11
-static_assert((std::__is_referenceable_v<void (Foo::*)(int, float, Foo&, ...) &>), "");
-static_assert((std::__is_referenceable_v<void (Foo::*)(int, float, Foo&, ...) const&>), "");
-static_assert((std::__is_referenceable_v<void (Foo::*)(int, float, Foo&, ...) &&>), "");
-static_assert((std::__is_referenceable_v<void (Foo::*)(int, float, Foo&, ...) const&&>), "");
-#endif
diff --git a/libcxx/test/std/utilities/meta/meta.trans/objc_support.compile.pass.mm b/libcxx/test/std/utilities/meta/meta.trans/objc_support.compile.pass.mm
index 1d252a129483b..af4da24d085dd 100644
--- a/libcxx/test/std/utilities/meta/meta.trans/objc_support.compile.pass.mm
+++ b/libcxx/test/std/utilities/meta/meta.trans/objc_support.compile.pass.mm
@@ -10,8 +10,6 @@
// Simple test to check that type traits support Objective-C types.
-// XFAIL: FROZEN-CXX03-HEADERS-FIXME
-
#include <type_traits>
#include "test_macros.h"
@@ -35,16 +33,6 @@ @interface I;
static_assert(std::is_same<std::decay<I>::type, I>::value, "");
static_assert(std::is_same<std::decay<id(&)[5]>::type, id*>::value, "");
-// __is_referenceable_v
-LIBCPP_STATIC_ASSERT(std::__is_referenceable_v<id>, "");
-LIBCPP_STATIC_ASSERT(std::__is_referenceable_v<id*>, "");
-LIBCPP_STATIC_ASSERT(std::__is_referenceable_v<id&>, "");
-LIBCPP_STATIC_ASSERT(std::__is_referenceable_v<id&&>, "");
-LIBCPP_STATIC_ASSERT(std::__is_referenceable_v<I>, "");
-LIBCPP_STATIC_ASSERT(std::__is_referenceable_v<I*>, "");
-LIBCPP_STATIC_ASSERT(std::__is_referenceable_v<I&>, "");
-LIBCPP_STATIC_ASSERT(std::__is_referenceable_v<I&&>, "");
-
// remove_all_extents
static_assert(std::is_same<std::remove_all_extents<id>::type, id>::value, "");
static_assert(std::is_same<std::remove_all_extents<id[5]>::type, id>::value, "");
More information about the libcxx-commits
mailing list