std::ranges::view_interface<D>::size - cppreference.com
Namespaces
Variants

std::ranges::view_interface<D>::size

From cppreference.com
 
 
Ranges library
Range adaptors
 
 
constexpr auto size() requires ranges::forward_range<D> &&
    std::sized_sentinel_for<ranges::sentinel_t<D>,
                            ranges::iterator_t<D>>;
(1) (since C++20)
constexpr auto size() const requires ranges::forward_range<const D> &&
    std::sized_sentinel_for<ranges::sentinel_t<const D>,
                            ranges::iterator_t<const D>>;
(2) (since C++20)

The default implementation of size() member function obtains the size of the range by calculating the difference between the sentinel and the beginning iterator.

Return value

1) to-unsigned-like (ranges::end(static_cast<D&>(this)) -
                     ranges::begin(static_cast<D&>(this)))
.
2) to-unsigned-like (ranges::end(static_cast<const D&>(this)) -
                     ranges::begin(static_cast<const D&>(this)))
.

Notes

Following derived types may use the default implementation of size():

  • std::ranges::drop_while_view

Following types are derived from ranges::view_interface and do not declare their own size() member function, but they cannot use the default implementation, because their iterator and sentinel types never satisfy sized_sentinel_for:

  • ranges::basic_istream_view
  • std::ranges::filter_view
  • ranges::join_view
  • ranges::lazy_split_view
  • ranges::split_view
  • std::ranges::take_while_view

Defect reports

The following behavior-changing defect reports were applied retroactively to previously published C++ standards.

DR Applied to Behavior as published Correct behavior
LWG 3646 C++20 the default implementations of size functions returned a signed type they return unsigned type

See also