Namespaces
Variants

std:: unexpected_handler

From cppreference.net
ヘッダーで定義 <exception>
typedef void ( * unexpected_handler ) ( ) ;
(C++11で非推奨)
(C++17で削除)

std::unexpected_handler は関数ポインタ型(引数を取らずvoidを返す関数へのポインタ)であり、 std::set_unexpected および std::get_unexpected 関数によって設定・取得され、 std::unexpected によって呼び出されます。

C++の実装はデフォルトの std::unexpected_handler 関数を提供しており、これは std::terminate() を呼び出します。ヌルポインタ値が( std::set_unexpected によって)設定された場合、実装は代わりにデフォルトハンドラを復元する可能性があります。

ユーザー定義の std::unexpected_handler は、プログラムを終了させるか、例外をスローすることが期待されます。例外をスローする場合、以下の3つの状況のいずれかに遭遇する可能性があります:

1) std::unexpected_handler によって送出された例外は、以前に違反された動的例外仕様を満たす。新しい例外は関数から抜け出すことが許可され、スタックの巻き戻しが継続する。

2) std::unexpected_handler によってスローされた例外が例外仕様に違反する場合:

2a) ただし、例外仕様は std::bad_exception を許可する:スローされた例外オブジェクトは破棄され、 std::bad_exception がC++ランタイムによって構築され、代わりにスローされる。

2b) 例外指定が std::bad_exception を許可しない場合: std::terminate() が呼び出されます。

関連項目

(C++11で非推奨) (C++17で削除)
動的例外指定が違反されたときに呼び出される関数
(関数)
(C++11で非推奨) (C++17で削除)
std::unexpected によって呼び出される関数を変更する
(関数)
(C++11で非推奨) (C++17で削除)
現在の unexpected_handler を取得する
(関数)