Skip to content

[clang-tidy] modernize-use-emplace suggests C++20 code under C++17 #68886

@maflcko

Description

@maflcko

Assuming a C++ file with:

#include <vector>

struct Marker {
    Marker();
};

struct Number {
    int num;
    Marker dummy;
};

int main() {
    std::vector<Number> vec;
    vec.emplace_back(Number{.num = 2});
    // vec.emplace_back(2); // C++20
}

Clang Tidy will print:

[<source>:14:22: warning: unnecessary temporary object created while calling emplace_back [modernize-use-emplace]]
   14 |     vec.emplace_back(Number{.num = 2});
      |                      ^~~~~~~~~~~~~~~~
1 warning generated.

This is wrong, when using C++17, because fixing the warning requires C++20.

Godbolt: https://godbolt.org/z/xn1Y3xMYo

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions