Вы прочитали это неправильно. Это сломало бы много классов C ++ 03 в таких случаях, как следующие
Question getQuestion();
Question q(getQuestion()); // use of deleted move constructor!
Вместо этого FDIS сообщает, что конструктор перемещения будет объявлен тогда и только тогда, когда пользователь не объявил {конструктор копирования, оператор присваивания {copy, move}, деструктор} и неявно объявленный конструктор перемещения не будет определен как удален }.
Относительно Обновление 2 . До моего сведения дошло, что если вы явно укажете конструктор перемещения по умолчанию, он будет определен как удаленный из условия
для конструктора перемещения, нестатического члена данных или прямого или виртуального базового класса с типом, который не имеет конструктора перемещения и который не может быть легко скопирован.
В дальнейшем конструктор перемещения будет определен как Удалено , поскольку CopyOnly
не может быть легко скопировано.
struct Question
{
std::vector<int> data_;
CopyOnly copyOnly_;
Question(Question&&) = default;
};