Можно ли делать perfect forwarding при использовании auto в параметрах функции?
С С++20 можно использовать т.н. abbreviated шаблоны функций, когда вместо явного имени шаблонного типа мы пишем auto. Можно ли (и как) при таком синтаксисе делать perfect forwarding?
template <typename T>
void foo(T x); // is equivalent to
void foo(auto x);
template <typename T>
void foo(T&& x) {
bar(std::forward<T>(x));
} // is equivalent to ?
Ответы (1 шт):
Автор решения: HolyBlackCat
→ Ссылка
Параметр - auto &&p.
Вместо forward - decltype(p)(p). Или std::forward<decltype(p)>(p), результат тот же.