Wrote the following code in vs13:
std::vector<std::string> myvector(1000);
std::fill(myvector.begin(), myvector.end(), "Hello World");
std::vector<std::string> pushto;
for (auto s: myvector)
    pushto.push_back(std::move(*s));
Works but didn't move, it called string copy ctor instead. myvector still had his "Hello World"s at the end.
Using regular c++ 98 iteration like this:
 std::vector<std::string> myvector(1000);
 std::fill(myvector.begin(), myvector.end(), "Hello World");
 std::vector<std::string> pushto;
 for (auto s = myvector.begin(); s != myvector.end();s++)
    pushto.push_back(std::move(*s));
Actually worked, and move was called. myvector strings were empty. 
Why the first more modern notation doesnt work?