std::ranges::subrange<I,S,K>::subrange
ja.cppreference.net より
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
| ||
で初期化std::move(ranges::begin(r))
|
(4)ranges::end(r)
|
static_cast<decltype(size_ )> (ranges::size(r))
| |
| で初期化 | (5)n
| ||
3) 以下の条件のいずれかが満たされる場合、動作は未定義です:
[i,s)は有効な範囲ではありません。n ==to-unsigned-like(ranges::distance(i, s))falseです。
パラメータ
| i | - | 範囲の先頭を示すイテレータ |
| s | - | 範囲の終端を示すセンチネル |
| r | - | 範囲 |
| n | - | サイズヒント(範囲のサイズと等しくなければならない) |
例
|
このセクションは不完全です
理由:例がありません |
不具合報告
以下の動作変更欠陥報告書は、以前に公開されたC++標準に対して遡及的に適用されました。
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| P2393R1 | C++20 |
オーバーロード
(
4
)
について、
size_
は
ranges::
size
(
r
)
で初期化される可能性があるが、
対応する unsigned-integer-like 型に常に暗黙的に変換可能ではない |
変換を明示的に
行うように変更 |