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.
operator-Section: 24.3.5.7 [random.access.iterators] Status: NAD Submitter: Daniel Frey Opened: 2004-02-27 Last modified: 2016-01-28
Priority: Not Prioritized
View all other issues in [random.access.iterators].
View all issues with NAD status.
Discussion:
In 24.1.5 [lib.random.access.iterators], table 76 the operational
semantics for the expression "r -= n" are defined as "return r += -n".
This means, that the expression -n must be valid, which is not the case
for unsigned types.
[ Sydney: Possibly not a real problem, since difference type is required to be a signed integer type. However, the wording in the standard may be less clear than we would like. ]
[ Post Summit Alisdair adds: ]
This issue refers to a requirements table we have removed.
The issue might now relate to 24.3.5.7 [random.access.iterators] p5. However, the rationale in the issue already recognises that the
difference_typemust be signed, so this really looks NAD.
[ Batavia (2009-05): ]
We agree with Alisdair's observations.
Move to NAD.
[ 2009-07 Frankfurt: ]
Need to look at again without concepts.
There was a question about this phrase in the discussion: "the expression
-nmust be valid, which is not the case for unsigned types." Ifnis an object of the iteratordifference_type(egptrdiff_t), then it is never unsigned.
[ 2009-10 Santa Cruz: ]
The group reviewed the wording in the draft and agreed that
nis of difference type, the difference type is signed, and the current wording is correct. Moved to NAD.
Proposed resolution:
To remove this limitation, I suggest to change the operational semantics for this column to:
{ Distance m = n;
if (m >= 0)
while (m--) --r;
else
while (m++) ++r;
return r; }