我知道,给定一个初始化转发/通用引用的表达式,左值被推断为类型T&
和右值类型T
(而不是T&&
)。
因此,为了只允许右值,需要写
template<class T, enable_if<not_<is_lvalue_reference<T> >,OtherConds... > = yes>
void foo(T&& x) {}
并不是,
template<class T, enable_if<is_rvalue_reference<T>,OtherConds... > = yes>
void foo(T&& x) {}
我的问题是,为什么对于转发引用,右值被推断为类型T
而不是T&&
?我想,如果它们被推断为,T&&
那么相同的引用折叠规则也T&& &&
与T&&
.