これは私はそれがemplace
バリアントは無価値この例では、std :: variantはvalueless_by_exceptionになりますか?
真、偽
を出力しようとした1つのコンパイラのcppreference
struct S {
operator int() { throw 42; }
};
int main(){
variant<float, int> v{12.f}; // OK
cout << std::boolalpha << v.valueless_by_exception() << "\n";
try{
v.emplace<1>(S()); // v may be valueless
}
catch(...){
}
cout << std::boolalpha << v.valueless_by_exception() << "\n";
}
からの例に触発された例です。
私が理解していないことは、これがどのように起こったかです。 特に私はemplace
が全く呼び出されない理由を理解していませんが、Sからint引数のスローへの変換以来、プログラムはそれを呼び出さないと思います。
'main'ではなく' emplace'関数の内部で変換が行われます。 – Jarod42