// -*-c++-*-
// vim: set ft=cpp:

/* Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
   file Copyright.txt or https://cmake.org/licensing for details.  */
#ifndef cm_set
#define cm_set

#include <set> // IWYU pragma: export

#include <cm/bits/erase_if.hxx>

namespace cm {

// should be updated when C++20 is finalized
#if (__cplusplus > 201703L ||                                                 \
     (defined(_MSVC_LANG) && _MSVC_LANG > 201703)) &&                         \
  defined(__cpp_lib_erase_if)

using std::erase_if;

#else

template <typename Key, typename Compare, typename Allocator,
          typename Predicate>
inline void erase_if(std::set<Key, Compare, Allocator>& cont, Predicate pred)
{
  internals::erase_if(cont, pred);
}

template <typename Key, typename Compare, typename Allocator,
          typename Predicate>
inline void erase_if(std::multiset<Key, Compare, Allocator>& cont,
                     Predicate pred)
{
  internals::erase_if(cont, pred);
}

#endif

} // namespace cm

#endif
