Если у вас есть объявленный пользователем конструктор копирования, тогда конструктором перемещения и назначением перемещения являются не объявленные , которые не совпадают с удаленными.
Это означает, что единственной действительной подписью является A(A const &)
- конструктор копирования.
Итак, когда вы вызываете конструктор со ссылкой на rvalue (что явно указано в std :: move), лучшим будет конструктор копирования, подпись которого является ссылкой на lvalue для const. match.
Однако, если вы определили конструктор перемещения как удаленный, то эта сигнатура будет найдена, и, поскольку это лучшее совпадение, компилятор даже не попытается сопоставить его с конструктором копирования. Однако, поскольку конструктор перемещения удален, компилятор говорит: «эй, я нашел наилучшее совпадение, то есть конструктор перемещения, поэтому я воспользуюсь им, но он определен как удаленный, поэтому вы не можете его вызывать. «