C ++: является ли возвращаемое значение L-значением?

Рассмотрим этот код:

struct foo
{
  int a;
};

foo q() { foo f; f.a =4; return f;}

int main()
{
  foo i;
  i.a = 5;
  q() = i;
}

Ни один компилятор не жалуется на это, даже Clang. Почему q () = ... строка верна?

71
задан Seth Carnegie 24 May 2011 в 14:26
поделиться