std::ranges::zip_view<Views...>::end

From cppreference.com
< cpp‎ | ranges‎ | zip view
 
 
Ranges library
Range adaptors
 
 
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*/ =
    (sizeof...(Rs) == 1 && (ranges::common_range<Rs> && ...))
    ||
    (!(ranges::bidirectional_range<Rs> && ...) && (ranges::common_range<Rs> && ...))
    ||

    ((ranges::random_access_range<Rs> && ...) && (ranges::sized_range<Rs> && ...));
(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,
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,
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

See also

returns an iterator to the beginning
(public member function)
returns a sentinel indicating the end of a range
(customization point object)