Compartilhar via


Erro do compilador C2891

'parameter': não é possível usar o endereço de um parâmetro de modelo

Você não pode usar o endereço de um parâmetro de modelo, a menos que ele seja um lvalue. Os parâmetros de tipo não são lvalues porque não têm endereço. Valores não tipo em listas de parâmetros de modelo que não são lvalues também não têm um endereço. Este é um exemplo de código que causa o erro do compilador C2891, pois o valor passado como parâmetro de modelo é uma cópia gerada pelo compilador do argumento de modelo.

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

É possível usar o endereço de parâmetros de modelo que são lvalues, como tipos de referência.

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

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