Secondo msvc, gcc e clang, il seguente codice è illegale:Utilizzando un modello di classe in un modello di funzione con il parametro di riferimento universale
template <typename T>
void f(T&& e) {
std::vector<T> v;
// do something with v and e ...
}
int main() {
int i;
f(i);
}
rendimenti MSVC
xmemory0 (591): errore C2528: "puntatore": puntatore al riferimento è illegale
gcc e clang danno messaggi di errore simili. Si noti che il parametro di riferimento universale e
non viene utilizzato. Il compilatore non riesce, ovviamente, creare un'istanza il vettore v
, lamentano di essere utilizzato con un riferimento a int
:
nota: vedi riferimento al modello di classe di un'istanza
'std::vector<T,std::allocator<_Ty>>'
essere compilato con[ T=int &, _Ty=int & ]
Ma non riesco a vedere dove viene istanziato il modello di funzione f
con un riferimento a int
.
Qualcuno può spiegare gli errori del compilatore che vediamo qui?
Si noti che * il riferimento di inoltro * è ora il termine preferito. – TartanLlama