Namespaces
Variants

std:: unexpected

From cppreference.net
ヘッダーで定義 <exception>
void unexpected ( ) ;
(C++11まで)
[ [ noreturn ] ] void unexpected ( ) ;
(C++11で非推奨)
(C++17で削除)

std::unexpected() は、C++ランタイムによって 動的例外仕様 が違反されたときに呼び出されます:例外が、その例外仕様によってこの型の例外を禁止している関数からスローされた場合です。

std::unexpected() はプログラムから直接呼び出されることもあります。

どちらの場合でも、 std::unexpected は現在インストールされている std::unexpected_handler を呼び出します。デフォルトの std::unexpected_handler std::terminate を呼び出します。

デストラクタがスタックアンワインディング中にunexpectedハンドラをリセットし、そのアンワインディングが後に unexpected の呼び出しにつながった場合、throw式の終了時にインストールされていたハンドラが呼び出される(注:再スローが新しいハンドラを適用するかどうかは曖昧であった)。

(C++11まで)

デストラクタがスタックアンワインディング中にunexpectedハンドラをリセットした場合、そのアンワインディングが後に unexpected の呼び出しにつながったときにどのハンドラが呼び出されるかは未規定である。

(C++11以降)

例外

現在インストールされている std::unexpected_handler によってスローされる例外をスローします。

不具合報告

以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。

DR 適用対象 公開時の動作 正しい動作
LWG 2111 C++11 スタックアンワインディング中に std::set_unexpected を呼び出した場合の効果が
C++98と異なり、一部のABIを破壊する
未規定とする

関連項目

(C++23)
予期しない値として表現される
(クラステンプレート)
(C++11で非推奨) (C++17で削除)
std::unexpected によって呼び出される関数の型
(typedef)