| // RUN: %check_clang_tidy %s cppcoreguidelines-pro-type-member-init,hicpp-member-init,modernize-use-emplace,hicpp-use-emplace %t |
| |
| namespace std { |
| |
| template <typename T> |
| class vector { |
| public: |
| void push_back(const T &) {} |
| void push_back(T &&) {} |
| |
| template <typename... Args> |
| void emplace_back(Args &&... args){}; |
| }; |
| } // namespace std |
| |
| class Foo { |
| public: |
| Foo() : _num1(0) |
| // CHECK-MESSAGES: warning: constructor does not initialize these fields: _num2 [cppcoreguidelines-pro-type-member-init,hicpp-member-init] |
| { |
| _num1 = 10; |
| } |
| |
| int use_the_members() const { |
| return _num1 + _num2; |
| } |
| |
| private: |
| int _num1; |
| int _num2; |
| // CHECK-FIXES: _num2{}; |
| }; |
| |
| int should_use_emplace(std::vector<Foo> &v) { |
| v.push_back(Foo()); |
| // CHECK-FIXES: v.emplace_back(); |
| // CHECK-MESSAGES: warning: use emplace_back instead of push_back [hicpp-use-emplace,modernize-use-emplace] |
| } |
| |