Почему существует конструктор перемещения по умолчанию или оператор присваивания, не созданный для производных классов? Продемонстрировать то, что я имею в виду; наличие этого кода установки:
#include <utility>
struct A
{
A () { }
A (A&&) { throw 0; }
A& operator= (A&&) { throw 0; }
};
struct B : A
{ };
любой из следующих бросков строк:
A x (std::move (A ());
A x; x = A ();
но ни одно из следующего не делает:
B x (std::move (B ());
B x; x = B ();
В случае, если это имеет значение, я протестировал с GCC 4.4.
Править: Более поздний тест с GCC 4.5 показал то же поведение.
Чтение до 12.8 в 0x FCD (12.8 / 17, в частности для перемещения ctor), похоже, является ошибкой GCC. Я вижу, что в 4.5 происходит то же самое, что и в 4.4.
Мне может не хватать крайнего случая для удаленных функций или чего-то подобного, но я пока не вижу никаких указаний на это.