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