std::ranges::zip_view<Views...>::end
From cppreference.com
                    
                                        
                    
                    
                                                            
                    |   constexpr auto end() requires (!(/*simple-view*/<Views> && ...);  | 
(1) | (since C++23) | 
|   constexpr auto end() const requires (ranges::range<const Views> && ...);  | 
(2) | (since C++23) | 
|   template< class... Rs > concept /*zip-is-common*/ =  | 
(3) | (exposition only*) | 
Returns an iterator or a sentinel that compares equal to the end iterator of the zip_view.
Let views_ denote the underlying tuple of views.
1) Equivalent to:
- return /*sentinel*/<false>(/*tuple-transform*/(ranges::end, views_));,
 
- if /*zip-is-common*/<Views...> evaluates to false. Otherwise,
 
- return begin() + std::iter_difference_t</*iterator*/<false>>(size());,
 
- if (ranges::random_access_range<Views> && ...) evaluates to true. Otherwise,
 
- return /*iterator*/<false>(/*tuple-transform*/(ranges::end, views_));.
 
2) Equivalent to:
- return /*sentinel*/<true>(/*tuple-transform*/(ranges::end, views_));,
 
- if /*zip-is-common*/<const Views...> evaluates to false. Otherwise,
 
- return begin() + std::iter_difference_t</*iterator*/<true>>(size());,
 
- if ranges::random_access_range<const Views> && ... evaluates to true. Otherwise,
 
- return /*iterator*/<true>(/*tuple-transform*/(ranges::end, views_));.
 
Parameters
(none)
Return value
An iterator or sentinel representing the end of the zip_view, as described above.
Notes
ranges::range<const ranges::zip_view<Views...>> is modeled if and only if for every type Vi in Views..., const Vi models range.
Example
| This section is incomplete Reason: no example  | 
See also
|   returns an iterator to the beginning  (public member function)  | |
|   (C++20)  | 
 returns a sentinel indicating the end of a range (customization point object)  |