Конструктор перемещения и оператор присваивания: почему по умолчанию нет производных классов? - PullRequest
6 голосов
/ 23 апреля 2010

Почему по умолчанию не создан конструктор перемещения или оператор присваивания для производных классов? Чтобы продемонстрировать, что я имею в виду; имея этот код настройки:

#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 показали то же поведение.

1 Ответ

6 голосов
/ 23 апреля 2010

Чтение через 12,8 в 0x FCD (12,8 / 17 в частности для ctor-хода), это похоже на ошибку GCC. В 4.5 я вижу то же самое, что и в 4.4.

Возможно, мне не хватает углового регистра для удаленных функций или чего-то подобного, но я пока не вижу никаких признаков этого.

...