Skip to content

Latest commit

 

History

History
69 lines (54 loc) · 1.92 KB

uncaught_exception.md

File metadata and controls

69 lines (54 loc) · 1.92 KB

uncaught_exception

  • 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

参照