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