推定ガイド(deduction guides)std::ranges::subrange
ja.cppreference.net より
| ヘッダ <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) イテレータと番兵(sentinel)の型からテンプレート引数を推定します。
subrange は、デフォルトのテンプレート引数によって決定される通り、std::sized_sentinel_for<S, I> が満たされる場合にサイズ付き(sized)となります。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ライクな型からの無意味なデダクションガイドが提供されていた | 削除 |