[range.common.overview] (original) (raw)
25 Ranges library [ranges]
25.7 Range adaptors [range.adaptors]
25.7.20 Common view [range.common]
25.7.20.1 Overview [range.common.overview]
common_view takes a view which has different types for its iterator and sentinel and turns it into a view of the same elements with an iterator and sentinel of the same type.
[Note 1:
common_view is useful for calling legacy algorithms that expect a range's iterator and sentinel types to be the same.
— _end note_]
Given a subexpression E, the expression views::common(E) is expression-equivalent to:
- views::all(E), if decltype((E)) models common_range and views::all(E) is a well-formed expression.
- Otherwise, common_view{E}.
[Example 1: template<class ForwardIterator>size_t count(ForwardIterator first, ForwardIterator last);template<forward_range R> void my_algo(R&& r) { auto&& common = views::common(r);auto cnt = count(common.begin(), common.end());} — _end example_]