mirror of
https://github.com/Kitware/CMake.git
synced 2026-05-02 20:29:49 -05:00
STL support: add c++20 std::erase and std::erase_if functions
This commit is contained in:
@@ -0,0 +1,42 @@
|
||||
// -*-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
|
||||
Reference in New Issue
Block a user