[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 22:47:23 PDT 2026


https://github.com/philnik777 updated https://github.com/llvm/llvm-project/pull/199821

>From b8252a5c2f055bdfae2c18d636d5e75ff1893424 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   |  10 -
 15 files changed, 20 insertions(+), 269 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..4da247abf92fb 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
@@ -35,16 +35,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