通常、C++03 までのデストラクタは、任意の例外をスローすることが許可されていました。
ただし、C++11 では、明示的な例外指定のないすべてのデストラクタがnoexcept
デフォルトになりました。これはオーバーライドできますnoexcept(false)
が、このコードは C++11 より前のコンパイラでは受け入れられません。
noexcept(false)
1 つの解決策は、コンパイラ固有の s をチェックすることによっての必要性を検出することです#define
が、これでも既知のコンパイラ セットに対するそのようなコードの適用可能性は制限されます。
С++11 と C++03 の両方でデストラクタから任意の例外をスローできる移植可能な方法はありますか?