Partager via


Erreur du compilateur C2891

'parameter' : ne peut pas prendre l’adresse d’un paramètre de modèle

Vous ne pouvez pas prendre l’adresse d’un paramètre de modèle, sauf s’il s’agit d’une valeur lvalue. Les paramètres de type ne sont pas lvalues, car ils n’ont pas d’adresse. Les valeurs non de type dans les listes de paramètres de modèle qui ne sont pas des valeurs lvalues n’ont pas non plus d’adresse. Il s’agit d’un exemple de code qui provoque l’erreur du compilateur C2891, car la valeur passée en tant que paramètre de modèle est une copie générée par le compilateur de l’argument de modèle.

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

Les paramètres de modèle qui sont des lvalues, tels que les types de référence, peuvent avoir leur adresse prise.

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

Pour corriger cette erreur, ne prenez pas l’adresse d’un paramètre de modèle, sauf s’il s’agit d’une valeur lvalue.