std::is_reference
обнаруживает ссылки, lvalue (&
) и rvalue (&&
).
std::ref
, с другой стороны, возвращает экземпляр std::reference_wrapper
, который являетсяТип класса.
Также обратите внимание, что в template <typename T> void foo(T val)
, T
никогда не будет выводиться как ссылка.Единственный способ сделать его ссылкой - не полагаться на вывод аргумента шаблона: foo<int &>(x)
.