Is moved variable valid to use after std::move?
std::move does nothing to a POD.
int a = 5; int b = std::move(a);
a is still good after that.
For non-POD types, the moved object maybe valid for some operations and invalid for other operations -- it all depends on what the move constructor or move assignment operator does.