Kompilatorfel C2891

Parameter : kan inte ta adressen till en mallparameter

Anmärkningar

Du kan inte ta adressen till en mallparameter om det inte är en lvalue. Typparametrar är inte lvalues eftersom de inte har någon adress. Värden som inte är av typen i mallparameterlistor som inte är lvalues har inte heller någon adress.

Example

Det här är ett exempel på kod som orsakar kompilatorfel C2891, eftersom värdet som skickas som mallparameter är en kompilatorgenererad kopia av mallargumentet.

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

Mallparametrar som är lvalues, till exempel referenstyper, kan få sin adress tagen.

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

Åtgärda det här felet genom att inte ta adressen till en mallparameter om det inte är en lvalue.