§20.2.4 [declval]
Perché 'declval' è specificato in termini di 'add_rvalue_reference <T> :: type' e non 'T &&'?
template <class T>
typename add_rvalue_reference<T>::type declval() noexcept; // as unevaluated operand
Perché usare add_rvalue_reference
qui?
Da §20.9.7.2 [meta.trans.ref]
su add_rvalue_reference
:
If
T
nomi un tipo di oggetto o di una funzione, allora il membro typedeftype
chiameràT&&
; altrimenti,type
deve essere denominatoT
. [Nota: Questa regola riflette la semantica del collasso di riferimento (8.3.2). Ad esempio, quando un tiponomina un tipoT1&
, il tipoadd_rvalue_reference<T>::type
non è un riferimento di rvalue. -end nota]
Dal add_rvalue_reference
è pensato in modo da riflettere riferimento crollare in ogni modo, perché non utilizzare T&&
come la seguente?
template<class T>
T&& declval();
Cosa potrebbe andare storto? Quali sono esattamente le differenze tra le due versioni?
"Che cosa potrebbe andare storto?" Anatra! –
@LightnessRacesinOrbit: Err ... cosa? Solo perché ho trascurato qualcosa che ho preso -1? Cose interessanti ... – Xeo
@Lightness Ora _that_ è inutile. –