Inheriting-Constructors + In-Class-Initialization не тип по умолчанию конструкционных объектов терпит неудачу

Я столкнулся со следующей ошибкой в ​​моем проекте:

ошибка: использование удаленной функции ‘C :: C (int)’ примечание: ‘C :: C (int)’
неявно удалено, потому что определение по умолчанию будет неверно сформировано:
ошибка: использование удаленной функции ‘M :: M ()’

Это код, который я использую:

struct M {
M(int){}
M() = delete;  // Allowing this would work.
};

struct B {
B(int) {}
B() = delete;
};

struct C : public B {
using B::B;
M n = {5};

// C(int i) : B(i) {}  // Adding this would work
};

C c{1};

Кто-нибудь знает, почему это происходит?


Ясно, что язык готов добавить больше инициализации в конец унаследованного конструктора (так как он хочет вызвать конструктор по умолчанию). И ясно, что он хочет неявно добавить вызов конструктора не по умолчанию (инициализация класса) в конец явно определенного конструктора. Но по какой-то причине, которую я не понимаю, он не хочет делать и то и другое одновременно.

В соответствии с этот вопрос, Идеальная пересылка не является достаточно совершенной и не должна использоваться здесь.

Примечание: в реальном случае конструктор (ы) для B намного сложнее и могут быть изменены, поэтому пересылка вручную не является приемлемым вариантом.

15

Решение

Другие решения


По вопросам рекламы [email protected]