decltype(auto)
(стр. 28):
template<typename Container, typename Index>
decltype(auto)
authAndAccess(Container&& c, Index i)
{
authenticateUser();
return std::forward<Container>(c)[i];
}
Мой вопрос прост. Зачем нам std::forward
применять к c
здесь? Мы не проходим c
в любом месте, мы вызываем на нем operator[]
. И ни один из стандартных контейнеров не имеет отказоустойчивых перегрузок (перегрузки r-value/l-value) operator[]
.
Поэтому я вижу только две причины для этого std::forward
:
- Для учета потенциальных контейнеров, которые реализуют рефлексивные перегрузки
operator[]
. - Для согласованности: всякий раз, когда используется переменная, объявленная как перенаправление (универсальная) ссылка, примените к ней
std::forward
. Период.
Любые другие причины?