3尝试使用ICC编译下面的代码返回此错误: 错误#453:受保护函数“A :: A()”(在第10行声明)无法通过“A “指针或对象。继承保护缺省构造函数不可访问
class A
{
protected:
constexpr A() = default;
~A() = default;
A(const A&) = delete;
};
class B
: protected A
{
public:
B() = default;
};
int main()
{
B b;
}
我发现3个怪异的办法让它编译:
- 使得公共
- 的构造函数删除的
- 更换缺失的拷贝构造函数“=默认值;”由“{}”在A的Ctor
我的意思是,为什么?..?
谢谢你的答案:)
http://coliru.stacked-crooked.com/view?id=a9cc8a16eaca2659a30defdaa3e68869-f674c1a6d04c632b71a62362c0ccfc51 –
这看起来像一个编译器错误,因为代码是完全有效的,并在其他编译器上编译。如果还没有发生,你可能需要提交一份错误报告。似乎有几个功能涉及混淆编译器足以产生错误。为了完整性,您可以尝试以下方法来缩小bug:** 1 **删除constexpr,** 2 **尝试公共和私有继承,** 3 **将'= default'替换为{ }在B's ctor ** 3b **中显式初始化B的ctor中的A。国际刑事法院的有趣行为:-) –
1,2和3也不编译,但是3b有效。 – ThiSpawn