The C++ code implements the intended goal, not the problem TFA is trying to illustrate.
Changing between:
for (auto i : vec)
and
for (auto & i : vec)
has essentially no bearing on what the author is trying to show. If they were focused on how move semantics are always important, they would not use an integer type.
Changing between:
and has essentially no bearing on what the author is trying to show. If they were focused on how move semantics are always important, they would not use an integer type.