- Notifications
You must be signed in to change notification settings - Fork 15.3k
Open
Labels
Description
Example:
#include <memory> struct A {}; struct ClassA { ClassA(std::unique_ptr<A>); }; class ClassB { ClassB(std::unique_ptr<A> aaa) : aa(std::move(aaa)) { a = std::make_unique<ClassA>(std::move(aaa)); } std::unique_ptr<A> aa; std::unique_ptr<ClassA> a; }; No issue from bugprone-use-after-move or from clang-analyzer-cplusplus.Move.
Example 2:
#include <memory> struct Test { Test(std::unique_ptr<int> arg) : a(std::move(arg)) { consume_again(std::move(arg)); } void consume_again(std::unique_ptr<int>) {} std::unique_ptr<int> a; }; int main() { std::unique_ptr<int> a = std::make_unique<int>(1); Test t1(std::move(a)); Test t2(std::move(a)); } Detected by clang-analyzer-cplusplus.Move, but not by bugprone-use-after-move