std::ranges::iota_view<W, Bound>::size
              requires (std::same_as <W, Bound> && /*advanceable*/<W>) ||
             (/*is-integer-like*/<W> && /*is-integer-like*/<Bound>) ||
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.
[edit] 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_  )
.
[edit] 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 }
[edit] 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 | sizemight reject integer-class types | accept if possible |