// -*-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_string
#define cm_string

#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

#endif
