What happens if std::move() is called on a user defined object, that defines no move constructor? Is it simply copied?
1 Answer
Yes, move will fall back to copy. This is how standard containers like std::vector can implement resizing in terms of move, but remain compatible with classes which can only be copied.
However, the class may have an implicitly defined move constructor - see this guidance. http://en.cppreference.com/w/cpp/language/move_constructor#Implicitly-declared_move_constructor
std::moveby itself does nothing to an object. So the answer depends on the context. For example, the moved from object could be used for a move assignment. Or something entirely different. So it is not totally dependent on the type being move constructiblestd::movedoes not move, andstd::forwarddoes not forward.