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