[range.split.sentinel]

# 25 Ranges library [[ranges]](./#ranges)

## 25.7 Range adaptors [[range.adaptors]](range.adaptors#range.split.sentinel)

### 25.7.17 Split view [[range.split]](range.split#sentinel)

#### 25.7.17.4 Class split_view​::​*sentinel* [range.split.sentinel]

[ð](#lib:split_view::sentinel)

namespace std::ranges {template<[forward_range](range.refinements#concept:forward_range "25.4.6 Other range refinements [range.refinements]") V, [forward_range](range.refinements#concept:forward_range "25.4.6 Other range refinements [range.refinements]") Pattern>requires [view](range.view#concept:view "25.4.5 Views [range.view]")<V> && [view](range.view#concept:view "25.4.5 Views [range.view]")<Pattern> &&[indirectly_comparable](alg.req.ind.cmp#concept:indirectly_comparable "24.3.7.5 Concept indirectly_­comparable [alg.req.ind.cmp]")<iterator_t<V>, iterator_t<Pattern>, ranges::equal_to>struct split_view<V, Pattern>::*sentinel* {private: sentinel_t<V> *end_* = sentinel_t<V>(); // *exposition only*public:*sentinel*() = default; constexpr explicit *sentinel*(split_view& parent); friend constexpr bool operator==(const *iterator*& x, const *sentinel*& y); };}

[ð](#lib:split_view::sentinel,constructor)

`constexpr explicit sentinel(split_view& parent);
`

[1](#1)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/ranges.tex#L8677)

*Effects*: Initializes *end_* with ranges​::​end(parent.*base_*)[.](#1.sentence-1)

[ð](#lib:operator==,split_view::sentinel)

`friend constexpr bool operator==(const iterator& x, const sentinel& y);
`

[2](#2)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/ranges.tex#L8688)

*Effects*: Equivalent to: return x.*cur_* == y.*end_* && !x.*trailing_empty_*;
