It depends on the class code. If class doesn't have rvalue reference constructor and assignment operator, std::move is ignored. std::move doesn't move anything, it just allows to treat its argument as rvalue reference, if appropriate function is available.
Correctly written && constructor and operator= must leave parameter instance in some consistent state, like empty string, and object should be usable. If there is operator=, another object may be correctly assigned to such empty instance.
Edit.
Generally, std::move should be used to apply move semantics to variable which is not rvalue, but actually it is:
SomeClass::SomeClass(SomeClass&& v)
{
// Inside of this function, v is not rvalue anymore. But I know that actually
// this is rvalue, and use std::move
OtherFunction(std::move(v));
}
In this case, mininal requirement to v is that it should be able to die without problems.
When std::move is used for variable which is not actually rvalue reference, really, this variable usability may be undefined. For my own classes, I would ensure some kind of consistency for this case. For another classes - it depends on specific class implementation, but I would not apply std::move to objects which are not actually rvalue references. I really don't know how this is defined (and whether it is defined) in the standard.