C++98時点で、捕捉していない例外があるかどうかを判定するstd::uncaught_exception()
関数が定義されていました。この関数は、例外が送出されてから捕捉されるまでの間でtrue
を返します。
C++1zでは、捕捉していない例外がいくつあるかを返すstd::uncaught_exceptions()
関数が定義されます。
// <exception> namespace std { int uncaught_exceptions() noexcept; }
この関数は、トランザクション処理で使用します。以下のように例外処理が入れ子になっている場合、
RAII1 raii1; try { RAII2 raii2; try { <next> } catch (...) { <rollback> throw; } } catch (...) { <rollback> throw; }
「予定していた例外の数よりも多くの例外が送出されていたら、処理の失敗とみなしてロールバック処理を行う」というようなことが必要となります。そのような状況でこの関数を使用します。
参照
お断り
この記事の内容は、C++1zが正式リリースされる際には変更される可能性があります。正式リリース後には、C++日本語リファレンスサイトcpprefjpの以下の階層の下に解説ページを用意する予定です。