std::ranges::iota_view<W, Bound>:: size
|
Range primitives | |||||||
|
Range concepts | |||||||||||||||||||
|
Range factories | |||||||||
|
Range adaptors | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
Helper items | |||||||||||||||||
|
|
constexpr
auto
size
(
)
const
requires
(
std::
same_as
<
W, Bound
>
&&
/*advanceable*/
<
W
>
)
||
|
(since C++20) | |
Returns the size of the view if the view is bounded.
For the definitions of
/*advanceable*/
and
/*is-integer-like*/
, see
advanceable
and
is-integer-like
respectively.
Return value
If any of
W
and
Bound
is not a
integer-like type
, returns
to-unsigned-like
(
bound_
-
value_
)
.
Otherwise, returns
(
value_
<
0
)
?
(
(
bound_
<
0
)
?
to-unsigned-like
(
-
value_
)
-
to-unsigned-like
(
-
bound_
)
:
to-unsigned-like
(
bound_
)
+
to-unsigned-like
(
-
value_
)
)
:
to-unsigned-like
(
bound_
)
-
to-unsigned-like
(
value_
)
.
Example
#include <cassert> #include <ranges> int main() { unsigned initial_value{1}, bound{5}; auto i{std::views::iota(initial_value, bound)}; assert(i.size() == bound - initial_value and i.size() == 4); auto u{std::views::iota(8)}; // assert(u.size()); // Error: size() is not present since “u” is unbounded }
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 3610 | C++20 |
size
might reject integer-class types
|
accept if possible |
See also
(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) |