This page is a snapshot from the LWG issues list, see the Library Active Issues List for more information and the meaning of NAD status.
auto_ptr::operator=
Section: 99 [auto.ptr] Status: NAD Submitter: Joseph Gottman Opened: 2000-06-30 Last modified: 2016-01-28
Priority: Not Prioritized
View all other issues in [auto.ptr].
View all issues with NAD status.
Discussion:
According to section 20.4.5, the function
auto_ptr::operator=()
returns a reference to an auto_ptr.
The reason that operator=()
usually returns a reference is to
facilitate code like
int x,y,z; x = y = z = 1;
However, given analogous code for auto_ptr
s,
auto_ptr<int> x, y, z; z.reset(new int(1)); x = y = z;
the result would be that z
and y
would both be set to
NULL, instead of all the auto_ptr
s being set to the same value.
This makes such cascading assignments useless and counterintuitive for
auto_ptr
s.
Proposed resolution:
Change auto_ptr::operator=()
to return void
instead
of an auto_ptr
reference.
Rationale:
The return value has uses other than cascaded assignments: a user can call an auto_ptr member function, pass the auto_ptr to a function, etc. Removing the return value could break working user code.