diff --git a/libcxx/include/functional b/libcxx/include/functional --- a/libcxx/include/functional +++ b/libcxx/include/functional @@ -3215,22 +3215,6 @@ using unwrap_ref_decay_t = typename unwrap_ref_decay<_Tp>::type; #endif // > C++17 -template -inline typename _Container::size_type -__libcpp_erase_if_container(_Container& __c, _Predicate __pred) { - typename _Container::size_type __old_size = __c.size(); - - const typename _Container::iterator __last = __c.end(); - for (typename _Container::iterator __iter = __c.begin(); __iter != __last;) { - if (__pred(*__iter)) - __iter = __c.erase(__iter); - else - ++__iter; - } - - return __old_size - __c.size(); -} - _LIBCPP_END_NAMESPACE_STD #endif // _LIBCPP_FUNCTIONAL diff --git a/libcxx/include/iterator b/libcxx/include/iterator --- a/libcxx/include/iterator +++ b/libcxx/include/iterator @@ -2033,6 +2033,21 @@ constexpr const _Ep* data(initializer_list<_Ep> __il) noexcept { return __il.begin(); } #endif +template +typename _Container::size_type +__libcpp_erase_if_container(_Container& __c, _Predicate& __pred) { + typename _Container::size_type __old_size = __c.size(); + + const typename _Container::iterator __last = __c.end(); + for (typename _Container::iterator __iter = __c.begin(); __iter != __last;) { + if (__pred(*__iter)) + __iter = __c.erase(__iter); + else + ++__iter; + } + + return __old_size - __c.size(); +} _LIBCPP_END_NAMESPACE_STD diff --git a/libcxx/include/map b/libcxx/include/map --- a/libcxx/include/map +++ b/libcxx/include/map @@ -480,7 +480,7 @@ #include <__config> #include <__tree> #include <__node_handle> -#include +#include // __libcpp_erase_if_container #include #include #include @@ -1660,7 +1660,7 @@ inline _LIBCPP_INLINE_VISIBILITY typename map<_Key, _Tp, _Compare, _Allocator>::size_type erase_if(map<_Key, _Tp, _Compare, _Allocator>& __c, _Predicate __pred) { - return __libcpp_erase_if_container(__c, __pred); + return _VSTD::__libcpp_erase_if_container(__c, __pred); } #endif @@ -2246,7 +2246,7 @@ typename multimap<_Key, _Tp, _Compare, _Allocator>::size_type erase_if(multimap<_Key, _Tp, _Compare, _Allocator>& __c, _Predicate __pred) { - return __libcpp_erase_if_container(__c, __pred); + return _VSTD::__libcpp_erase_if_container(__c, __pred); } #endif diff --git a/libcxx/include/set b/libcxx/include/set --- a/libcxx/include/set +++ b/libcxx/include/set @@ -429,6 +429,7 @@ #include <__tree> #include <__node_handle> #include +#include // __libcpp_erase_if_container #include #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) @@ -964,7 +965,7 @@ inline _LIBCPP_INLINE_VISIBILITY typename set<_Key, _Compare, _Allocator>::size_type erase_if(set<_Key, _Compare, _Allocator>& __c, _Predicate __pred) { - return __libcpp_erase_if_container(__c, __pred); + return _VSTD::__libcpp_erase_if_container(__c, __pred); } #endif @@ -1490,7 +1491,7 @@ inline _LIBCPP_INLINE_VISIBILITY typename multiset<_Key, _Compare, _Allocator>::size_type erase_if(multiset<_Key, _Compare, _Allocator>& __c, _Predicate __pred) { - return __libcpp_erase_if_container(__c, __pred); + return _VSTD::__libcpp_erase_if_container(__c, __pred); } #endif diff --git a/libcxx/include/unordered_map b/libcxx/include/unordered_map --- a/libcxx/include/unordered_map +++ b/libcxx/include/unordered_map @@ -435,6 +435,7 @@ #include <__hash_table> #include <__node_handle> #include +#include // __libcpp_erase_if_container #include #include #include @@ -1817,7 +1818,7 @@ typename unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>::size_type erase_if(unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>& __c, _Predicate __pred) { - return __libcpp_erase_if_container(__c, __pred); + return _VSTD::__libcpp_erase_if_container(__c, __pred); } #endif @@ -2550,7 +2551,7 @@ typename unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>::size_type erase_if(unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __c, _Predicate __pred) { - return __libcpp_erase_if_container(__c, __pred); + return _VSTD::__libcpp_erase_if_container(__c, __pred); } #endif diff --git a/libcxx/include/unordered_set b/libcxx/include/unordered_set --- a/libcxx/include/unordered_set +++ b/libcxx/include/unordered_set @@ -390,6 +390,7 @@ #include <__hash_table> #include <__node_handle> #include +#include // __libcpp_erase_if_container #include #include <__debug> @@ -1069,7 +1070,7 @@ typename unordered_set<_Value, _Hash, _Pred, _Alloc>::size_type erase_if(unordered_set<_Value, _Hash, _Pred, _Alloc>& __c, _Predicate __pred) { - return __libcpp_erase_if_container(__c, __pred); + return _VSTD::__libcpp_erase_if_container(__c, __pred); } #endif @@ -1735,7 +1736,7 @@ typename unordered_multiset<_Value, _Hash, _Pred, _Alloc>::size_type erase_if(unordered_multiset<_Value, _Hash, _Pred, _Alloc>& __c, _Predicate __pred) { - return __libcpp_erase_if_container(__c, __pred); + return _VSTD::__libcpp_erase_if_container(__c, __pred); } #endif