Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
'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.