最終更新日時: 2026年01月06日 12時47分59秒 (JST)
Koichi Murase が更新

履歴 編集

function
<exception>

# std::uncaught_exception(C++17で非推奨)(C++20で削除)

    namespace std {
      bool uncaught_exception() throw();  // C++03
      bool uncaught_exception() noexcept; // C++11
    }

この機能はC++17から非推奨となり、C++20で削除された。代わりに`std::uncaught_exceptions()`を使用すること。

## 概要

キャッチされていない例外があるかどうかを判定する。

## 戻り値

例外オブジェクトが生成され、送出されてからキャッチするまでの間に`true`を返す。

また、明示的に`terminate()`を呼び出し、実際に呼び出されるまでの間に`true`を返す。

具体的には、`try`ブロック中で作られたオブジェクトのデストラクタや、スタック巻き戻し(unwind)中のデストラクタ、`terminate()`の場合は生存している全てのオブジェクトのデストラクタで`true`になる。

## 例外

投げない

## 例

    #include <iostream>
    #include <exception>

    struct X {
      ~X()
      {
        bool has_uncaught = std::uncaught_exception();
        std::cout << std::boolalpha << has_uncaught << std::endl;
      }
    };

    int main()
    {
      try {
        X x;
        throw std::exception();
      }
      catch (std::exception& e) {
        std::cout << "catch" << std::endl;
      }
    }

### 出力

    true
    catch

## 参照

- GotW #47 Uncaught Exceptions
- CWG Issue 475. When is `std::uncaught_exception()` true? (take 2)
- P0619R4 Reviewing deprecated facilities of C++17 for C++20