以下代码是否调用未定义的行为?
std::variant<A,B> v = ...;
std::visit([&v](auto& e){
if constexpr (std::is_same_v<std::remove_reference_t<decltype(e)>,A>)
e.some_modifying_operation_on_A();
else {
int i = e.some_accessor_of_B();
v = some_function_returning_A(i);
}
}, v);
特别是,当变体不包含 时A
,此代码重新分配一个A
while 仍然持有对先前持有的类型对象的引用B
。但是,由于赋值后不再使用引用,所以我觉得代码很好。但是,标准库是否可以自由地以std::visit
上述未定义行为的方式实现?