Namespaces
Variants

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

From cppreference.net
Ranges library
Range adaptors
(注:このHTML要素には翻訳対象のテキストコンテンツが含まれていないため、元の構造を保持したまま出力します)
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 /*convertible-to-non-slicing*/ < ranges:: iterator_t < R > , I > &&
std:: convertible_to < ranges:: sentinel_t < R > , S >
constexpr subrange ( R && r,
/*make-unsigned-like-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 Applied to Behavior as published Correct behavior
P2393R1 C++20 オーバーロード ( 4 ) について、 size_ ranges:: size ( r ) で初期化される可能性があるが、
対応する unsigned-integer-like 型に常に暗黙的に変換可能ではない
変換を明示的に
行うように変更