std::variant<Types...>::valueless_by_exception
提供: cppreference.com
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 は、無効な状態として扱われます。 index は variant_npos を返し、 get および visit は bad_variant_access を投げます。