diff options
author | Edward Smith-Rowland <3dw4rd@verizon.net> | 2018-11-28 16:44:25 +0000 |
---|---|---|
committer | Edward Smith-Rowland <emsr@gcc.gnu.org> | 2018-11-28 16:44:25 +0000 |
commit | 188588e443008dd7795947db60b68571ed724fe3 (patch) | |
tree | 96fe0d3f6fb7bc21979a5fdd0f037799009014d8 /libstdc++-v3/include/std/forward_list | |
parent | bd6ccc290a624a54f779054205cbfabb4e33a0aa (diff) | |
download | gcc-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_list | 21 |
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 |