29
On harmful overuse of std::move - The Old New Thing
(devblogs.microsoft.com)
The center for all discussion and news regarding C++.
The parts that seem likely to cause this confusion (which I shared when I first started using C++11) are:
std::move
isn't a compiler intrinsic and doesn't force a move operation; it's just a function that returns an r-value reference. So it makes it harder, not easier, for the compiler to "see through" and optimize away, even in the case where "as if" rule should make that legal.