29
On harmful overuse of std::move - The Old New Thing
(devblogs.microsoft.com)
The center for all discussion and news regarding C++.
These
std::move
invocations are harmless, as they only cast objects to their rvalue reference.The destructive bit takes place in the type they are assigned to, as it invokes either a move constructor or a move assignment operator, and calling those implies that the object you just passed to
std::move
will be invalidated after the call and should not be used subsequently.I mean harmless in a way that using std::move on the return type doesn't prevent RVO?
@lysdexic @QuadriLiteral Eh, no. Really. Changing the value category disables RVO
I recommend you read the thread.
@lysdexic I did.
It doesn't look like it, otherwise you'd be aware that the whole point of this submission is that casting return values with
std::move
disables RVO.@lysdexic You claimed otherwise:
"
These std::move invocations are harmless, as they only cast objects to their rvalue reference.
"
If you were right, we wouldn't have the motivation to look at this in EWG.
I am right. Not benefiting from RVO does not mean you're harming anyone.
Again, I recommend you read the submission and also the discussion.