Я вижу только дополнительный static_assert() и защиту от неправильного использования.
Но я не могу придумать пример, когда (T &&)value не сработало бы как идеальная передача, если T — тип универсальной ссылки, выбранный компилятором автоматически. Можете привести такой пример?
В 0x4 начиная с C++20 не нужен
std::cin.width()
, все работает само: https://en.cppreference.com/w/cpp/io/basic_istream/operator_gtgt2В 0x8, мне кажется, любой нормальный человек использовал бы
wait_for
, принимающий лямбду с условием, хотя это и не "одно слово".В 0xC
__end
- зарезервированное имя, http://eel.is/c++draft/lex#name-3del
Я вижу только дополнительный
static_assert()
и защиту от неправильного использования.Но я не могу придумать пример, когда
(T &&)value
не сработало бы как идеальная передача, еслиT
— тип универсальной ссылки, выбранный компилятором автоматически. Можете привести такой пример?Все-таки
((Types&&)args...)
— это тоже идеальная передача, и работает это так же, какstd::forward()
.Сработает, потому что это не
std::initializer_list
.В обычной инициализации структур используется тот же синтаксис и никаких проблем не возникает, хотя типы разные. (Это было еще в С.)
Я очень надеюсь, что это был сарказм и намек на неточную формулировку текста на слайде...