// -*-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.  */
#pragma once

#include <algorithm>
#include <string> // IWYU pragma: export

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;
using std::erase_if;

#else

template <typename T, typename Traits, typename Allocator, typename V>
inline void erase(std::basic_string<T, Traits, Allocator>& cont,
                  const V& value)
{
  cont.erase(std::remove(cont.begin(), cont.end(), value), cont.end());
}

template <typename T, typename Traits, typename Allocator, typename Predicate>
inline void erase_if(std::basic_string<T, Traits, Allocator>& cont,
                     Predicate pred)
{
  cont.erase(std::remove_if(cont.begin(), cont.end(), pred), cont.end());
}

#endif

} // namespace cm
