For me, the problem is only in the std::move is used in the initialization list. In the following example, cppcheck is reporting an issue only in line 6 (constructor) while it's not reporting an issue for line 8 (function). I'm using cppcheck 1.82. struct A { std::vector<int> x; }; struct B { explicit B(A a) : a(std::move(a)) {} void Init(A _a) { a = std::move(_a); } A a; };