左辺値と右辺値に関するこの説明を読んでいると、次のコード行が突き刺さっていました。
int& foo();
foo() = 42; // OK, foo() is an lvalue
私はそれをg ++で試しましたが、コンパイラは「foo()への未定義の参照」と言っています。追加した場合
int foo()
{
return 2;
}
int main()
{
int& foo();
foo() = 42;
}
正常にコンパイルされますが、実行するとセグメンテーション違反が発生します。ただの線
int& foo();
コンパイルするだけで問題なく実行されます。
このコードはどういう意味ですか?どのように値を関数呼び出しに割り当てることができますか、そしてそれはなぜ右辺値ではないのですか?