GSP
Quick Navigator

Search Site

Unix VPS
A - Starter
B - Basic
C - Preferred
D - Commercial
MPS - Dedicated
Previous VPSs
* Sign Up! *

Support
Contact Us
Online Help
Handbooks
Domain Status
Man Pages

FAQ
Virtual Servers
Pricing
Billing
Technical

Network
Facilities
Connectivity
Topology Map

Miscellaneous
Server Agreement
Year 2038
Credits
 

USA Flag

 

 

Man Pages
std::ranges::range(3) C++ Standard Libary std::ranges::range(3)

std::ranges::range - std::ranges::range


Defined in header <ranges>
template< class T >


concept range = requires( T& t ) {
ranges::begin(t); // equality-preserving for forward iterators (since C++20)
ranges::end (t);


};


The range concept defines the requirements of a type that allows iteration over its
elements by providing an iterator and sentinel that denote the elements of the
range.


Semantic requirements


Given an expression E such that decltype((E)) is T, T models range only if


* [ranges::begin(E), ranges::end(E)) denotes a range, and
* both ranges::begin(E) and ranges::end(E) are amortized constant time and do not
alter the value of E in a manner observable to equality-preserving expressions,
and
* if the type of ranges::begin(E) models forward_iterator, ranges::begin(E) is
equality-preserving (in other words, forward iterators support multi-pass
algorithms)


Note: In the definition above, the required expressions ranges::begin(t) and
ranges::end(t) do not require implicit expression variations.

// Run this code


#include <ranges>
#include <vector>
#include <iostream>


template <typename T>
struct range_t : private T {
using T::begin, T::end; /*...*/
};
static_assert(std::ranges::range< range_t<std::vector<int>> >);


template <typename T> struct scalar_t { T t{}; /* no begin/end */ };
static_assert(not std::ranges::range< scalar_t<int> >);


int main() {
if constexpr (range_t<std::vector<int>> r; std::ranges::range<decltype(r)>) {
std::cout << "r is a range\n";
}


if constexpr (scalar_t<int> s; not std::ranges::range<decltype(s)>) {
std::cout << "s is not a range\n";
}
}


r is a range
s is not a range

2022.07.31 http://cppreference.com

Search for    or go to Top of page |  Section 3 |  Main Index

Powered by GSP Visit the GSP FreeBSD Man Page Interface.
Output converted with ManDoc.