Разрешены ли неявные преобразования с помощью 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, которым мы уже давно наслаждаемся.

Другие вопросы по тегам