Разрешены ли неявные преобразования с помощью std::tie?
В C++11 разрешены неявные преобразования с помощью std::tie?
Следующий код компилируется и запускается, но я не уверен, что именно происходит за кулисами или это безопасно.
std::tuple<float,float> foo() { return std::make_tuple(0,0); }
double a, b;
std::tie(a,b) = foo(); // a and b are doubles but foo() returns floats
1 ответ
Решение
Что происходит, если используется шаблонная версия оператора перемещения-присваивания кортежа
template< class... UTypes >
tuple& operator=(tuple<UTypes...>&& other );
который перемещает-назначает отдельных членов кортежа один за другим, используя их собственную семантику перемещения-назначения. Если соответствующие члены неявно конвертируемы - они неявно конвертируются.
Это в основном естественное расширение аналогичной функциональности в std::pair
, которым мы уже давно наслаждаемся.