Поделиться через


Ошибка компилятора C2891

"parameter" : не может принимать адрес параметра шаблона

Замечания

Адрес параметра шаблона нельзя принимать, если только это не lvalue. Параметры типа не являются lvalues, так как они не имеют адреса. Значения, отличные от типа, в списках параметров шаблона, которые не являются lvalues, также не имеют адреса.

Example

Это пример кода, который вызывает ошибку компилятора C2891, так как значение, переданное в качестве параметра шаблона, является созданной компилятором копией аргумента шаблона.

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

Параметры шаблона, которые являются lvalues, например ссылочными типами, могут принимать их адрес.

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

Чтобы исправить эту ошибку, не следует принимать адрес параметра шаблона, если он не является lvalue.