名前空間
変種
操作

std::ranges::sized_range, std::ranges::disable_sized_range

From cppreference.com
< cpp‎ | ranges
 
 
Rangesライブラリ
Rangeアダプタ
 
ヘッダ <ranges> で定義
template< class T >

concept sized_range = ranges::range<T> &&
    requires(T& t) {
        ranges::size(t);

    };
(1) (C++20以降)
template< class >
constexpr bool disable_sized_range = false;
(2) (C++20以降)
1) sized_range コンセプトは、size 関数で定数時間でサイズを知ることができる range 型の要件を指定します。
2) disable_sized_range は、size 関数(メンバまたは非メンバ)を提供するが、実際には sized_range をモデル化しないレンジ型を使用できるようにするために存在します。ユーザーは、cv-unqualified なプログラム定義型に対して disable_sized_range を特殊化できます。このような特殊化は、定数式で使用可能で、型は const bool である必要があります。

目次

[編集] 意味論的要件

1) std::remove_reference_t<T> 型の左辺値 t が与えられた場合、Tsized_range をモデル化するのは、以下の場合のみです。
  • かつ、ranges::iterator_t<T>forward_iterator をモデル化する場合、ranges::size(t)ranges::begin(t) の評価に関係なく well-defined です。(つまり、単一パスの sized range は、begin の最初の呼び出し前のみ size の呼び出しをサポートする可能性がありますが、forward range は常に size をサポートする必要があります)。

[編集] 注釈

disable_sized_range は、イテレータとセンチネルが sized_sentinel_for を満たすレンジをオプトアウトするために使用することはできません。代わりに std::disable_sized_sentinel_for を使用する必要があります。

disable_sized_range は、配列型または参照型に対して特殊化することはできません。

[編集]

#include <forward_list>
#include <list>
#include <ranges>
 
static_assert
(
    std::ranges::sized_range<std::list<int>> and
    not std::ranges::sized_range<std::forward_list<int>>
);
 
int main() {}

[編集] 関連項目

イテレータ型が random_access_iterator を満たすrangeを規定する
(コンセプト) [編集]
イテレータ型が contiguous_iterator を満たすrangeを規定する
(コンセプト) [編集]
English 日本語 中文(简体) 中文(繁體)