From the wikipedia page for copy constructors:
X a = X(); // valid given X(const X& copy_from_me) but not valid given X(X& copy_from_me) // bec
Because the code is constructing an object. The = sign here is initializing, not assigning. You can only assign to an existing object, not to one that's under construction.