§20.2.4 [declval]
爲什麼按'add_rvalue_reference <T> :: type'而不是'T &&'指定'declval'?
template <class T>
typename add_rvalue_reference<T>::type declval() noexcept; // as unevaluated operand
爲什麼在這裏使用add_rvalue_reference
?
從§20.9.7.2 [meta.trans.ref]
上add_rvalue_reference
:
如果
T
名稱的對象或功能類型的typedef然後將type
構件應命名T&&
;否則,type
應命名爲T
。 [注意:該規則反映了參考摺疊(8.3.2)的語義。例如,當類型T
命名爲T1&
類型時,類型add_rvalue_reference<T>::type
不是右值引用。 末端注]
由於add_rvalue_reference
是要反映出參考反正崩潰,爲什麼不直接使用T&&
像下面?
template<class T>
T&& declval();
什麼可能出錯?這兩個版本之間究竟有什麼區別?
「什麼可能會出錯?」鴨! –
@LightnessRacesinOrbit:呃..什麼?僅僅因爲我忽略了我得到的-1?有趣的東西... – Xeo
@Lightness現在_that_是毫無意義的。 –