Когда я читал это объяснение lvalues и rvalues, мне запомнились следующие строки кода:
int& foo();
foo() = 42; // OK, foo() is an lvalue
Я пробовал это в g ++, но компилятор говорит «неопределенная ссылка на foo ()». Если я добавлю
int foo()
{
return 2;
}
int main()
{
int& foo();
foo() = 42;
}
Он компилируется нормально, но при его запуске возникает ошибка сегментации . Просто линия
int& foo();
сам по себе компилируется и запускается без каких-либо проблем.
Что означает этот код? Как можно присвоить значение вызову функции и почему это не rvalue?