std::ranges::view_interface<D>:: size
constexpr
auto
size
(
)
requires
ranges::
forward_range
<
D
>
&&
std::
sized_sentinel_for
<
ranges::
sentinel_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
>
,
|
(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
to-unsigned-like
(
ranges::
end
(
static_cast
<
D
&
>
(
this
)
)
-
ranges::
begin
(
static_cast
<
D
&
>
(
this
)
)
)
.
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()
:
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_view
- std::ranges::filter_view
- std::ranges::join_view
- std::ranges::lazy_split_view
- std::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
(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) |