class A
{
public:
virtual ~A()
{
}
};
class B : virtual public A
{
public:
~B() throw()
{}
};
class C : public B
{
};
int main(int argc, char * argv [])
{
return 0;
}
そのコードは次のエラーを出します:
error: looser throw specifier for ‘virtual C::~C()’
error: overriding ‘virtual B::~B() throw ()’
私のdebianテストでは(gcc(Debian 4.6.0-10)4.6.1 20110526(プレリリース))、以前のgccバージョン(私のdebianシステムでは4.5)ではエラーなしでコンパイルされます。
例外仕様は仮想デストラクタのオーバーライドにどのように影響しますか? その答えによると、コンパイラは基本クラスのthrow宣言に一致するデフォルトのコンストラクタを作成することになっています。明らかに、これは新しいgccで起こることではありません。変更点、正しいコンパイラの動作、および派生クラス(コンパイラフラグなど)に空のデストラクタを手動で追加する以外に、問題の簡単な解決策はありますか。