aaron.ballman added a comment.
In https://reviews.llvm.org/D12839#582828, @malcolm.parsons wrote:
> The modernize-pass-by-value check does the same thing:
>
> test/clang-tidy/misc-move-constructor-init.cpp:98:12: warning: pass by
> value and use std::move [modernize-pass-by-value]
> Positive(Movable M) : M_(M) {}
> ^
> std::move( )
> test/clang-tidy/misc-move-constructor-init.cpp:98:28: warning: value
> argument 'M' can be moved to avoid copy [misc-move-constructor-init]
> Positive(Movable M) : M_(M) {}
> ^
>
>
> Do we need two checks for this?
This overlap is unfortunate. misc-move-constructor-init is for move constructor
initializer lists which accidentally initialize a member or base through a copy
constructor rather than a move constructor. Consider:
struct B { B(B&&); B(const B&); };
struct D {
D(D &&d) : B(d) {} // Oops, calling B(const B&) not B(B&&)
D(const D &d) : B(d) {}
modernize-pass-by-value is slightly different in that it is concerned with the
parameter of an arbitrary function being something that is movable if you pass
it by value instead of passing it by reference.
So misc-move-constructor-init cares about move constructor initializer lists
while modernize-pass-by-value cares about the parameters of a function.
https://reviews.llvm.org/D12839
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits