C++ 继承构造函数+;非默认构造函数类型的类内初始化失败

C++ 继承构造函数+;非默认构造函数类型的类内初始化失败,c++,c++11,in-class-initialization,inheriting-constructors,C++,C++11,In Class Initialization,Inheriting Constructors,我在项目中遇到以下错误: 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()’ 有人知道为什么会这样吗 显然,该语言愿意在继承构造函数的末尾附加更多的初始化(因为它愿意调用默认构造函数)。显然,它愿意在

我在项目中遇到以下错误:

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()’ 有人知道为什么会这样吗


显然,该语言愿意在继承构造函数的末尾附加更多的初始化(因为它愿意调用默认构造函数)。显然,它愿意在显式定义的构造函数末尾隐式地添加对非默认构造函数(类内初始化)的调用。但出于某种原因,我不明白,它不愿意同时做这两件事

根据,完美转发还不够完美,不应该在这里使用


注意:在实际情况下,
B
的构造函数要复杂得多,并且容易更改,因此手动转发内容不是一个切实可行的选择。

删除的
B()
中存在问题吗?编译器无法编写默认的
C()
,因为它需要默认的
B()
才能存在……程序使用clang++3.5编译。据我所知,这个程序实际上格式良好。隐式定义的
C(int)
ctor应该定义为
C(int p):B(static_cast(p)){}
似乎g++4.8忽略了“继承的”中的NSDMI(
C(int)
),而它不应该这样做。有人能在最近的一次g++上确认这一点吗?在主干上出现故障,并且也出现故障。也找不到关于此的任何现有错误报告。你应该报告-
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};