Issue 145787
Summary [clang-tidy] Check request: bugprone-invalidated-std-erase
Labels clang-tidy
Assignees
Reporter denzor200
    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
}
```


_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to