E2018 'identifier'を捕捉できません -- あいまいな基底クラス 'identifier' (C++)
仮想ではない基底クラスの複数のコピーを含むクラスを捕捉することは正しくありません。ただし、さらに派生した型として例外を捕捉できます。次に例を示します。
struct awkward : std::runtime_error, std::logic_error {}; try { } catch( std::exception & ) { // 一意に決まらず、ここでは捕捉されない } catch( std::runtime_error & ) { // ここで捕捉 }
コンパイラが、最初の句で、すべての一致する例外を捕捉するため、2 番目の捕捉がトリガできないという警告が表示される場合があることに注意してください。ただし、一意に決まらない基底クラスは 2 番目の句で捕捉されます。