<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/145787>145787</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [clang-tidy] Check request: bugprone-invalidated-std-erase
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            clang-tidy
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          denzor200
      </td>
    </tr>
</table>

<pre>
    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
}
```


</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJyslF9r4zgUxT-N_HJJkCX_SR78ECebpSx0YSn0WbaubW1lKSvJbrOffpBjOkPbGTpQEDLGvkdHv3O5wnvVG8SK5DXJT4mYwmBdJdH8bx2jNGmsvFb3iNKDgHbA9gnCIAI8K62hU0aCFKZHZycPkxc9erAdkIL6IAk_EH5AJzySgm4JPcRV0HXRw2yVBHwR40UjYTvC9kDKmtADAMCrwIxtsI7wozKB8D9gFnpCT8o6JewIy8bixl9fM1KeCF-E3thgu7WaHVedbeesCbfT4-I1AGFnws7wePjn_u7-z2i6PL2xTujhaJ3DNsCzuEKw8OxUQAgDghcjgra9akH5-GkUTxjx2csVGuysQ7jZ4Z8n8jU4AKC1xgcQU7A3Q4SfPkLB3-XwnmCsf8Ps779-hqt-eIw1yoMKcLHeq0ZjpHNxdlYSwU_tAJ16UQGG5W5nuAODMzrwiAYEHLUwPTwoeSWs9Ou_SzuuGv4mEpwwvrNuFEFZszbenYEjYTVhNeMwWhmzUn7t6aWdJXbKqID6-uppOeJ3Yvqyxv01-RgfKesPcitPn04kkRWXe74XCVZpmdPdrmScJkMlWVHsMdt3rRRUNm2ZtRmnuM_yMt2nvE1UxSjLacFylnKe0-1u15alzFlBU8zzIiUZxVEovdV6HrfW9YnyfsIqzfJyVyZaNKj9MnQYa2Oqm7CkyuIQclWs2jRT70lGtfLBf9cJKuhlXP1Qlp_guMTo8L8JfQwMmqm_OGtwo8wstJIioNz4IDcLzGRyuhpCuPhIeAHVqzBMzba1I2HneNz62Fyc_RfbQNh5uYMn7LxeY67YtwAAAP__mP2OJA">