[range.filter.sentinel]

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

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

### 25.7.8 Filter view [[range.filter]](range.filter#sentinel)

#### 25.7.8.4 Class filter_view​::​*sentinel* [range.filter.sentinel]

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

namespace std::ranges {template<[input_range](range.refinements#concept:input_range "25.4.6 Other range refinements [range.refinements]") V, [indirect_unary_predicate](indirectcallable.indirectinvocable#concept:indirect_unary_predicate "24.3.6.3 Indirect callables [indirectcallable.indirectinvocable]")<iterator_t<V>> Pred>requires [view](range.view#concept:view "25.4.5 Views [range.view]")<V> && is_object_v<Pred>class filter_view<V, Pred>::*sentinel* {private: sentinel_t<V> *end_* = sentinel_t<V>(); // *exposition only*public:*sentinel*() = default; constexpr explicit *sentinel*(filter_view& parent); constexpr sentinel_t<V> base() const; friend constexpr bool operator==(const *iterator*& x, const *sentinel*& y); };}

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

`constexpr explicit sentinel(filter_view& parent);
`

[1](#1)

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

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

[ð](#lib:base,filter_view::sentinel)

`constexpr sentinel_t<V> base() const;
`

[2](#2)

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

*Effects*: Equivalent to: return *end_*;

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

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

[3](#3)

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

*Effects*: Equivalent to: return x.*current_* == y.*end_*;
