最終更新日時(UTC):
が更新

履歴 編集

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

参照