名前空間
変種
操作

std::unexpected

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

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

std::unexpected() は、プログラムから直接呼び出すこともできます。

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

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

(C++11まで)

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

(C++11以降)

[編集] 例外

現在設定されている std::unexpected_handler によってスローされる例外を再スローします。

[編集] 欠陥報告

以下の動作変更を伴う欠陥報告が、以前に公開されたC++標準に遡って適用されました。

DR 適用対象 公開された動作 正しい動作
LWG 2111 C++11 スタックの実行中に std::set_unexpected を呼び出す影響
C++98 とは異なり、一部の ABI を壊す
未規定になった

[編集] 関連項目

期待されない値として表現される
(class template) [編集]
(C++11で非推奨)(C++17で削除)
std::unexpected によって呼び出される関数の型
(typedef) [編集]
English 日本語 中文(简体) 中文(繁體)