[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:

[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_]