Hypothetical copy constructor with non-reference type, such as
A(A);
requires the copy of its argument. Well, how class instances are passed by value in C++? Using copy constructor. What copy constructor? Obviously, not the same one, this creates an endless recursion.
Standard requires copy constructor with const reference, which gives the desired effect (parameter is read-only), gives a good performance and doesn't contain logical problems as mentioned above.