【发布时间】:2017-11-24 10:22:49
【问题描述】:
这是受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 导致变体变得毫无价值
我不明白这是怎么发生的。
特别是我不明白为什么会调用emplace,我希望程序甚至不会调用它,因为从 S 到 int 参数的转换会抛出。
【问题讨论】:
-
转换发生在
emplace函数内部,而不是main。
标签: c++ exception c++17 variant