This page is a snapshot from the LWG issues list, see the Library Active Issues List for more information and the meaning of NAD Concepts status.
Section: 27.7.5 [alg.replace] Status: NAD Concepts Submitter: Howard Hinnant Opened: 2009-03-22 Last modified: 2016-01-28
Priority: Not Prioritized
View all other issues in [alg.replace].
View all issues with NAD Concepts status.
Discussion:
Addresses UK 301 [CD1]
replace and replace_if have the requirement: OutputIterator<Iter, Iter::reference> Which implies they need to copy some values in the range the algorithm is iterating over. This is not however the case, the only thing that happens is const T&s might be copied over existing elements (hence the OutputIterator<Iter, const T&>.
Remove OutputIterator<Iter, Iter::reference> from replace and replace_if.
[ Summit: ]
We agree. To be handled by Howard.
Proposed resolution:
Change in [algorithms.syn] and 27.7.5 [alg.replace]:
template<ForwardIterator Iter, class T> requiresOutputIterator<Iter, Iter::reference> &&OutputIterator<Iter, const T&> && HasEqualTo<Iter::value_type, T> void replace(Iter first, Iter last, const T& old_value, const T& new_value); template<ForwardIterator Iter, Predicate<auto, Iter::value_type> Pred, class T> requiresOutputIterator<Iter, Iter::reference> &&OutputIterator<Iter, const T&> && CopyConstructible<Pred> void replace_if(Iter first, Iter last, Pred pred, const T& new_value);