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.