No type is safe to use after a move, unless it's documented to put itself in to a well defined state and says as such
You can't magically make all the member functions on std::vector safe after a move for example unless the moved from vector allocates itself a new (empty) buffer, which kills the performance benefits.
It's all by design.