summaryrefslogtreecommitdiff
path: root/libstdc++-v3/include/std/forward_list
diff options
context:
space:
mode:
authorEdward Smith-Rowland <3dw4rd@verizon.net>2018-11-28 16:44:25 +0000
committerEdward Smith-Rowland <emsr@gcc.gnu.org>2018-11-28 16:44:25 +0000
commit188588e443008dd7795947db60b68571ed724fe3 (patch)
tree96fe0d3f6fb7bc21979a5fdd0f037799009014d8 /libstdc++-v3/include/std/forward_list
parentbd6ccc290a624a54f779054205cbfabb4e33a0aa (diff)
downloadgcc-188588e443008dd7795947db60b68571ed724fe3.tar.gz
Implement uniform container erasure for C++20.
2018-11-28 Edward Smith-Rowland <3dw4rd@verizon.net> Implement uniform container erasure for C++20. * include/Makefile.am: Move erase_if.h. * include/Makefile.in: Move erase_if.h. * include/experimental/bits/erase_if.h: Move ... * include/bits/erase_if.h: ... here. * include/experimental/map: Move erase_if.h. * include/experimental/set: Move erase_if.h. * include/experimental/unordered_map: Move erase_if.h. * include/experimental/unordered_set: Move erase_if.h. * include/std/deque (erase_if, erase): New functions. * include/std/forward_list: Ditto. * include/std/list: Ditto. * include/std/map: Ditto. * include/std/set: Ditto. * include/std/string: Ditto. * include/std/unordered_map: Ditto. * include/std/unordered_set: Ditto. * include/std/vector: Ditto. * testsuite/21_strings/basic_string/erasure.cc: New test. * testsuite/23_containers/deque/erasure.cc: New test. * testsuite/23_containers/forward_list/erasure.cc: New test. * testsuite/23_containers/list/erasure.cc: New test. * testsuite/23_containers/map/erasure.cc: New test. * testsuite/23_containers/set/erasure.cc: New test. * testsuite/23_containers/unordered_map/erasure.cc: New test. * testsuite/23_containers/unordered_set/erasure.cc: New test. * testsuite/23_containers/vector/erasure.cc: New test. From-SVN: r266567
Diffstat (limited to 'libstdc++-v3/include/std/forward_list')
-rw-r--r--libstdc++-v3/include/std/forward_list21
1 files changed, 21 insertions, 0 deletions
diff --git a/libstdc++-v3/include/std/forward_list b/libstdc++-v3/include/std/forward_list
index 00b41354c7d..a2cc90387ad 100644
--- a/libstdc++-v3/include/std/forward_list
+++ b/libstdc++-v3/include/std/forward_list
@@ -60,6 +60,27 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std
#endif // C++17
+
+#if __cplusplus > 201703L
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+ template<typename _Tp, typename _Alloc, typename _Predicate>
+ inline void
+ erase_if(forward_list<_Tp, _Alloc>& __cont, _Predicate __pred)
+ { __cont.remove_if(__pred); }
+
+ template<typename _Tp, typename _Alloc, typename _Up>
+ inline void
+ erase(forward_list<_Tp, _Alloc>& __cont, const _Up& __value)
+ {
+ using __elem_type = typename forward_list<_Tp, _Alloc>::value_type;
+ erase_if(__cont, [&](__elem_type& __elem) { return __elem == __value; });
+ }
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace std
+#endif // C++20
+
#endif // C++11
#endif // _GLIBCXX_FORWARD_LIST