名前空間
変種
操作

std::variant<Types...>::valueless_by_exception

提供: cppreference.com
< cpp‎ | utility‎ | variant
 
 
ユーティリティライブラリ
汎用ユーティリティ
日付と時間
関数オブジェクト
書式化ライブラリ (C++20)
(C++11)
関係演算子 (C++20で非推奨)
整数比較関数
(C++20)
スワップと型操作
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
一般的な語彙の型
(C++11)
(C++17)
(C++17)
(C++17)
(C++17)

初等文字列変換
(C++17)
(C++17)
 
 
constexpr bool valueless_by_exception() const noexcept;
(C++17以上)

variant が値を保持している場合に限り false を返します。

[編集] ノート

variant は以下の状況で値を保持しない状態 (valueless) になる可能性があります。

  • (必ず) コピー代入で格納される値の一時オブジェクトからのムーブ初期化中に例外が投げられた場合
  • (必ず) ムーブ代入で格納される値のムーブ初期化中に例外が投げられた場合
  • (任意) 型を変更する代入で格納される値の初期化中に例外が投げられた場合
  • (任意) 型を変更する emplace で格納される値の初期化中に例外が投げられた場合

variant は動的メモリの確保が許されていないため、これらの状況で以前の値を維持することができません。

これは非クラス型の variant にも適用されます。

struct S {
    operator int() { throw 42; }
};
variant<float, int> v{12.f}; // OK。
v.emplace<1>(S()); // v は valueless になる可能性があります。

valueless な variant は、無効な状態として扱われます。 indexvariant_npos を返し、 get および visitbad_variant_access を投げます。