This page is a snapshot from the LWG issues list, see the Library Active Issues List for more information and the meaning of Dup status.
Section: 24.3.5.5 [forward.iterators] Status: Dup Submitter: Dave Abrahams Opened: 2004-07-11 Last modified: 2016-01-28
Priority: Not Prioritized
View all other issues in [forward.iterators].
View all issues with Dup status.
Duplicate of: 478
Discussion:
The Forward Iterator requirements table contains the following:
expression return type operational precondition semantics ========== ================== =========== ========================== a->m U& if X is mutable, (*a).m pre: (*a).m is well-defined. otherwise const U& r->m U& (*r).m pre: (*r).m is well-defined.
The first line is exactly right. The second line is wrong. Basically it implies that the const-ness of the iterator affects the const-ness of referenced members. But Paragraph 11 of [lib.iterator.requirements] says:
In the following sections, a and b denote values of type const X, n denotes a value of the difference type Distance, u, tmp, and m denote identifiers, r denotes a value of X&, t denotes a value of value type T, o denotes a value of some type that is writable to the output iterator.
AFAICT if we need the second line at all, it should read the same as the first line.
Proposed resolution:
Rationale:
The LWG agrees that this is a real problem. Marked as a DUP because the LWG chose to adopt the solution proposed in 478(i).