std::ranges::join_view<V>::sentinel
From cppreference.com
                    
                                        
                    
                    
                                                            
                    | template< bool Const > class /*sentinel*/ | (since C++20) | |
The return type of join_view::end when either of the underlying ranges (V or ranges::range_reference_t<V>) is not a common_range, or when the parent join_view is not a forward_range.
If V is not a simple view, Const is true for sentinels returned from the const overloads, and false otherwise. If V is a simple view, Const is true.
The name of this class template (shown here as /*sentinel*/) is unspecified.
Typical implementation holds only one data member: a sentinel end_ obtained from (possibly const-qualified) V.
Member types
| Member type | Definition | 
| Parent(private) | const ranges::join_view<V> if Const is true, otherwise ranges::join_view<V>. The name is for exposition only | 
| Base(private) | const V if Const is true, otherwise V. The name is for exposition only | 
Member functions
| (C++20) | constructs a sentinel (public member function) | 
Non-member functions
| (C++20) | compares a sentinel with an iterator returned from join_view::begin (function) |