Avoid ambiguity between C++2a std::erase_if and LFTS version
[gcc.git] / libstdc++-v3 / include / std / forward_list
index 3bed2ad32c247a4ace5bb2236f623f67f4de572b..9d6cc40593babc6b582a82e7053102c1a7d928a0 100644 (file)
@@ -1,6 +1,6 @@
 // <forward_list> -*- C++ -*-
 
-// Copyright (C) 2008-2013 Free Software Foundation, Inc.
+// Copyright (C) 2008-2019 Free Software Foundation, Inc.
 //
 // This file is part of the GNU ISO C++ Library.  This library is free
 // software; you can redistribute it and/or modify it under the
 # include <profile/forward_list>
 #endif
 
+#if __cplusplus >= 201703L
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+  namespace pmr
+  {
+    template<typename _Tp> class polymorphic_allocator;
+    template<typename _Tp>
+      using forward_list = std::forward_list<_Tp, polymorphic_allocator<_Tp>>;
+  } // namespace pmr
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace std
+#endif // C++17
+
+#if __cplusplus > 201703L
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+#define __cpp_lib_erase_if 201900L
+
+  template<typename _Tp, typename _Alloc, typename _Predicate>
+    inline typename forward_list<_Tp, _Alloc>::size_type 
+    erase_if(forward_list<_Tp, _Alloc>& __cont, _Predicate __pred)
+    { return __cont.remove_if(__pred); }
+
+  template<typename _Tp, typename _Alloc, typename _Up>
+    inline typename forward_list<_Tp, _Alloc>::size_type
+    erase(forward_list<_Tp, _Alloc>& __cont, const _Up& __value)
+    {
+      using __elem_type = typename forward_list<_Tp, _Alloc>::value_type;
+      return std::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