As far as I know, the copy constructor must be of the form T(const T&) or T(T&). What if I wanted to add default arguments to the signature
Yes.
§[class.copy]/2:
A non-template constructor for class
Xis a copy constructor if its first parameter is of typeX&,const X&,volatile X&orconst volatile X&, and either there are no other parameters or else all other parameters have default arguments [ Example:X::X(const X&)andX::X(X&,int=1)are copy constructors.