이 예 emplace
가 변형 무가치하게시킨 것을 의미이 예제에서는 std :: variant가 valueless_by_exception이되는 방식은 무엇입니까?
진정한 I 그것이
거짓 출력하려고 한 컴파일러 들어 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