Error del compilador C3854

Actualización: noviembre 2007

Mensaje de error

la expresión situada a la izquierda de '=' se evalúa como una función. No se puede asignar a una función (una función no es un valor L)
expression to left of '=' evaluates to a function. Cannot assign to a function (a function is not an l-value)

No se puede volver a inicializar una referencia. La eliminación de la referencia a una función produce una función, que es un valor r-value, para la que no se puede realizar una asignación. Por tanto, no se puede asignar mediante una referencia a una función.

El ejemplo siguiente genera el error C3854:

// C3854.cpp
int afunc(int i)
{
   return i;
}

typedef int (& rFunc_t)(int);
typedef int (* pFunc_t)(int);

int main()
{
   rFunc_t rf = afunc;   // OK binding a reference to function
   pFunc_t pf = &afunc;   // OK initializing a pointer to function
   
   *pf = &afunc;   // C3854
   // try the following line instead
   // pf = &afunc;
   *rf = &afunc;   // C3854
}