Namespaces
Variants

std::experimental::ranges:: value_type

From cppreference.net
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 是对象类型,则提供与 T::value_type 相等的成员类型 type 。否则不存在成员 type
6) 针对定义了公开可访问成员类型 element_type 的类型特化(例如 std::shared_ptr )。若 T::element_type 为对象类型,则提供等于 std:: remove_cv_t < typename T :: element_type > 的成员类型 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 类型(例如迭代器)一起使用,不适用于范围。

示例

另请参阅

规定通过应用 * 运算符可读取类型的值
(概念)
收集迭代器关联类型的兼容性特征类
(别名模板)