¿El constructor de copia no se llama para inicialización de copia u optimizado?

Si se realiza el constructor de copiaprivate entonces en

Caso 1: No hay error, al compilador no le importa si el constructor de copia se definió en clase.

Caso 2: Error, el constructor de copia es privado y cuando se hacepublic, se elide.

¿Optimiza directamente la copia sin darse cuenta de que si el constructor se hizoprivate?

#include <string>
using std::string;

class T
{
    string s;
    T(const T &obj):s(obj.s){}
public:
    T(const string &str):s(str){}
};

int main()
{
    T a = ("Copy Initialization");     //Case: 1

    T b = T("Copy Initialization");    //Case: 2
}

Respuestas a la pregunta(2)

Su respuesta a la pregunta