Пожалуйста, рассмотрите следующий интерфейс функции шаблона с аргументом ссылки пересылки:
template<typename T>
void f(T&& t) { ... }
В этом случае f
либо берет ссылку lvalue, либо ссылку rvalue в зависимости от типа аргумента для f
. Как я могу выразить, что f
не изменяет свой параметр? Следующий наивный подход не работает, поскольку он больше не позволяет передавать ссылки lvalue на f
:
template<typename T>
void f(const T&& t) { ... }