Namespaces
Variants

deduction guides for std::ranges::subrange

From cppreference.net
Ranges library
Range adaptors
(注:このHTML要素には翻訳対象のテキストコンテンツが含まれていないため、元の構造をそのまま保持しています)
定義ヘッダー <ranges>
template < std:: input_or_output_iterator I, std:: sentinel_for < I > S >
subrange ( I, S ) - > subrange < I, S > ;
(1) (C++20以降)
template < std:: input_or_output_iterator I, std:: sentinel_for < I > S >

subrange ( I, S, /*make-unsigned-like-t*/ < std:: iter_difference_t < I >> ) - >

subrange < I, S, ranges :: subrange_kind :: sized > ;
(2) (C++20以降)
template < ranges:: borrowed_range < R > >

subrange ( R && ) - >
subrange < ranges:: iterator_t < R > , ranges:: sentinel_t < R > ,
( ranges:: sized_range < R > ||
std:: sized_sentinel_for < ranges:: sentinel_t < R > ,
ranges:: iterator_t < R >> ) ?

ranges :: subrange_kind :: sized : ranges :: subrange_kind :: unsized > ;
(3) (C++20以降)
template < ranges:: borrowed_range < R > >

subrange ( R && , /*make-unsigned-like-t*/ < ranges:: range_difference_t < R >> ) - >
subrange < ranges:: iterator_t < R > , ranges:: sentinel_t < R > ,

ranges :: subrange_kind :: sized > ;
(4) (C++20以降)

これらの デダクションガイド std::ranges::subrange に対して提供されます。

1) イテレータとセンチネルの型からテンプレート引数を推論します。 subrange std:: sized_sentinel_for < S, I > が満たされる場合、デフォルトテンプレート引数によって決定されるように、サイズ指定可能となります。
2) イテレータとセンチネルの型からテンプレート引数を推論し、範囲のサイズが指定されます。 subrange は常にサイズ指定されます。
3) 範囲の型からテンプレート引数を推論します。 subrange は、範囲またはそのイテレータと番兵からサイズを取得できる場合、サイズ指定されます。
4) 範囲の型からテンプレート引数を推論し、範囲のサイズは指定されます。 subrange は常にサイズ指定されています。

/* make-unsigned-like-t */ の定義については、 make-unsigned-like-t を参照してください。

注記

subrange オブジェクトの構築中、

  • for (1,2) 、イテレータ-番兵のペアが有効な範囲を示さない場合、動作は未定義です。
  • for (2,4) 、指定されたサイズが範囲のサイズと等しくない場合、動作は未定義です。

不具合報告

以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。

DR 適用対象 公開時の動作 正しい動作
LWG 3404 C++20 pairライクな型からの無意味なデダクションガイドが提供されていた 削除