Re: compile error about auto_ptr
Thanks Alf!
That said, what I meant was what I wrote, ??12.8/2 of the standard, but
the non-normative note clarifies one of the consequences.
To make sure we are on the same page, do you mean this one?
--------------------
ISO 14882
A non-template constructor for class X is a copy constructor if its first
parameter is of type X&, const X&,
volatile X& or const volatile X&, and either there are no other parameters
or else all other
parameters have default arguments (8.3.6).106) [Example: X::X(const X&) and
X::X(X&, int=1)
are copy constructors.
class X {
// ...
public:
X(int);
X(const X&, int = 1);
};
X a(1); // calls X(int);
X b(a, 0); // calls X(const X&, int);
X c = b; // calls X(const X&, int);
???end example] [Note: all forms of copy constructor may be declared for a
class. [Example:
class X {
// ...
public:
X(const X&);
X(X&); //OK
};
???end example] ???end note] [Note: if a class X only has a copy constructor
with a parameter of type X&,
an initializer of type const X or volatile X cannot initialize an object of
type (possibly cv-qualified) X.
[Example:
struct X {
X(); //default constructor
X(X&); //copy constructor with a nonconst parameter
};
const X cx;
X x = cx; // error ??? X::X(X&) cannot copy cx into x
???end example] ???end note]
Because a template constructor is never a copy constructor, the presence of
such a template does not suppress the implicit declaration
of a copy constructor. Template constructors participate in overload
resolution with other constructors, including copy constructors,
and a template constructor may be used to copy an object if it provides a
better match than other constructors.
--------------------
regards,
George