Skip to content

[clang-tidy] Check request: bugprone-invalidated-std-erase #145787

@denzor200

Description

@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
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions