名前空間
変種
操作

std::unexpected_handler

提供: cppreference.com
< cpp‎ | error
 
 
 
 
ヘッダ <exception> で定義
typedef void (*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で削除)
動的例外指定に違反したときに呼ばれる関数
(関数) [edit]
(C++17で削除)
std::unexpected によって呼ばれる関数を変更します
(関数) [edit]
(C++11)(C++17で削除)
現在の unexpected_handler を取得します
(関数) [edit]