template<typename _Container, typename _UnsafeContainer,
typename _Predicate>
typename _Container::size_type
- __erase_nodes_if(_Container& __cont, const _UnsafeContainer& __ucont,
+ __erase_nodes_if(_Container& __cont, _UnsafeContainer& __ucont,
_Predicate __pred)
{
typename _Container::size_type __num = 0;
inline void
erase_if(map<_Key, _Tp, _Compare, _Alloc>& __cont, _Predicate __pred)
{
- const _GLIBCXX_STD_C::map<_Key, _Tp, _Compare, _Alloc>&
- __ucont = __cont;
+ _GLIBCXX_STD_C::map<_Key, _Tp, _Compare, _Alloc>& __ucont = __cont;
std::__detail::__erase_nodes_if(__cont, __ucont, __pred);
}
inline void
erase_if(multimap<_Key, _Tp, _Compare, _Alloc>& __cont, _Predicate __pred)
{
- const _GLIBCXX_STD_C::multimap<_Key, _Tp, _Compare, _Alloc>&
- __ucont = __cont;
+ _GLIBCXX_STD_C::multimap<_Key, _Tp, _Compare, _Alloc>& __ucont = __cont;
std::__detail::__erase_nodes_if(__cont, __ucont, __pred);
}
inline void
erase_if(set<_Key, _Compare, _Alloc>& __cont, _Predicate __pred)
{
- const _GLIBCXX_STD_C::set<_Key, _Compare, _Alloc>& __ucont = __cont;
+ _GLIBCXX_STD_C::set<_Key, _Compare, _Alloc>& __ucont = __cont;
std::__detail::__erase_nodes_if(__cont, __ucont, __pred);
}
inline void
erase_if(multiset<_Key, _Compare, _Alloc>& __cont, _Predicate __pred)
{
- const _GLIBCXX_STD_C::multiset<_Key, _Compare, _Alloc>& __ucont = __cont;
+ _GLIBCXX_STD_C::multiset<_Key, _Compare, _Alloc>& __ucont = __cont;
std::__detail::__erase_nodes_if(__cont, __ucont, __pred);
}
erase_if(unordered_map<_Key, _Tp, _Hash, _CPred, _Alloc>& __cont,
_Predicate __pred)
{
- const _GLIBCXX_STD_C::unordered_map<_Key, _Tp, _Hash, _CPred, _Alloc>&
+ _GLIBCXX_STD_C::unordered_map<_Key, _Tp, _Hash, _CPred, _Alloc>&
__ucont = __cont;
std::__detail::__erase_nodes_if(__cont, __ucont, __pred);
}
erase_if(unordered_multimap<_Key, _Tp, _Hash, _CPred, _Alloc>& __cont,
_Predicate __pred)
{
- const _GLIBCXX_STD_C::unordered_multimap<_Key, _Tp, _Hash, _CPred, _Alloc>&
+ _GLIBCXX_STD_C::unordered_multimap<_Key, _Tp, _Hash, _CPred, _Alloc>&
__ucont = __cont;
std::__detail::__erase_nodes_if(__cont, __ucont, __pred);
}
erase_if(unordered_set<_Key, _Hash, _CPred, _Alloc>& __cont,
_Predicate __pred)
{
- const _GLIBCXX_STD_C::unordered_set<_Key, _Hash, _CPred, _Alloc>&
+ _GLIBCXX_STD_C::unordered_set<_Key, _Hash, _CPred, _Alloc>&
__ucont = __cont;
std::__detail::__erase_nodes_if(__cont, __ucont, __pred);
}
erase_if(unordered_multiset<_Key, _Hash, _CPred, _Alloc>& __cont,
_Predicate __pred)
{
- const _GLIBCXX_STD_C::unordered_multiset<_Key, _Hash, _CPred, _Alloc>&
+ _GLIBCXX_STD_C::unordered_multiset<_Key, _Hash, _CPred, _Alloc>&
__ucont = __cont;
std::__detail::__erase_nodes_if(__cont, __ucont, __pred);
}
inline typename map<_Key, _Tp, _Compare, _Alloc>::size_type
erase_if(map<_Key, _Tp, _Compare, _Alloc>& __cont, _Predicate __pred)
{
- const _GLIBCXX_STD_C::map<_Key, _Tp, _Compare, _Alloc>&
- __ucont = __cont;
+ _GLIBCXX_STD_C::map<_Key, _Tp, _Compare, _Alloc>& __ucont = __cont;
return __detail::__erase_nodes_if(__cont, __ucont, __pred);
}
inline typename multimap<_Key, _Tp, _Compare, _Alloc>::size_type
erase_if(multimap<_Key, _Tp, _Compare, _Alloc>& __cont, _Predicate __pred)
{
- const _GLIBCXX_STD_C::multimap<_Key, _Tp, _Compare, _Alloc>&
- __ucont = __cont;
+ _GLIBCXX_STD_C::multimap<_Key, _Tp, _Compare, _Alloc>& __ucont = __cont;
return __detail::__erase_nodes_if(__cont, __ucont, __pred);
}
_GLIBCXX_END_NAMESPACE_VERSION
inline typename set<_Key, _Compare, _Alloc>::size_type
erase_if(set<_Key, _Compare, _Alloc>& __cont, _Predicate __pred)
{
- const _GLIBCXX_STD_C::set<_Key, _Compare, _Alloc>& __ucont = __cont;
+ _GLIBCXX_STD_C::set<_Key, _Compare, _Alloc>& __ucont = __cont;
return __detail::__erase_nodes_if(__cont, __ucont, __pred);
}
inline typename multiset<_Key, _Compare, _Alloc>::size_type
erase_if(multiset<_Key, _Compare, _Alloc>& __cont, _Predicate __pred)
{
- const _GLIBCXX_STD_C::multiset<_Key, _Compare, _Alloc>& __ucont = __cont;
+ _GLIBCXX_STD_C::multiset<_Key, _Compare, _Alloc>& __ucont = __cont;
return __detail::__erase_nodes_if(__cont, __ucont, __pred);
}
_GLIBCXX_END_NAMESPACE_VERSION
erase_if(unordered_map<_Key, _Tp, _Hash, _CPred, _Alloc>& __cont,
_Predicate __pred)
{
- const _GLIBCXX_STD_C::unordered_map<_Key, _Tp, _Hash, _CPred, _Alloc>&
+ _GLIBCXX_STD_C::unordered_map<_Key, _Tp, _Hash, _CPred, _Alloc>&
__ucont = __cont;
return __detail::__erase_nodes_if(__cont, __ucont, __pred);
}
erase_if(unordered_multimap<_Key, _Tp, _Hash, _CPred, _Alloc>& __cont,
_Predicate __pred)
{
- const _GLIBCXX_STD_C::unordered_multimap<_Key, _Tp, _Hash, _CPred, _Alloc>&
+ _GLIBCXX_STD_C::unordered_multimap<_Key, _Tp, _Hash, _CPred, _Alloc>&
__ucont = __cont;
return __detail::__erase_nodes_if(__cont, __ucont, __pred);
}
erase_if(unordered_set<_Key, _Hash, _CPred, _Alloc>& __cont,
_Predicate __pred)
{
- const _GLIBCXX_STD_C::unordered_set<_Key, _Hash, _CPred, _Alloc>&
+ _GLIBCXX_STD_C::unordered_set<_Key, _Hash, _CPred, _Alloc>&
__ucont = __cont;
return __detail::__erase_nodes_if(__cont, __ucont, __pred);
}
erase_if(unordered_multiset<_Key, _Hash, _CPred, _Alloc>& __cont,
_Predicate __pred)
{
- const _GLIBCXX_STD_C::unordered_multiset<_Key, _Hash, _CPred, _Alloc>&
+ _GLIBCXX_STD_C::unordered_multiset<_Key, _Hash, _CPred, _Alloc>&
__ucont = __cont;
return __detail::__erase_nodes_if(__cont, __ucont, __pred);
}
VERIFY( num == 4 );
}
+void
+test_pr107850()
+{
+ // Predicate only callable as non-const and only accepts non-const argument.
+ struct Pred { bool operator()(std::pair<const int, int>&) { return false; } };
+ const Pred pred; // erase_if parameter is passed by value, so non-const.
+ std::map<int, int> m;
+ std::erase_if(m, pred);
+ std::multimap<int, int> mm;
+ std::erase_if(mm, pred);
+}
+
int
main()
{
test01();
test02();
+ test_pr107850();
return 0;
}
VERIFY( num == 4 );
}
+void
+test_pr107850()
+{
+ // Predicate only callable as non-const.
+ struct Pred { bool operator()(const int&) { return false; } };
+ const Pred pred; // erase_if parameter is passed by value, so non-const.
+ std::set<int> s;
+ std::erase_if(s, pred);
+ std::multiset<int> ms;
+ std::erase_if(ms, pred);
+}
+
int
main()
{
test01();
test02();
+ test_pr107850();
return 0;
}
VERIFY( num == 4 );
}
+void
+test_pr107850()
+{
+ // Predicate only callable as non-const and only accepts non-const argument.
+ struct Pred { bool operator()(std::pair<const int, int>&) { return false; } };
+ const Pred pred; // erase_if parameter is passed by value, so non-const.
+ std::unordered_map<int, int> m;
+ std::erase_if(m, pred);
+ std::unordered_multimap<int, int> mm;
+ std::erase_if(mm, pred);
+}
+
int
main()
{
test01();
test02();
+ test_pr107850();
return 0;
}
VERIFY( num == 4 );
}
+void
+test_pr107850()
+{
+ // Predicate only callable as non-const.
+ struct Pred { bool operator()(const int&) { return false; } };
+ const Pred pred; // erase_if parameter is passed by value, so non-const.
+ std::unordered_set<int> s;
+ std::erase_if(s, pred);
+ std::unordered_multiset<int> ms;
+ std::erase_if(ms, pred);
+}
+
int
main()
{
test01();
test02();
+ test_pr107850();
return 0;
}
VERIFY( mm == t );
}
+void
+test_pr107850()
+{
+ // Predicate only callable as non-const and only accepts non-const argument.
+ struct Pred { bool operator()(std::pair<const int, int>&) { return false; } };
+ const Pred pred; // erase_if parameter is passed by value, so non-const.
+ std::map<int, int> m;
+ std::experimental::erase_if(m, pred);
+ std::multimap<int, int> mm;
+ std::experimental::erase_if(mm, pred);
+}
+
int
main()
{
test01();
test02();
+ test_pr107850();
return 0;
}
VERIFY( ms == t );
}
+void
+test_pr107850()
+{
+ // Predicate only callable as non-const.
+ struct Pred { bool operator()(const int&) { return false; } };
+ const Pred pred; // erase_if parameter is passed by value, so non-const.
+ std::set<int> s;
+ std::experimental::erase_if(s, pred);
+ std::multiset<int> ms;
+ std::experimental::erase_if(ms, pred);
+}
+
int
main()
{
test01();
test02();
+ test_pr107850();
return 0;
}
VERIFY( umm == t );
}
+void
+test_pr107850()
+{
+ // Predicate only callable as non-const and only accepts non-const argument.
+ struct Pred { bool operator()(std::pair<const int, int>&) { return false; } };
+ const Pred pred; // erase_if parameter is passed by value, so non-const.
+ std::unordered_map<int, int> m;
+ std::experimental::erase_if(m, pred);
+ std::unordered_multimap<int, int> mm;
+ std::experimental::erase_if(mm, pred);
+}
+
int
main()
{
test01();
test02();
+ test_pr107850();
return 0;
}
VERIFY( ums == t );
}
+void
+test_pr107850()
+{
+ // Predicate only callable as non-const.
+ struct Pred { bool operator()(const int&) { return false; } };
+ const Pred pred; // erase_if parameter is passed by value, so non-const.
+ std::unordered_set<int> s;
+ std::experimental::erase_if(s, pred);
+ std::unordered_multiset<int> ms;
+ std::experimental::erase_if(ms, pred);
+}
+
int
main()
{
test01();
test02();
+ test_pr107850();
return 0;
}