std::tuple
содержит, среди прочего, следующие конструкторы:Нужны ли все конструкторы std :: tuple?
explicit tuple(const Types&... args);
template< class... UTypes >
explicit tuple(UTypes&&... args);
Оба имеют эквивалентные описания в том, что они Инициализировать каждый из элементов с соответствующим значением в args
. Единственное отличие состоит в том, что во втором параметры перенаправляются.
Из того, что я понял о ссылках rvalue, я не понимаю, почему требуется первая версия, так как одни и те же параметры могут быть переданы во вторую версию. Ссылки будут отправлены, и никто не будет более мудрее, особенно если не упоминается семантика перемещения.
Может ли кто-нибудь объяснить, что это такое, что делает необходимым оба конструктора?
Вторая версия SFINAE-д из набора перегрузки, если не все 'UTypes' неявно конвертируются в соответствующих' Types' – jrok