1012. reverse_iterator default ctor should value initialize

Section: 27.5.1.3.1 [reverse.iter.cons] Status: C++11 Submitter: Alisdair Meredith Opened: 2009-03-11 Last modified: 2016-02-10

Priority: Not Prioritized

View all issues with C++11 status.

Discussion:

Addresses UK 277

The default constructor default-initializes current, rather than value-initializes. This means that when Iterator corresponds to a trivial type, the current member is left un-initialized, even when the user explictly requests value intialization! At this point, it is not safe to perform any operations on the reverse_iterator other than assign it a new value or destroy it. Note that this does correspond to the basic definition of a singular iterator.

[ Summit: ]

Agree with option i.

Related issue: 408

[ Batavia (2009-05): ]

We believe this should be revisited in conjunction with issue 408, which nearly duplicates this issue. Move to Open.

[ 2009-07 post-Frankfurt: ]

Change "constructed" to "initialized" in two places in the proposed resolution.

Move to Tentatively Ready.

[ 2009 Santa Cruz: ]

Moved to Ready for this meeting.

Proposed resolution:

Change [reverse.iter.con]:

reverse_iterator();

-1- Effects: Default Value initializes current. Iterator operations applied to the resulting iterator have defined behavior if and only if the corresponding operations are defined on a default constructed value initialized iterator of type Iterator.

Change 27.5.3.3.1 [move.iter.op.const]:

move_iterator();

-1- Effects: Constructs a move_iterator, default value initializing current. Iterator operations applied to the resulting iterator have defined behavior if and only if the corresponding operations are defined on a value initialized iterator of type Iterator.