After moving an object, it must be destructable:
T obj;
func(std::move(obj));
// don't use obj and let it be destroyed as normal
But what else can be done with obj? Could you move another object into it?
T obj;
func(std::move(obj));
obj = std::move(other);
Does this depend on the exact type? (E.g. std::vector could make specific guarantees you can't rely on for all T.) Is it required or even sane that all types support something besides destruction on moved-from objects?