| ||||||||||||||||||||||
| Range primitives | |||||||
| |||||||
| Range concepts | |||||||||||||||||||
| |||||||||||||||||||
| Range factories | |||||||||
| |||||||||
| Range adaptors | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Helper items | |||||||||||||||||
| |||||||||||||||||
constexprauto 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*/, seeadvanceable andis-integer-like respectively.
Contents |
If any ofW andBound is not ainteger-like type, returnsto-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_ ).
#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}
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 |
(C++20) | returns an integer equal to the size of a range (customization point object)[edit] |
(C++20) | returns a signed integer equal to the size of a range (customization point object)[edit] |