我知道,給定一個初始化轉發/通用參考的表達式,左值被推斷爲類型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&&
。
'enable_if,...>'會起作用。 :)至於爲什麼它被推斷爲'T' - 因爲這是它與左值引用一起工作的方式? 'T&' - >'U'參數 - >'U&'。這是一個特殊的左值情況,而不是右值情況。 –
Xeo
2013-05-04 11:45:01