libstdc++: Fix testsuite utility's use of allocators
authorJonathan Wakely <jwakely@redhat.com>
Fri, 17 Apr 2020 23:10:54 +0000 (00:10 +0100)
committerJonathan Wakely <jwakely@redhat.com>
Fri, 17 Apr 2020 23:12:26 +0000 (00:12 +0100)
In C++20 the rebind and const_reference members of std::allocator are
gone, so this testsuite utility stopped working, causing
ext/pb_ds/regression/priority_queue_rand_debug.cc to FAIL.

* testsuite/util/native_type/native_priority_queue.hpp: Use
allocator_traits to rebind allocator.

libstdc++-v3/ChangeLog
libstdc++-v3/testsuite/util/native_type/native_priority_queue.hpp

index de9323bebe07f1aa4e220525878ffa9bf25e07f9..64c862c1d03a55319808568aa5a1079b01623938 100644 (file)
@@ -1,3 +1,8 @@
+2020-04-18  Jonathan Wakely  <jwakely@redhat.com>
+
+       * testsuite/util/native_type/native_priority_queue.hpp: Use
+       allocator_traits to rebind allocator.
+
 2020-04-17  Jonathan Wakely  <jwakely@redhat.com>
 
        * include/bits/forward_list.h (forward_list): Define operator<=> and
index 1445892ebe057af479eaca4bbdf6c7a266b3366a..1ceb446c0ee27fdea7d76e4f8b6b08885f55a0b8 100644 (file)
@@ -55,20 +55,30 @@ namespace __gnu_pbds
       struct base_seq
       {
       private:
-       typedef typename _Alloc::template rebind<Value_Type> value_rebind;
+#if __cplusplus >= 201103L
+       using value_alloc = typename std::allocator_traits<_Alloc>::template
+         rebind_alloc<Value_Type>;
+#else
+       typedef typename _Alloc::template rebind<Value_Type>::other value_alloc;
+#endif
 
       public:
-       typedef std::vector<Value_Type, typename value_rebind::other> type;
+       typedef std::vector<Value_Type, value_alloc> type;
       };
 
       template<typename Value_Type, typename _Alloc>
       struct base_seq<Value_Type, false, _Alloc>
       {
       private:
-       typedef typename _Alloc::template rebind<Value_Type> value_rebind;
+#if __cplusplus >= 201103L
+       using value_alloc = typename std::allocator_traits<_Alloc>::template
+         rebind_alloc<Value_Type>;
+#else
+       typedef typename _Alloc::template rebind<Value_Type>::other value_alloc;
+#endif
 
       public:
-       typedef std::deque<Value_Type, typename value_rebind::other> type;
+       typedef std::deque<Value_Type, value_alloc> type;
       };
     } // namespace detail
 
@@ -89,11 +99,16 @@ namespace __gnu_pbds
     {
     private:
       typedef PB_DS_BASE_C_DEC base_type;
-      typedef typename _Alloc::template rebind<Value_Type> value_rebind;
+#if __cplusplus >= 201103L
+       using value_ref = const Value_Type&;
+#else
+      typedef typename
+       _Alloc::template rebind<Value_Type>::other::const_reference value_ref;
+#endif
 
     public:
       typedef Value_Type value_type;
-      typedef typename value_rebind::other::const_reference const_reference;
+      typedef value_ref const_reference;
       typedef native_pq_tag container_category;
       typedef Cmp_Fn cmp_fn;