| ||||||||||||||||||||||
| Range primitives | |||||||||||||||||
|
| ||||||||||||||||
| Range concepts | |||||||||||||||||||
| |||||||||||||||||||
| Range factories | |||||||||
| |||||||||
| Range adaptors | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Helper items | |||||||||||||||||
| |||||||||||||||||
Defined in header <ranges> | ||
template<ranges::range R,class Allocator=std::allocator<std::byte>> struct elements_of; | (since C++23) | |
Encapsulates arange. Specializations ofelements_of act as a tag in overload sets to disambiguate when a range should be treated as a sequence rather than a single value.
Contents |
| R | - | a type that satisfiesrange |
| Allocator | - | an allocator type that meets the requirements ofAllocator |
| Member name | Definition |
range | a range of typeR(public member object) |
allocator | an allocator of typeAllocator. It has default member initializer that value initializes itself(public member object) |
All these members are declared with[[no_unique_address]] attribute.
template<class R,class Allocator=std::allocator<std::byte>> elements_of( R&&, Allocator= Allocator())-> elements_of<R&&, Allocator>; | (since C++23) | |
#include <any>#include <generator>#include <iostream>#include <ranges>#include <string_view> template<bool Elementwise>std::generator<std::any> gen(std::ranges::input_rangeauto&& r){ifconstexpr(Elementwise) co_yield std::ranges::elements_of(r);// yield each element of relse co_yield r;// yield r as a single value} int main(){auto test=std::string_view{"test"}; for(std::any a: gen<true>(test))std::cout<<'['<<std::any_cast<char>(a)<<"] ";std::cout<<'\n'; for(std::any a: gen<false>(test))std::cout<<'['<<std::any_cast<std::string_view>(a)<<"] ";std::cout<<'\n';}
Output:
[t] [e] [s] [t] [test]