Namespaces
Variants

std::ranges::subrange<I,S,K>:: subrange

From cppreference.net
Ranges library
Range adaptors
subrange ( ) requires std:: default_initializable < I > = default ;
(1) (начиная с C++20)
constexpr subrange ( /*convertible-to-non-slicing*/ < I > auto i, S s )
requires ( ! /*StoreSize*/ ) ;
(2) (начиная с C++20)
constexpr subrange ( /*convertible-to-non-slicing*/ < I > auto i, S s,

/*make-unsigned-like-t*/ < std:: iter_difference_t < I >> n )

requires ( K == ranges :: subrange_kind :: sized ) ;
(3) (начиная с C++20)
template < /*different-from*/ < subrange > R >

requires ranges:: borrowed_range < R > &&
/*convertible-to-non-slicing*/ < ranges:: iterator_t < R > , I > &&
std:: convertible_to < ranges:: sentinel_t < R > , S >
constexpr subrange ( R && r )

requires ( ! /*StoreSize*/ || ranges:: sized_range < R > ) ;
(4) (начиная с C++20)
template < ranges:: borrowed_range R >

requires /*конвертируемый-без-срезов*/ < ranges:: iterator_t < R > , I > &&
std:: convertible_to < ranges:: sentinel_t < R > , S >
constexpr subrange ( R && r,
/*создать-беззнаковый-подобный-t*/ < std:: iter_difference_t < I >> n )
requires ( K == ranges :: subrange_kind :: sized )

: subrange { ranges:: begin ( r ) , ranges:: end ( r ) , n } { }
(5) (начиная с C++20)

Создает subrange .

Для определений /*make-unsigned-like-t*/ и /*different-from*/ см. make-unsigned-like-t и different-from соответственно.

Перегрузка Члены данных
begin_ end_ size_
(только если StoreSize равно true )
(1) инициализировано значением инициализировано значением инициализировано значением 0
(2) инициализировано значением std :: move ( i ) инициализировано значением s Н/Д
(3) инициализировано значением n
(4) инициализировано значением std :: move ( ranges:: begin ( r ) ) инициализировано значением ranges:: end ( r ) инициализировано значением static_cast < decltype ( size_  ) >
( ranges:: size ( r ) )
(5) инициализировано значением n
2) Если [ i , s ) не является допустимым диапазоном , поведение не определено.
3) Если выполняется любое из следующих условий, поведение не определено:

Параметры

i - итератор, обозначающий начало диапазона
s - страж, обозначающий конец диапазона
r - диапазон
n - подсказка размера, должна быть равна размеру диапазона

Пример

Отчёты о дефектах

Следующие отчеты об изменениях в поведении, содержащие описания дефектов, были применены ретроактивно к ранее опубликованным стандартам C++.

DR Применяется к Поведение в опубликованной версии Корректное поведение
P2393R1 C++20 для перегрузки ( 4 ) , size_ может инициализироваться с помощью ranges:: size ( r ) , но оно
не всегда неявно преобразуется в соответствующий unsigned-integer-like тип
преобразование сделано
явным