Как состояние в ответе по ссылке и в cppreference
Сначала мы рассматриваем производное как значение, а если оно не выбирает XXX(/*const*/Derived&&)
(до C ++ 20), то мы Пересмотрите его как lvalue.
Так что, пока нет Base(Derived&&)
, копия сделана.
Хотя я не нашел всего логика c предупреждения., 1. 2. 3. должен обрабатываться в том же IMO (либо нет предупреждений, которые в настоящее время эквивалентны, либо предупреждений для будущего подтверждения).
Для 1.
конструктор копирования и перемещения генерируется компилятором .
копирование или перемещение дают тот же результат в конце.
Для 2.
Field
конструктор перемещения больше не генерируется, поэтому вместо перемещения создается полная цепная копия.
Копирование или перемещение дают тот же результат в конце.
Для 3.
Base
Конструктор перемещения больше не генерируется, поэтому копирование с начала.
Копирование или перемещение дают то же самое результат в конце.
Для 4.
База имеет конструктор копирования и перемещения.
Копирование или перемещение дают диф первый результат.
Для 5.
Теперь у нас есть совпадение XXX(Derived&&)
(XXX
= Derieved
), поэтому копирование не производится.