Compartir a través de


Error del compilador C2891

"parameter": no puede tomar la dirección de un parámetro de plantilla

No se puede tomar la dirección de un parámetro de plantilla a menos que sea un valor lvalue. Los parámetros de tipo no son valores lvalue porque no tienen ninguna dirección. Los valores que no son de tipo en las listas de parámetros de plantilla que no son valores lvalue tampoco tienen una dirección. Este es un ejemplo de código que provoca el error del compilador C2891, porque el valor pasado como el parámetro de plantilla es una copia generada por el compilador del argumento de plantilla.

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

Los parámetros de plantilla que son valores lvalue, como los tipos de referencia, pueden tener tomada su dirección.

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

Para corregir este error, no tome la dirección de un parámetro de plantilla a menos que sea un valor lvalue.