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
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) |