This page is a snapshot from the LWG issues list, see the Library Active Issues List for more information and the meaning of C++20 status.
common_iterator is not sufficiently constrained for non-copyable iteratorsSection: 24.5.5.1 [common.iterator] Status: C++20 Submitter: Corentin Jabot Opened: 2020-01-31 Last modified: 2021-02-25
Priority: 0
View other active issues in [common.iterator].
View all other issues in [common.iterator].
View all issues with C++20 status.
Discussion:
We don't actually specify anywhere that non-copyable iterators do not have a common_iterator
(and it would make little sense for them to as algorithms dealing with C++17 iterators are not expecting
non-copyable things) As it stands common_iterator can be created from move only iterator but
are then non-copyable themselves. P1862 already constrains
common_view in a similar fashion
[2020-02 Prioritized as IMMEDIATE Monday morning in Prague]
Proposed resolution:
This wording is relative to N4849.
Modify 24.2 [iterator.synopsis], header <iterator> synopsis, as indicated:
namespace std {
[…]
// 24.5.5 [iterators.common], common iterators
template<input_or_output_iterator I, sentinel_for<I> S>
requires (!same_as<I, S> && copyable<I>)
class common_iterator;
[…]
}
Modify 24.5.5.1 [common.iterator], class template common_iterator synopsis, as indicated:
namespace std {
template<input_or_output_iterator I, sentinel_for<I> S>
requires (!same_as<I, S> && copyable<I>)
class common_iterator {
public:
[…]
};
[…]
}