Created on 2013-05-29.00:00:00 last changed 130 months ago
Proposed resolution:
Ammend [container.requirements.general], Table 96 as indicated:
Table 96 — Container requirements (continued) Expression Return type Operational
semanticsAssertion/note
pre-/post-conditionComplexity … a == b convertible to bool == is an equivalence relation.
distance(a.begin(),
a.end()) ==
distance(b.begin(),
b.end()) &&
equal(a.begin(),
a.end(),
b.begin(), b.end())Requires: T is
EqualityComparableConstant if a.size() != b.size(), linear otherwise …
Ammend [unord.req] p12:
Two unordered containers a and b compare equal if a.size() == b.size() and, for every equivalent-key group [Ea1,Ea2) obtained from a.equal_range(Ea1), there exists an equivalent-key group [Eb1,Eb2) obtained from b.equal_range(Ea1), such thatdistance(Ea1, Ea2) == distance(Eb1, Eb2) andis_permutation(Ea1, Ea2, Eb1, Eb2) returns true. For […]
Amend [forwardlist.overview] p2:
-2- A forward_list satisfies all of the requirements of a container (Table 96), except that the size() member function is not provided and operator== has linear complexity. […]
[ 2013-09 Chicago (evening issues) ]
Moved to ready, after confirming latest wording reflects the discussion earlier in the day.
[ 2013-09 Chicago ]
Marshall improves wording
[ Alisdair notes that a similar edit would apply to the unordered containers requirements. ]
Previous resolution from Marshall Clow:
Ammend the Operational Semantics for [container.requirements.general], Table 96, row "a == b"
== is an equivalence relation.
distance(a.begin(), a.end()) == distance(b.begin(), b.end()) &&equal(a.begin(), a.end(), b.begin(), b.end())Ammend [unord.req] p12:
Two unordered containers a and b compare equal if a.size() == b.size() and, for every equivalent-key group [Ea1,Ea2) obtained from a.equal_range(Ea1), there exists an equivalent-key group [Eb1,Eb2) obtained from b.equal_range(Ea1), such thatdistance(Ea1, Ea2) == distance(Eb1, Eb2) andis_permutation(Ea1, Ea2, Eb1, Eb2) returns true. For ...
Currently (n3690) Table 96 says, in the row for "a == b", that the Operational semantics are:
== is an equivalence relation.
distance(a.begin(), a.end()) == distance(b.begin(), b.end()) && equal(a.begin(), a.end(),b.begin())
Given the extension of equal for C++14, this can be simplified to:
== is an equivalence relation.
equal(a.begin(), a.end(), b.begin(), b.end())
History | |||
---|---|---|---|
Date | User | Action | Args |
2014-02-27 17:03:20 | admin | set | status: wp -> c++14 |
2014-02-20 13:52:38 | admin | set | status: voting -> wp |
2014-02-12 14:19:44 | admin | set | status: ready -> voting |
2013-09-26 02:33:30 | admin | set | messages: + msg6622 |
2013-09-26 02:33:30 | admin | set | status: new -> ready |
2013-09-25 21:41:20 | admin | set | messages: + msg6618 |
2013-06-02 21:43:18 | admin | set | messages: + msg6526 |
2013-06-02 21:43:18 | admin | set | messages: + msg6525 |
2013-05-29 00:00:00 | admin | create |