Partilhar via


Erro do compilador C2891

'parâmetro' : não pode tomar o endereço de um parâmetro de modelo

Observações

Você não pode tomar o endereço de um parâmetro de modelo, a menos que seja um lvalue. Os parâmetros de tipo não são lvalues porque não têm endereço. Valores não tipificados em listas de parâmetros de modelo que não são lvalues também não têm um endereço.

Example

Este é um exemplo de código que causa o erro de compilador C2891, porque o valor passado como o parâmetro de modelo é uma cópia gerada pelo compilador do argumento de modelo.

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

Os parâmetros de modelo que são lvalues, como tipos de referência, podem ter seu endereço tomado.

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

Para corrigir esse erro, não tome o endereço de um parâmetro de modelo, a menos que seja um lvalue.