// <unordered_set> -*- C++ -*-
-// Copyright (C) 2007-2017 Free Software Foundation, Inc.
+// Copyright (C) 2007-2024 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/requires_hosted.h> // containers
+
#if __cplusplus < 201103L
# include <bits/c++0x_warning.h>
#else
-#include <type_traits>
#include <initializer_list>
-#include <bits/allocator.h>
-#include <ext/alloc_traits.h>
-#include <ext/aligned_buffer.h>
-#include <bits/stl_pair.h>
-#include <bits/stl_function.h> // equal_to, _Identity, _Select1st
-#include <bits/functional_hash.h>
-#include <bits/hashtable.h>
#include <bits/unordered_set.h>
#include <bits/range_access.h>
+#include <bits/erase_if.h>
#ifdef _GLIBCXX_DEBUG
# include <debug/unordered_set>
#endif
-#ifdef _GLIBCXX_PROFILE
-# include <profile/unordered_set>
-#endif
+#define __glibcxx_want_erase_if
+#define __glibcxx_want_generic_unordered_lookup
+#define __glibcxx_want_node_extract
+#define __glibcxx_want_nonmember_container_access
+#include <bits/version.h>
+
+#if __cplusplus >= 201703L
+#include <bits/memory_resource.h>
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+ namespace pmr
+ {
+ template<typename _Key, typename _Hash = std::hash<_Key>,
+ typename _Pred = std::equal_to<_Key>>
+ using unordered_set
+ = std::unordered_set<_Key, _Hash, _Pred,
+ polymorphic_allocator<_Key>>;
+ template<typename _Key, typename _Hash = std::hash<_Key>,
+ typename _Pred = std::equal_to<_Key>>
+ using unordered_multiset
+ = std::unordered_multiset<_Key, _Hash, _Pred,
+ polymorphic_allocator<_Key>>;
+ } // namespace pmr
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace std
+#endif // C++17
+
+#if __cplusplus > 201703L
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+ template<typename _Key, typename _Hash, typename _CPred, typename _Alloc,
+ typename _Predicate>
+ inline typename unordered_set<_Key, _Hash, _CPred, _Alloc>::size_type
+ erase_if(unordered_set<_Key, _Hash, _CPred, _Alloc>& __cont,
+ _Predicate __pred)
+ {
+ _GLIBCXX_STD_C::unordered_set<_Key, _Hash, _CPred, _Alloc>&
+ __ucont = __cont;
+ return __detail::__erase_nodes_if(__cont, __ucont, __pred);
+ }
+
+ template<typename _Key, typename _Hash, typename _CPred, typename _Alloc,
+ typename _Predicate>
+ inline typename unordered_multiset<_Key, _Hash, _CPred, _Alloc>::size_type
+ erase_if(unordered_multiset<_Key, _Hash, _CPred, _Alloc>& __cont,
+ _Predicate __pred)
+ {
+ _GLIBCXX_STD_C::unordered_multiset<_Key, _Hash, _CPred, _Alloc>&
+ __ucont = __cont;
+ return __detail::__erase_nodes_if(__cont, __ucont, __pred);
+ }
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace std
+#endif // C++20
+
#endif // C++11
#endif // _GLIBCXX_UNORDERED_SET