- exception[meta header]
- std[meta namespace]
- function[meta id-type]
- cpp17deprecated[meta cpp]
- cpp20removed[meta cpp]
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;
}
}
- std::uncaught_exception[color ff0000]
- std::exception[link exception.md]
true
catch