Open
Description
Needs a check that will find dangerous usages of std::erase
.
void example() {
std::vector<int> values{1, 1, 2, 3, 1, 4};
std::erase(values, values.front()); // WARNING
}
Correct way to write the same logic is to make a copy before erase:
void example() {
std::vector<int> values{1, 1, 2, 3, 1, 4};
const auto copy = values.front();
std::erase(values, copy); // OK
}
BTW, is it possible to provide such fixit hint? I never seen a Clang Tidy's fixit that provides such transformation.
In C++23 mode this check will definitely provide fixit:
void example() {
std::vector<int> values{1, 1, 2, 3, 1, 4};
std::erase(values, auto{values.front()}); // OK
}