Condividi tramite


Errore del compilatore C2891

'parameter': non può accettare l'indirizzo di un parametro di modello

Non è possibile accettare l'indirizzo di un parametro di modello a meno che non sia un lvalue. I parametri di tipo non sono lvalue perché non hanno alcun indirizzo. I valori non di tipo negli elenchi di parametri del modello che non sono lvalue non hanno anche un indirizzo. Questo è un esempio di codice che causa l'errore del compilatore C2891, perché il valore passato come parametro di modello è una copia generata dal compilatore dell'argomento modello.

template <int i> int* f() { return &i; }

I parametri del modello che sono lvalue, ad esempio i tipi riferimento, possono avere il relativo indirizzo.

template <int& r> int* f() { return &r; }

Per correggere l'errore, non accettare l'indirizzo di un parametro di modello a meno che non sia un lvalue.