• Class / Function / Type

      std::
    • Header file

      <>
    • Other / All

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

    履歴 編集

    function
    <exception>

    std::uncaught_exception

    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
    

    参照