This helper macro is defined in <type_traits> but only used in a test.

The uses of it in our headers were removed in these commits:
r5-4826-g847e9cf81e5101 Define __void_t and SFINAE-friendly iterator_traits.
r6-1925-g4f44c5556fc384 ptr_traits.h (__ptrtr_elt_type, [...]): Remove
r7-3818-g57c4fbc64b6c15 Simplify reference_wrapper nested typedefs

So we've kept it around unnecessarily for a decade.  Remove it from the
public header and update the test to not require it.

libstdc++-v3/ChangeLog:

        * include/std/type_traits (_GLIBCXX_HAS_NESTED_TYPE): Remove
        macro.
        * testsuite/20_util/reference_wrapper/typedefs-3.cc: Define
        test traits without using _GLIBCXX_HAS_NESTED_TYPE.
---

Tested 20_util/* and running the other tests now on x86_64-linux.

 libstdc++-v3/include/std/type_traits          | 14 ---------
 .../20_util/reference_wrapper/typedefs-3.cc   | 29 ++++++++++++-------
 2 files changed, 19 insertions(+), 24 deletions(-)

diff --git a/libstdc++-v3/include/std/type_traits 
b/libstdc++-v3/include/std/type_traits
index 83dbad17ade9..d4199dd5a33b 100644
--- a/libstdc++-v3/include/std/type_traits
+++ b/libstdc++-v3/include/std/type_traits
@@ -3045,20 +3045,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     using __detected_or_t
       = typename __detected_or<_Default, _Op, _Args...>::type;
 
-  /**
-   *  Use SFINAE to determine if the type _Tp has a publicly-accessible
-   *  member type _NTYPE.
-   */
-#define _GLIBCXX_HAS_NESTED_TYPE(_NTYPE)                               \
-  template<typename _Tp, typename = __void_t<>>                                
\
-    struct __has_##_NTYPE                                              \
-    : false_type                                                       \
-    { };                                                               \
-  template<typename _Tp>                                               \
-    struct __has_##_NTYPE<_Tp, __void_t<typename _Tp::_NTYPE>>         \
-    : true_type                                                                
\
-    { };
-
   template <typename _Tp>
     struct __is_swappable;
 
diff --git a/libstdc++-v3/testsuite/20_util/reference_wrapper/typedefs-3.cc 
b/libstdc++-v3/testsuite/20_util/reference_wrapper/typedefs-3.cc
index 2b2b36108c6d..9c7899e32085 100644
--- a/libstdc++-v3/testsuite/20_util/reference_wrapper/typedefs-3.cc
+++ b/libstdc++-v3/testsuite/20_util/reference_wrapper/typedefs-3.cc
@@ -44,24 +44,33 @@ struct S12 : S1, S2 { };
 
 struct S012 : S0, S1, S2 { };
 
-using std::true_type;
-using std::false_type;
-using std::__void_t;
-
-_GLIBCXX_HAS_NESTED_TYPE(argument_type)
-_GLIBCXX_HAS_NESTED_TYPE(first_argument_type)
-_GLIBCXX_HAS_NESTED_TYPE(second_argument_type)
+template<typename> using void_t = void;
 
+template<typename T, typename = void>
+  struct has_arg_type
+  : std::false_type
+  { };
 template<typename T>
-  struct has_arg_type : __has_argument_type<T>
+  struct has_arg_type<T, void_t<typename T::argument_type>>
+  : std::true_type
   { };
 
+template<typename T, typename = void>
+  struct has_1st_arg_type
+  : std::false_type
+  { };
 template<typename T>
-  struct has_1st_arg_type : __has_first_argument_type<T>
+  struct has_1st_arg_type<T, void_t<typename T::first_argument_type>>
+  : std::true_type
   { };
 
+template<typename T, typename = void>
+  struct has_2nd_arg_type
+  : std::false_type
+  { };
 template<typename T>
-  struct has_2nd_arg_type : __has_second_argument_type<T>
+  struct has_2nd_arg_type<T, void_t<typename T::second_argument_type>>
+  : std::true_type
   { };
 
 template<typename T, bool = has_arg_type<T>::value>
-- 
2.56.0

Reply via email to