sobrecarga del operador de asignación omitida / no sucede

Estoy tratando de crear una biblioteca para algún trabajo y estoy usando la sobrecarga del operador para la operación de asignación. Se supone que X e Y son dos instancias de la clase que se ha sobrecargado por lo tanto:

A& A::operator=(A &rhs)
{
    A::assign(*this, rhs);
    return *this;
}

Cuando hago esto:

A z;
z = x + y; // x and y are other instances of class A

in embargo, todo está bien cuando hago un

A p = q + r;

La rutina sobrecargada no recibe llamadas. No tengo mucha experiencia con la sobrecarga de operadores, alguien puede explicar lo que está sucediendo. Una explicación podría ser que p es solo un alias para q + r objeto creado ya, sin embargo, z crea una nueva instancia de clase A y, por lo tanto, la sobrecarga del operador se activa cuando se asigna z. Algo así como

#include <iostream>
using namespace std; 
class X
{
    public:
    X();
};

X::X()
{
    cout<<"called"<<endl;
}

int main(int argc, char *argv[]) 
{
    X e; X f;
    X g = e;
}

where se llama solo se imprime dos veces, una vez para e y f, y no se imprime para g.

Si ese es el caso, ¿alguien puede sugerir una forma de activar la sobrecarga del operador para p.

Gracias