C++1z 現在発生している例外の数を取得するuncaught_exceptions()関数

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の以下の階層の下に解説ページを用意する予定です。