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