Можно ли делать perfect forwarding при использовании auto в параметрах функции?

Рейтинг: 0Ответов: 1Опубликовано: 04.02.2023

С С++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 ?

Ответы

▲ 3Принят

Параметр - auto &&p.

Вместо forward - decltype(p)(p). Или std::forward<decltype(p)>(p), результат тот же.