Does a templated constructor (such as the following) override the implicit copy constructor?
template
struct Foo
{
T data;
// ...
No, that is not a copy constructor. Section 12.8 ([class.copy]
) of the Standard requires that:
A non-template constructor for class
X
is 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.
The compiler will still implicitly generate a defaulted one.
You can make that explicit (requires C++11) by
Foo(const Foo&) = default;