最終更新日時(UTC): 2023年02月09日 09時45分03秒
yoh が更新

履歴 編集

function
<exception>

# std::unexpected(C++11で非推奨)(C++17で削除)

    namespace std {
      void unexpected();
    }

この関数はC++11から非推奨となり、C++17で削除された。`throw`キーワードの代わりに使用する`noexcept`キーワードでは、指定外の例外が発生することによるエラーは起こらない。

C++23から、同名の`std::unexpected<E>`クラステンプレートが追加される。C++17で削除された名前の再利用となっているが、この関数と同クラステンプレートの間に機能的な関係は一切ない。

## 概要

例外指定のある関数内で、指定外の例外が発生した時に呼び出される例外ハンドラを直接呼び出す。

この関数を呼び出すと、例外ハンドラが呼ばれ、さらに終了ハンドラが呼び出され、アプリケーションは終了する。ハンドラ内で例外を送出した場合は、この関数を呼び出した地点が、`try`ブロックで処理されていれば捕捉できる。

## 例

    #include <stdexcept>
    #include <iostream>

    void unexpected_handler()
    {
      std::cout << "unexpected handler called" << std::endl;
    }

    int main()
    {
      std::set_unexpected(unexpected_handler);
      std::unexpected();
    }

### 出力

    unexpected handler called
    <例外キャッチを行っていないので、アプリケーション自体が終了する>

## 参照

- C++17 非推奨だった古い例外仕様を削除