PR libstdc++/89477 for Debug mode

Message ID d8ef48ca-d621-cd2b-5223-5e09afdb6929@gmail.com
State New
Headers show
Series
  • PR libstdc++/89477 for Debug mode
Related show

Commit Message

François Dumont March 7, 2019, 9:34 p.m.
Hi

     PR 89477 fixes haven't been applied to the Debug mode. Here it is 
to fix the different deduction.cc tests.

     PR libstdc++/89477
     * include/debug/map.h (map): Use _RequireNotAllocator to constrain
     parameters in deduction guides.
     * include/debug/multimap.h (multimap): Likewise.
     * include/debug/set.h (multimap): Likewise.
     * include/debug/multiset.h (multimap): Likewise.
     * include/debug/unordered_map (unordered_map): Likewise.
     (unordered_multimap): Likewise.
     * include/debug/unordered_set (unordered_set): Likewise.
     (unordered_multiset): Likewise.

     Tested under Linux x86_64, ok to commit ?

François

Comments

Jonathan Wakely March 7, 2019, 11:56 p.m. | #1
On 07/03/19 22:34 +0100, François Dumont wrote:
>Hi

>

>    PR 89477 fixes haven't been applied to the Debug mode. Here it is 

>to fix the different deduction.cc tests.

>

>    PR libstdc++/89477

>    * include/debug/map.h (map): Use _RequireNotAllocator to constrain

>    parameters in deduction guides.

>    * include/debug/multimap.h (multimap): Likewise.

>    * include/debug/set.h (multimap): Likewise.

>    * include/debug/multiset.h (multimap): Likewise.

>    * include/debug/unordered_map (unordered_map): Likewise.

>    (unordered_multimap): Likewise.

>    * include/debug/unordered_set (unordered_set): Likewise.

>    (unordered_multiset): Likewise.

>

>    Tested under Linux x86_64, ok to commit ?


OK, thanks for catching this.

Patch

diff --git a/libstdc++-v3/include/debug/map.h b/libstdc++-v3/include/debug/map.h
index 5063325cb97..80ca1bebbd2 100644
--- a/libstdc++-v3/include/debug/map.h
+++ b/libstdc++-v3/include/debug/map.h
@@ -704,6 +704,7 @@  namespace __debug
 	   typename _Compare = less<__iter_key_t<_InputIterator>>,
 	   typename _Allocator = allocator<__iter_to_alloc_t<_InputIterator>>,
 	   typename = _RequireInputIter<_InputIterator>,
+	   typename = _RequireNotAllocator<_Compare>,
 	   typename = _RequireAllocator<_Allocator>>
     map(_InputIterator, _InputIterator,
 	_Compare = _Compare(), _Allocator = _Allocator())
@@ -712,6 +713,7 @@  namespace __debug
 
   template<typename _Key, typename _Tp, typename _Compare = less<_Key>,
 	   typename _Allocator = allocator<pair<const _Key, _Tp>>,
+	   typename = _RequireNotAllocator<_Compare>,
 	   typename = _RequireAllocator<_Allocator>>
     map(initializer_list<pair<_Key, _Tp>>,
 	_Compare = _Compare(), _Allocator = _Allocator())
diff --git a/libstdc++-v3/include/debug/multimap.h b/libstdc++-v3/include/debug/multimap.h
index 38659aaba26..560aa7dda95 100644
--- a/libstdc++-v3/include/debug/multimap.h
+++ b/libstdc++-v3/include/debug/multimap.h
@@ -585,6 +585,7 @@  namespace __debug
 	   typename _Compare = less<__iter_key_t<_InputIterator>>,
 	   typename _Allocator = allocator<__iter_to_alloc_t<_InputIterator>>,
 	   typename = _RequireInputIter<_InputIterator>,
+	   typename = _RequireNotAllocator<_Compare>,
 	   typename = _RequireAllocator<_Allocator>>
     multimap(_InputIterator, _InputIterator,
 	     _Compare = _Compare(), _Allocator = _Allocator())
@@ -593,6 +594,7 @@  namespace __debug
 
   template<typename _Key, typename _Tp, typename _Compare = less<_Key>,
 	   typename _Allocator = allocator<pair<const _Key, _Tp>>,
+	   typename = _RequireNotAllocator<_Compare>,
 	   typename = _RequireAllocator<_Allocator>>
     multimap(initializer_list<pair<_Key, _Tp>>,
 	     _Compare = _Compare(), _Allocator = _Allocator())
diff --git a/libstdc++-v3/include/debug/multiset.h b/libstdc++-v3/include/debug/multiset.h
index 19dc8ea6a1e..8fb11f871ac 100644
--- a/libstdc++-v3/include/debug/multiset.h
+++ b/libstdc++-v3/include/debug/multiset.h
@@ -555,6 +555,7 @@  namespace __debug
 	   typename _Allocator =
 	     allocator<typename iterator_traits<_InputIterator>::value_type>,
 	   typename = _RequireInputIter<_InputIterator>,
+	   typename = _RequireNotAllocator<_Compare>,
 	   typename = _RequireAllocator<_Allocator>>
     multiset(_InputIterator, _InputIterator,
 	     _Compare = _Compare(), _Allocator = _Allocator())
@@ -564,6 +565,7 @@  namespace __debug
   template<typename _Key,
 	   typename _Compare = less<_Key>,
 	   typename _Allocator = allocator<_Key>,
+	   typename = _RequireNotAllocator<_Compare>,
 	   typename = _RequireAllocator<_Allocator>>
     multiset(initializer_list<_Key>,
 	     _Compare = _Compare(), _Allocator = _Allocator())
diff --git a/libstdc++-v3/include/debug/set.h b/libstdc++-v3/include/debug/set.h
index 88b84905ba2..9f16a9190b8 100644
--- a/libstdc++-v3/include/debug/set.h
+++ b/libstdc++-v3/include/debug/set.h
@@ -567,6 +567,7 @@  namespace __debug
 	   typename _Allocator =
 	     allocator<typename iterator_traits<_InputIterator>::value_type>,
 	   typename = _RequireInputIter<_InputIterator>,
+	   typename = _RequireNotAllocator<_Compare>,
 	   typename = _RequireAllocator<_Allocator>>
     set(_InputIterator, _InputIterator,
 	_Compare = _Compare(), _Allocator = _Allocator())
@@ -575,6 +576,7 @@  namespace __debug
 
   template<typename _Key, typename _Compare = less<_Key>,
 	   typename _Allocator = allocator<_Key>,
+	   typename = _RequireNotAllocator<_Compare>,
 	   typename = _RequireAllocator<_Allocator>>
     set(initializer_list<_Key>,
 	_Compare = _Compare(), _Allocator = _Allocator())
diff --git a/libstdc++-v3/include/debug/unordered_map b/libstdc++-v3/include/debug/unordered_map
index 163acd7f7ec..895d5cd227c 100644
--- a/libstdc++-v3/include/debug/unordered_map
+++ b/libstdc++-v3/include/debug/unordered_map
@@ -651,6 +651,8 @@  namespace __debug
 	   typename _Pred = equal_to<__iter_key_t<_InputIterator>>,
 	   typename _Allocator = allocator<__iter_to_alloc_t<_InputIterator>>,
 	   typename = _RequireInputIter<_InputIterator>,
+	   typename = _RequireNotAllocatorOrIntegral<_Hash>,
+	   typename = _RequireNotAllocator<_Pred>,
 	   typename = _RequireAllocator<_Allocator>>
     unordered_map(_InputIterator, _InputIterator,
 		  typename unordered_map<int, int>::size_type = {},
@@ -662,6 +664,8 @@  namespace __debug
   template<typename _Key, typename _Tp, typename _Hash = hash<_Key>,
 	   typename _Pred = equal_to<_Key>,
 	   typename _Allocator = allocator<pair<const _Key, _Tp>>,
+	   typename = _RequireNotAllocatorOrIntegral<_Hash>,
+	   typename = _RequireNotAllocator<_Pred>,
 	   typename = _RequireAllocator<_Allocator>>
     unordered_map(initializer_list<pair<_Key, _Tp>>,
 		  typename unordered_map<int, int>::size_type = {},
@@ -691,6 +695,7 @@  namespace __debug
 
   template<typename _InputIterator, typename _Hash, typename _Allocator,
 	   typename = _RequireInputIter<_InputIterator>,
+	   typename = _RequireNotAllocatorOrIntegral<_Hash>,
 	   typename = _RequireAllocator<_Allocator>>
     unordered_map(_InputIterator, _InputIterator,
 		  typename unordered_map<int, int>::size_type,
@@ -712,6 +717,7 @@  namespace __debug
     -> unordered_map<_Key, _Tp, hash<_Key>, equal_to<_Key>, _Allocator>;
 
   template<typename _Key, typename _Tp, typename _Hash, typename _Allocator,
+	   typename = _RequireNotAllocatorOrIntegral<_Hash>,
 	   typename = _RequireAllocator<_Allocator>>
     unordered_map(initializer_list<pair<_Key, _Tp>>,
 		  typename unordered_map<int, int>::size_type,
@@ -1250,6 +1256,8 @@  namespace __debug
 	   typename _Pred = equal_to<__iter_key_t<_InputIterator>>,
 	   typename _Allocator = allocator<__iter_to_alloc_t<_InputIterator>>,
 	   typename = _RequireInputIter<_InputIterator>,
+	   typename = _RequireNotAllocatorOrIntegral<_Hash>,
+	   typename = _RequireNotAllocator<_Pred>,
 	   typename = _RequireAllocator<_Allocator>>
     unordered_multimap(_InputIterator, _InputIterator,
 		       unordered_multimap<int, int>::size_type = {},
@@ -1262,6 +1270,8 @@  namespace __debug
   template<typename _Key, typename _Tp, typename _Hash = hash<_Key>,
 	   typename _Pred = equal_to<_Key>,
 	   typename _Allocator = allocator<pair<const _Key, _Tp>>,
+	   typename = _RequireNotAllocatorOrIntegral<_Hash>,
+	   typename = _RequireNotAllocator<_Pred>,
 	   typename = _RequireAllocator<_Allocator>>
     unordered_multimap(initializer_list<pair<_Key, _Tp>>,
 		       unordered_multimap<int, int>::size_type = {},
@@ -1290,6 +1300,7 @@  namespace __debug
 
   template<typename _InputIterator, typename _Hash, typename _Allocator,
 	   typename = _RequireInputIter<_InputIterator>,
+	   typename = _RequireNotAllocatorOrIntegral<_Hash>,
 	   typename = _RequireAllocator<_Allocator>>
     unordered_multimap(_InputIterator, _InputIterator,
 		       unordered_multimap<int, int>::size_type, _Hash,
@@ -1311,6 +1322,7 @@  namespace __debug
     -> unordered_multimap<_Key, _Tp, hash<_Key>, equal_to<_Key>, _Allocator>;
 
   template<typename _Key, typename _Tp, typename _Hash, typename _Allocator,
+	   typename = _RequireNotAllocatorOrIntegral<_Hash>,
 	   typename = _RequireAllocator<_Allocator>>
     unordered_multimap(initializer_list<pair<_Key, _Tp>>,
 		       unordered_multimap<int, int>::size_type,
diff --git a/libstdc++-v3/include/debug/unordered_set b/libstdc++-v3/include/debug/unordered_set
index 22e0abd3283..924ff7671ee 100644
--- a/libstdc++-v3/include/debug/unordered_set
+++ b/libstdc++-v3/include/debug/unordered_set
@@ -539,6 +539,8 @@  namespace __debug
 	   typename _Allocator =
 	     allocator<typename iterator_traits<_InputIterator>::value_type>,
 	   typename = _RequireInputIter<_InputIterator>,
+	   typename = _RequireNotAllocatorOrIntegral<_Hash>,
+	   typename = _RequireNotAllocator<_Pred>,
 	   typename = _RequireAllocator<_Allocator>>
     unordered_set(_InputIterator, _InputIterator,
 		  unordered_set<int>::size_type = {},
@@ -549,6 +551,8 @@  namespace __debug
   template<typename _Tp, typename _Hash = hash<_Tp>,
 	   typename _Pred = equal_to<_Tp>,
 	   typename _Allocator = allocator<_Tp>,
+	   typename = _RequireNotAllocatorOrIntegral<_Hash>,
+	   typename = _RequireNotAllocator<_Pred>,
 	   typename = _RequireAllocator<_Allocator>>
     unordered_set(initializer_list<_Tp>,
 		  unordered_set<int>::size_type = {},
@@ -569,6 +573,7 @@  namespace __debug
 
   template<typename _InputIterator, typename _Hash, typename _Allocator,
 	   typename = _RequireInputIter<_InputIterator>,
+	   typename = _RequireNotAllocatorOrIntegral<_Hash>,
 	   typename = _RequireAllocator<_Allocator>>
     unordered_set(_InputIterator, _InputIterator,
 		  unordered_set<int>::size_type,
@@ -586,6 +591,7 @@  namespace __debug
     -> unordered_set<_Tp, hash<_Tp>, equal_to<_Tp>, _Allocator>;
 
   template<typename _Tp, typename _Hash, typename _Allocator,
+	   typename = _RequireNotAllocatorOrIntegral<_Hash>,
 	   typename = _RequireAllocator<_Allocator>>
     unordered_set(initializer_list<_Tp>,
 		  unordered_set<int>::size_type, _Hash, _Allocator)
@@ -1093,6 +1099,8 @@  namespace __debug
 	   typename _Allocator =
 	     allocator<typename iterator_traits<_InputIterator>::value_type>,
 	   typename = _RequireInputIter<_InputIterator>,
+	   typename = _RequireNotAllocatorOrIntegral<_Hash>,
+	   typename = _RequireNotAllocator<_Pred>,
 	   typename = _RequireAllocator<_Allocator>>
     unordered_multiset(_InputIterator, _InputIterator,
 		       unordered_multiset<int>::size_type = {},
@@ -1104,6 +1112,8 @@  namespace __debug
   template<typename _Tp, typename _Hash = hash<_Tp>,
 	   typename _Pred = equal_to<_Tp>,
 	   typename _Allocator = allocator<_Tp>,
+	   typename = _RequireNotAllocatorOrIntegral<_Hash>,
+	   typename = _RequireNotAllocator<_Pred>,
 	   typename = _RequireAllocator<_Allocator>>
     unordered_multiset(initializer_list<_Tp>,
 		       unordered_multiset<int>::size_type = {},
@@ -1125,6 +1135,7 @@  namespace __debug
 
   template<typename _InputIterator, typename _Hash, typename _Allocator,
 	   typename = _RequireInputIter<_InputIterator>,
+	   typename = _RequireNotAllocatorOrIntegral<_Hash>,
 	   typename = _RequireAllocator<_Allocator>>
     unordered_multiset(_InputIterator, _InputIterator,
 		       unordered_multiset<int>::size_type,
@@ -1144,6 +1155,7 @@  namespace __debug
     -> unordered_multiset<_Tp, hash<_Tp>, equal_to<_Tp>, _Allocator>;
 
   template<typename _Tp, typename _Hash, typename _Allocator,
+	   typename = _RequireNotAllocatorOrIntegral<_Hash>,
 	   typename = _RequireAllocator<_Allocator>>
     unordered_multiset(initializer_list<_Tp>,
 		       unordered_multiset<int>::size_type, _Hash, _Allocator)