以下代码在使用gcc 5.4.0进行编译时显示“失败者抛出说明符错误”。我不明白为什么。
class Err {
};
class A {
public:
A() {}
~A() throw(Err) {}
};
class Base {
public:
inline Base() { }
inline virtual ~Base() { }
};
class Derived : public virtual Base {
public:
A a;
Derived() { }
};
int main()
{
return 0;
}
* g ++ --std = c ++ 11 -m64 -Wtype-limits -Wextra -ggdb -Wall -Werrorlackrthrow.cpp -oloederthrow
looserthrow.cpp:16:7:错误:“ virtual Derived ::〜Derived()throw(Err)”的较宽松的抛出说明符 派生的类:public virtual Base { ^
looserthrow.cpp:13:24:错误:覆盖了“虚拟Base ::〜Base()noexcept” 内联虚拟〜Base(){} ^ *
请注意此代码的微妙之处与以前的主题不同。这里的基类没有抛出说明符。那么Derived类怎么会有一个宽松的throw说明符。