std::unexpected_handler
提供: cppreference.com
ヘッダ <exception> で定義 | ||
typedefvoid(*unexpected_handler)(); | (C++11で非推奨) (C++17で削除) | |
std::unexpected_handler
は std::set_unexpected および std::get_unexpected によって設定および取得され、 std::unexpected によって呼ばれる、関数ポインタ型 (引数を取らず void を返す関数へのポインタ) です。
C++ の処理系は std::terminate() を呼ぶデフォルトの std::unexpected_handler
を提供します。 ヌルポインタ値が (std::set_unexpected によって) 設定された場合、処理系は代わりにデフォルトのハンドラを復元するかもしれません。
ユーザ定義の std::unexpected_handler
はプログラムを終了させるか例外を投げることが期待されます。 例外を投げた場合、以下の3つの状況のいずれかに遭遇するかもしれません。
1) std::unexpected_handler
によって投げられた例外が以前違反した動的例外指定を満たす。 新しい例外は関数を脱出することができ、スタックの巻き戻しは続けられます。
2) std::unexpected_handler
によって投げられた例外が未だ例外指定に違反する。
2a) しかし、例外指定が std::bad_exception を許容している。 投げられた例外オブジェクトは破棄され、 C++ のランタイムによって std::bad_exception が構築されて代わりに投げられます。
2b) 例外指定が std::bad_exception を許容していない。 std::terminate() が呼ばれます。
[編集]関連項目
(C++17で削除) | 動的例外指定に違反したときに呼ばれる関数 (関数) |
(C++17で削除) | std::unexpected によって呼ばれる関数を変更します (関数) |
(C++11)(C++17で削除) | 現在の unexpected_handler を取得します (関数) |