std::ranges::view_interface<D>::size
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<constD&>(this))-
ranges::begin(static_cast<constD&>(this))). Notes
Following derived types may use the default implementation of size():
Following types are derived from std::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:
std::ranges::basic_istream_viewstd::ranges::filter_viewstd::ranges::join_viewstd::ranges::lazy_split_viewstd::ranges::split_viewstd::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
|
(C++17)(C++20) | returns the size of a container or array (function template) |
|
(C++20) | returns an integer equal to the size of a range (customization point object) |
|
(C++20) | returns a signed integer equal to the size of a range (customization point object) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/ranges/view_interface/size