This page is a snapshot from the LWG issues list, see the Library Active Issues List for more information and the meaning of C++14 status.
2110.remove
can't swap but note says it might
Section: 26.7.8 [alg.remove] Status: C++14 Submitter: Howard Hinnant Opened: 2011-12-07 Last modified: 2016-01-28
Priority: Not Prioritized
View all other issues in [alg.remove].
View all issues with C++14 status.
Discussion:
26.7.8 [alg.remove]/p1 says:
1 Requires: The type of
*first
shall satisfy theMoveAssignable
requirements (Table 22).
This means that remove
/remove_if
can only use move assignment to permute the sequence. But then 26.7.8 [alg.remove]/p6 (non-normatively) contradicts p1:
6 Note: each element in the range
[ret,last)
, whereret
is the returned value, has a valid but unspecified state, because the algorithms can eliminate elements by swapping with or moving from elements that were originally in that range.
[2012, Kona]
Move to Ready.
Alisdair notes we could extend permission to use swap
if it is available, but there is no interest. Accept the proposed resolution as written.
[2012, Portland: applied to WP]
Proposed resolution:
This wording is relative to the FDIS.
Change 26.7.8 [alg.remove] as indicated:
template<class ForwardIterator, class T> ForwardIterator remove(ForwardIterator first, ForwardIterator last, const T& value); template<class ForwardIterator, class Predicate> ForwardIterator remove_if(ForwardIterator first, ForwardIterator last, Predicate pred);[…]
-6-Note: each element in the range[ret,last)
, whereret
is the returned value, has a valid but unspecified state, because the algorithms can eliminate elements by swapping with or moving from elements that were originally in that range.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4