Fix Template Parameter List for Associative Containers in base::EraseIf
This change fixes the template parameter lists of associative containers for
base::EraseIf. For example, trying to use base::EraseIf with a std::map using a
custom comparator would have resulted in a compilation error before this change.
BUG=697235
[email protected], [email protected], [email protected]
Review-Url: https://codereview.chromium.org/2746053002
Cr-Commit-Position: refs/heads/master@{#456385}
diff --git a/base/stl_util.h b/base/stl_util.h
index 2cec11b..b0670b2 100644
--- a/base/stl_util.h
+++ b/base/stl_util.h
@@ -222,43 +222,68 @@
container.remove_if(pred);
}
-template <class T, class Allocator, class Predicate>
-void EraseIf(std::map<T, Allocator>& container, Predicate pred) {
+template <class Key, class T, class Compare, class Allocator, class Predicate>
+void EraseIf(std::map<Key, T, Compare, Allocator>& container, Predicate pred) {
internal::IterateAndEraseIf(container, pred);
}
-template <class T, class Allocator, class Predicate>
-void EraseIf(std::multimap<T, Allocator>& container, Predicate pred) {
+template <class Key, class T, class Compare, class Allocator, class Predicate>
+void EraseIf(std::multimap<Key, T, Compare, Allocator>& container,
+ Predicate pred) {
internal::IterateAndEraseIf(container, pred);
}
-template <class T, class Allocator, class Predicate>
-void EraseIf(std::set<T, Allocator>& container, Predicate pred) {
+template <class Key, class Compare, class Allocator, class Predicate>
+void EraseIf(std::set<Key, Compare, Allocator>& container, Predicate pred) {
internal::IterateAndEraseIf(container, pred);
}
-template <class T, class Allocator, class Predicate>
-void EraseIf(std::multiset<T, Allocator>& container, Predicate pred) {
+template <class Key, class Compare, class Allocator, class Predicate>
+void EraseIf(std::multiset<Key, Compare, Allocator>& container,
+ Predicate pred) {
internal::IterateAndEraseIf(container, pred);
}
-template <class T, class Allocator, class Predicate>
-void EraseIf(std::unordered_map<T, Allocator>& container, Predicate pred) {
+template <class Key,
+ class T,
+ class Hash,
+ class KeyEqual,
+ class Allocator,
+ class Predicate>
+void EraseIf(std::unordered_map<Key, T, Hash, KeyEqual, Allocator>& container,
+ Predicate pred) {
internal::IterateAndEraseIf(container, pred);
}
-template <class T, class Allocator, class Predicate>
-void EraseIf(std::unordered_multimap<T, Allocator>& container, Predicate pred) {
+template <class Key,
+ class T,
+ class Hash,
+ class KeyEqual,
+ class Allocator,
+ class Predicate>
+void EraseIf(
+ std::unordered_multimap<Key, T, Hash, KeyEqual, Allocator>& container,
+ Predicate pred) {
internal::IterateAndEraseIf(container, pred);
}
-template <class T, class Allocator, class Predicate>
-void EraseIf(std::unordered_set<T, Allocator>& container, Predicate pred) {
+template <class Key,
+ class Hash,
+ class KeyEqual,
+ class Allocator,
+ class Predicate>
+void EraseIf(std::unordered_set<Key, Hash, KeyEqual, Allocator>& container,
+ Predicate pred) {
internal::IterateAndEraseIf(container, pred);
}
-template <class T, class Allocator, class Predicate>
-void EraseIf(std::unordered_multiset<T, Allocator>& container, Predicate pred) {
+template <class Key,
+ class Hash,
+ class KeyEqual,
+ class Allocator,
+ class Predicate>
+void EraseIf(std::unordered_multiset<Key, Hash, KeyEqual, Allocator>& container,
+ Predicate pred) {
internal::IterateAndEraseIf(container, pred);
}