Section: 28.5 [alg.nonmodifying], 28.6 [alg.modifying.operations] Status: Dup Submitter: Peter Dimov Opened: 2004-09-20 Last modified: 2016-02-10
Priority: Not Prioritized
View all issues with Dup status.
Duplicate of: 283
[lib.alg.find] requires T to be EqualityComparable:
template <class InputIterator, class T> InputIterator find(InputIterator first, InputIterator last, const T& value);
However the condition being tested, as specified in the Effects clause, is actually *i == value, where i is an InputIterator.
The two clauses are in agreement only if the type of *i is T, but this isn't necessarily the case. *i may have a heterogeneous comparison operator that takes a T, or a T may be convertible to the type of *i.
Further discussion (c++std-lib-14264): this problem affects a number of algorithsm in clause 25, not just find. We should try to resolve this problem everywhere it appears.
Remove "Type T is EqualityComparable (20.1.1), " from [lib.alg.search]/4.
Remove [lib.alg.replace]/1. Replace [lb.alg.replace]/2 with:
For every iterator i in the range [first, last) for which *i == value or pred(*i) holds perform *i = new_value.
Remove the first sentence of /4. Replace the beginning of /5 with:
For every iterator i in the range [result, result + (last - first)), assign to *i either...
(Note the defect here, current text says assign to i, not *i).
Remove "Type T is Assignable (23.1), " from /1. Replace /2 with:
For every iterator i in the range [first, last) or [first, first + n), perform *i = value.
Remove /1. Remove the first sentence of /6.
Duplicate of (a subset of) issue 283.