Mientras leía esta explicación sobre lvalues y rvalues, estas líneas de código me llamaron la atención:
int& foo();
foo() = 42; // OK, foo() is an lvalue
Lo intenté en g ++, pero el compilador dice "referencia indefinida a foo ()". Si agrego
int foo()
{
return 2;
}
int main()
{
int& foo();
foo() = 42;
}
Se compila bien, pero ejecutarlo produce un error de segmentación . Solo la linea
int& foo();
por sí mismo se compila y se ejecuta sin problemas.
¿Qué significa este código? ¿Cómo se puede asignar un valor a una llamada de función y por qué no es un rvalue?