struct X { int x; };
X func() { return X(); }
と定義したとき、

X().x = 0; は「左のオペランドが、左辺値になっていません」というエラーが出るのに
func().x = 0; がエラーにならないのはなぜですか?