Considering this example:
std::vector v1 = { 1, 2, 3 };
const int* i = &v1[1];
std::vector v2(std::move(v1));
std::cout << *i
cppreference.com states that:
... have the option, but aren't required, to move any resources held by the argument...
It looks like std::move
just is a hint to the library that an optimization by transferring ownership is possible, but it's up to the library whether to do that optimization or not.
That means that you should assume that all pointers to elements are invalidated after the move.