Inheriting-Constructors + In-Class-Инициализация нестандартного типа конструкции не выполняется
В моем проекте возникает следующая ошибка:
error: use of deleted function ‘C::C(int)’ note: ‘C::C(int)’ is implicitly deleted because the default definition would be ill-formed: error: use of deleted function ‘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
намного сложнее и подвержен изменениям, поэтому перенос вручную вручную не является жизнеспособным вариантом.