std::variant
「例外による無価値」と呼ばれる状態に入ることができます。
私が理解しているように、これの一般的な原因は、移動割り当てが例外をスローした場合です。バリアントの古い値が存在することは保証されておらず、意図した新しい値も存在しません。
std::optional
ただし、そのような状態はありません。cppreference は大胆な主張をしています:
例外がスローされた場合、*this ... の初期化状態は変更されません。つまり、オブジェクトに値が含まれていた場合は、まだ値が含まれており、その逆も同様です。
std::optional
「例外による無価値」になることをどのように回避できstd::variant
ますか?