I asked this question about overloading the copy constructor and assignment operator with template versions and considering the confusion involving around the question (sinc
template<typename T>
BaseClass(const T& a_other)
First of all, this is not a copy-constructor. It is rather a templated constructor.
The copy-constructor should be this:
BaseClass(const BaseClass & a_other)
Notice the difference?
Note that the templated constructor doesn't define copy-constructor. The compiler will still generate a default copy-constructor for you, instead of instantiating the templated constructor.
Same argument for copy-assignment.
As mentioned in answers to your other question, the standard specifically disallows it.
I'd guess that a rationale is that if a non-default for these constructors is necessary it would be because they need to deal with the specifics of the class in question. A 'generic' solution wouldn't make sense and might quietly hide potential problems.
Some people might believe it's bad enough that there's already the 'generic' implicit versions of these functions, which silently does the wrong thing for many classes.
The standardese disallowing template versino of these is here:
From C++03 12.8 "Copying class objects"