This page is a snapshot from the LWG issues list, see the Library Active Issues List for more information and the meaning of New status.

2375. Is [iterator.requirements.general]/9 too broadly applied?

Section: 22.2.1 [iterator.requirements.general] Status: New Submitter: Marshall Clow Opened: 2014-03-25 Last modified: 2014-06-24

Priority: 3

View other active issues in [iterator.requirements.general].

View all other issues in [iterator.requirements.general].

View all issues with New status.


22.2.1 [iterator.requirements.general] p9 says:

Destruction of an iterator may invalidate pointers and references previously obtained from that iterator.

But the resolution of LWG issue 2360 specifically advocates returning *--temp; where temp is a local variable.

And 22.2.5 [forward.iterators] p6 says:

If a and b are both dereferenceable, then a == b if and only if *a and *b are bound to the same object.

which disallows "stashing" iterators (i.e, iterators that refer to data inside themselves).

So, I suspect that the restriction in p9 should only apply to input iterators, and can probably be moved into 22.2.3 [input.iterators] instead of 22.2.1 [iterator.requirements.general].

[2014-05-22, Daniel comments]

Given that forward iterators (and beyond) are refinements of input iterator, moving this constraint to input iterators won't help much because it would still hold for all refined forms.

Proposed resolution: