¿Cuándo se llama al operador de asignación de copia?

Cuando leí sobre el constructor de copia y el constructor de asignación de copia, lo que entendí es que ambos regalan sus propiedades uno al otro, y que ambos son declarados implícitamente por el compilador (si no está definido). Entonces, ambos deben existir, ya sea haciendo algo útil o no.

Luego probé este código:

#include <iostream>

using namespace std;

class Test {
public:
    Test () {
        cout << "Default constructor" << endl;
    }

    Test (const Test& empty) {
        cout << "Copy constructor" << endl;
    }

    Test& operator=(const Test& empty) {
        cout << "Copy assignment operator" << endl;
    }
private:

};

int main () {
    Test a;     // Test default constructor
    Test b (a); // Test copy constructor
    Test c = b; // Test copy assignment constructor
    system ("pause");
    return 0;
}

Pero parece que el operador de asignación de copia no se llama en absoluto. Lo intenté con tres condiciones:

Todo incluido Imprime:

// Default constructor
// Copy constructor
// Copy constructor    # Why not prints out "Copy assignment operator"?

Sin operador de asignación de copia, simplemente copie el constructor. Imprime:

// Default constructor
// Copy constructor
// Copy constructor    # Why it's printed out even though I didn't define it?

Sin el constructor de copia, solo copie el operador de asignación. Imprime:

// Default constructor # Why "Copy assignment operator" is not printed out?

Único constructor. Imprime:

// Default constructor # Understandable

Entonces, es como si al compilador ni siquiera le importa si defino el operador de asignación de copia o no. Ninguno de los cuatro ejemplos anteriores imprime "Operador de asignación de copia". Entonces, ¿cuándo fue llamado, si realmente existe y tiene un significado?

Respuestas a la pregunta(1)

Su respuesta a la pregunta