Namespaces
Variants

std::experimental::ranges:: iterator_category

From cppreference.net
ヘッダーで定義 <experimental/ranges/iterator>
template < class I >
struct iterator_category { } ;
(1)
template < class T >
struct iterator_category < T * > ;
(2)
template < class T >
struct iterator_category < const T > : iterator_category < T > { } ;
(3)
template < class T >

requires requires { typename T :: iterator_category ; }

struct iterator_category < T > ;
(4)

クラス I のイテレータカテゴリを計算します(存在する場合)。ユーザーはプログラム定義型に対して iterator_category を特殊化できます。

1) プライマリテンプレートは空の構造体です。
2) ポインタに対する特殊化。 T がオブジェクト型の場合、メンバ型 type ranges::random_access_iterator_tag と等しいものとして提供する。それ以外の場合、メンバ type は存在しない。
3) const修飾型に対する特殊化。
4) 公開かつアクセス可能なメンバ型 iterator_category を定義する型に対する特殊化。 T::iterator_category std 名前空間内のイテレータカテゴリタグのいずれかと同じか、それから派生している場合、以下に記述されるように ranges 名前空間内の対応するタグにマッピングされる。それ以外の場合、 type メンバ型を T::iterator_category と等しく定義する。
  • T::iterator_category std::random_access_iterator_tag と同じか、それから派生している場合、 type メンバ型を ranges::random_access_iterator_tag と等しく定義する。
  • それ以外で、 T::iterator_category std::bidirectional_iterator_tag と同じか、それから派生している場合、 type メンバ型を ranges::bidirectional_iterator_tag と等しく定義する。
  • それ以外で、 T::iterator_category std::forward_iterator_tag と同じか、それから派生している場合、 type メンバ型を ranges::forward_iterator_tag と等しく定義する。
  • それ以外で、 T::iterator_category std::input_iterator_tag と同じか、それから派生している場合、 type メンバ型を ranges::input_iterator_tag と等しく定義する。
  • それ以外で、 T::iterator_category std::output_iterator_tag と同じか、それから派生している場合、 type メンバ型は定義されない。

ヘルパーエイリアステンプレート

template < class T >
using iterator_category_t = typename ranges :: iterator_category < T > :: type ;
(ranges TS)

関連項目

イテレータカテゴリを示すために使用される空のクラス型
(クラス)
イテレータカテゴリを示すために使用される空のクラス型
(クラス)
イテレータの関連型を収集する互換性特性クラス
(エイリアステンプレート)