Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
'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.