std:: indirectly_readable_traits
|
定义于头文件
<iterator>
|
||
|
template
<
class
I
>
struct indirectly_readable_traits { } ; |
(1) | (C++20 起) |
|
template
<
class
T
>
struct
indirectly_readable_traits
<
T
*
>
:
|
(2) | (C++20 起) |
|
template
<
class
I
>
requires
std::
is_array_v
<
I
>
|
(3) | (C++20 起) |
|
template
<
class
T
>
struct
indirectly_readable_traits
<
const
T
>
:
|
(4) | (C++20 起) |
|
template
<
/* has-member-value-type */
T
>
struct
indirectly_readable_traits
<
T
>
:
|
(5) | (C++20 起) |
|
template
<
/* has-member-element-type */
T
>
struct
indirectly_readable_traits
<
T
>
:
|
(6) | (C++20 起) |
|
template
<
/* has-member-value-type */
T
>
requires
/* has-member-element-type */
<
T
>
|
(7) | (C++20 起) |
|
template
<
/* has-member-value-type */
T
>
requires
/* has-member-element-type */
<
T
>
&&
|
(8) | (C++20 起) |
|
辅助类与概念
|
||
|
template
<
class
>
struct /* cond-value-type */ { } ; |
(1) | ( 仅用于说明* ) |
|
template
<
class
T
>
requires
std::
is_object_v
<
T
>
|
(2) | ( 仅用于说明* ) |
|
template
<
class
T
>
concept
/* has-member-value-type */
=
|
(3) | ( 仅用于说明* ) |
|
template
<
class
T
>
concept
/* has-member-element-type */
=
|
(4) | ( 仅用于说明* ) |
计算模板参数的关联值类型。如果关联值类型存在,则通过嵌套类型
value_type
表示,否则
value_type
不会被定义。程序可以为
程序定义类型
特化
indirectly_readable_traits
。
目录 |
说明
上述特化可以非正式地描述如下。
给定类型
T
,其关联值类型
V
按以下方式确定:
-
若
T具有 const 限定,则V为去除 const 限定后的T关联值类型。 -
否则,若
T为数组类型,则V为去除 cv 限定的数组元素类型。 -
否则,首先确定条件值类型
C:
-
-
若
T为指针类型,则C为被指向类型。 -
否则,若
T具有嵌套类型value_type和element_type:
-
-
若这些类型相同(不考虑 cv 限定符),则
C为typename T::value_type。 -
否则,
C未定义。
-
若这些类型相同(不考虑 cv 限定符),则
-
否则,若
T具有嵌套类型value_type但不具有element_type,则C为typename T::value_type。 -
否则,若
T具有嵌套类型element_type但不具有value_type,则C为typename T::element_type。 -
否则,
C未定义。
-
若
-
随后根据
C按以下方式确定V:-
若
C未定义,或C不是 对象类型 ,则V未定义。 -
否则,
V为去除 cv 限定符的C。
-
若
注释
value_type
旨在用于
indirectly_readable
类型(例如迭代器),不适用于范围类型。
示例
|
本节内容不完整
原因:缺少示例 |
缺陷报告
以下行为变更缺陷报告被追溯应用于先前发布的C++标准。
| 缺陷报告 | 适用范围 | 发布时行为 | 修正后行为 |
|---|---|---|---|
| LWG 3446 | C++20 |
对于同时具有
value_type
和
element_type
嵌套类型的特化
(5,6)
存在歧义
|
增加特化 (8) |
| LWG 3541 | C++20 |
LWG 3446 对
value_type
和
element_type
类型不同的歧义情况引入了硬错误 |
增加特化 (7) |
参见
|
(C++20)
|
指定类型可通过应用
*
运算符间接读取
(概念) |
|
(C++20)
(C++20)
(C++23)
(C++20)
(C++20)
(C++20)
|
计算迭代器的关联类型
(别名模板) |
|
为迭代器的属性提供统一接口
(类模板) |