// <deque> -*- C++ -*-
-// Copyright (C) 2001-2013 Free Software Foundation, Inc.
+// Copyright (C) 2001-2020 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
#pragma GCC system_header
#include <bits/stl_algobase.h>
+#if __cplusplus > 201703L
+# include <bits/stl_algo.h> // For remove and remove_if
+#endif // C++20
#include <bits/allocator.h>
#include <bits/stl_construct.h>
#include <bits/stl_uninitialized.h>
# include <debug/deque>
#endif
-#ifdef _GLIBCXX_PROFILE
-# include <profile/deque>
-#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 deque = std::deque<_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 deque<_Tp, _Alloc>::size_type
+ erase_if(deque<_Tp, _Alloc>& __cont, _Predicate __pred)
+ {
+ const auto __osz = __cont.size();
+ __cont.erase(std::remove_if(__cont.begin(), __cont.end(), __pred),
+ __cont.end());
+ return __osz - __cont.size();
+ }
+
+ template<typename _Tp, typename _Alloc, typename _Up>
+ inline typename deque<_Tp, _Alloc>::size_type
+ erase(deque<_Tp, _Alloc>& __cont, const _Up& __value)
+ {
+ const auto __osz = __cont.size();
+ __cont.erase(std::remove(__cont.begin(), __cont.end(), __value),
+ __cont.end());
+ return __osz - __cont.size();
+ }
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace std
+#endif // C++20
#endif /* _GLIBCXX_DEQUE */