Namespaces
Variants

std::experimental::ranges:: value_type

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

requires std:: is_array < I > :: value

struct value_type < I > : value_type < std:: decay_t < I >> { } ;
(3)
template < class T >
struct value_type < const T > : value_type < std:: decay_t < T >> { } ;
(4)
template < class T >

requires requires { typename T :: value_type ; }

struct value_type < T > ;
(5)
template < class T >

requires requires { typename T :: element_type ; }

struct value_type < T > ;
(6)

I に関連付けられた値型を計算します(存在する場合)。ユーザーはプログラム定義型に対して value_type を特殊化できます。

1) プライマリテンプレートは空の構造体です。
2) ポインタに対する特殊化。 T がオブジェクト型の場合、メンバ型 type std:: remove_cv_t < T > に等しいものとして提供する。それ以外の場合、メンバ type は存在しない。
3) 配列型に対する特殊化。
4) const修飾型に対する特殊化。
5) 公開かつアクセス可能なメンバ型 value_type を定義する型に対する特殊化。 T::value_type がオブジェクト型の場合、 type メンバ型を T::value_type と等しい型として提供する。それ以外の場合、 type メンバは存在しない。
6) 公開されアクセス可能なメンバ型 element_type を定義する型に対する特殊化(例: std::shared_ptr )。 T::element_type がオブジェクト型の場合、メンバ型 type std:: remove_cv_t < typename T :: element_type > と等しいものとして提供する。それ以外の場合、メンバ type は存在しない。

目次

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

template < class T >
using value_type_t = typename ranges :: value_type < T > :: type ;
(範囲 TS)

注記

型が value_type メンバーと element_type メンバーの両方を含む場合、特殊化 (5) (6) は曖昧になります。

value_type は、 Readable 型(イテレータなど)での使用を意図しています。範囲(ranges)での使用は意図されていません。

関連項目

operator * を適用することで型が読み取り可能であることを指定する
(コンセプト)
イテレータの関連型を収集する互換性トレイトクラス
(エイリアステンプレート)