名前空間
変種
操作

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

提供: cppreference.com
< cpp‎ | utility‎ | variant
 
 
 
 
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 を投げます。