Every time, every time I wrestle with C++ compiler on the move constructors/semantics, I open this post[1] by Herb Sutter saying that C++ moves are simple and misunderstood. It's humiliating to read. Finally, somebody dissected a section by section and explained in a reasonable language that there is nothing simple about C++ moves.
TL:DR of the article: C++ moves are bad because they effectively force nullability on everything, and they provide no guarantees about the state of the objects.