477. Operator-> for const forward iterators

Section: 27.2.5 [forward.iterators] Status: Dup Submitter: Dave Abrahams Opened: 2004-07-11 Last modified: 2016-02-10

Priority: Not Prioritized

View all other issues in [forward.iterators].

View all issues with Dup status.

Duplicate of: 478


The Forward Iterator requirements table contains the following:

 expression  return type         operational  precondition
  ==========  ==================  ===========  ==========================
  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.

Related issue: 478

Proposed resolution:


The LWG agrees that this is a real problem. Marked as a DUP because the LWG chose to adopt the solution proposed in 478.