Почему конструктор перемещения для Base
является обязательным в случае наследования (class B
) в следующем коде (как в gcc 7.2, так и в clang 4.0)? Я бы ожидал, что это не потребуется с гарантированным копированием в С++ 17, как в случае композиции (class A
).
struct Base {
Base(Base&&) = delete;
Base& operator=(Base&&) = delete;
Base()
{
}
};
Base make_base()
{
return Base{};
}
struct A {
A() : b(make_base()) {} // <<<--- compiles fine
Base b;
};
#ifdef FAIL
struct B : public Base {
B() : Base(make_base()) {} // <<<--- "Base(Base&&) is deleted"
};
#endif