asignar a rvalue: ¿por qué esto compila?

En el siguiente ejemplo:

class A {
  private: double content;

  public:
  A():content(0) {}

  A operator+(const A& other) {     
    content += other.content;
    return *this;
  }

 void operator=(const A& other) {
       content = other.content;
  }

};

A es un contenedor simple para un doble para el cual el+ y= los operadores han sido sobrecargados. En el siguiente uso:

 int main(int argc, char *argv[]) {
    A a, b, c;
    (a+b) = c ; // Why is this operation legal?
}

Por que(a+b) = c ¿compilar? Me gustaría saber por qué esta declaración es legal, porque el resultado de(a+b) debe ser unrvalue. No estoy devolviendo una referencia deoperator+.

Respuestas a la pregunta(1)

Su respuesta a la pregunta