wird dies durch beispielsweise inspiriert von cppreferenceWie wird in diesem Beispiel std :: variant wertlos_bis_exception?
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";
}
Zum einen Compiler habe ich versucht, es
false, true
Sinn gibt, dass emplace
die Variante valueless
Was ich nicht verstehe ist, wie das passiert ist. Insbesondere verstehe ich nicht warum emplace
überhaupt aufgerufen wird, ich würde erwarten, dass das Programm es nicht einmal seit der Konvertierung von S zu int Argument wirft.
Konvertierung erfolgt innerhalb der 'emplace' Funktion, nicht in' main'. – Jarod42