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-qualified,`V` 是 const-unqualified `T` 的关联值类型。
- 否则,如果 `T` 是数组类型,`V` 是 cv-unqualified 数组元素类型。
- 否则,首先确定条件值类型 `C`:
- 如果 `T` 是指针类型,`C` 是所指向的类型。
- 否则,如果 `T` 具有嵌套类型 `value_type` 和 `element_type`:
- 如果这些类型相同(不考虑 cv-qualification),`C` 是 `typename T::value_type`。
- 否则,`C` 未定义。
- 否则,如果 `T` 具有嵌套类型 `value_type` 但没有 `element_type`,`C` 是 `typename T::value_type`。
- 否则,如果 `T` 具有嵌套类型 `element_type` 但没有 `value_type`,`C` 是 `typename T::element_type`。
- 否则,`C` 未定义。
- 然后 `V` 根据 `C` 确定如下:
- 如果 `C` 未定义,或者 `C` 不是对象类型,则 `V` 未定义。
- 否则,`V` 是 cv-unqualified `C`。
[编辑] 注意
`value_type` 旨在与 `indirectly_readable` 类型(如迭代器)一起使用。它不打算与范围一起使用。
[编辑] 示例
本节不完整 原因:无示例 |
[编辑] 缺陷报告
下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。
缺陷报告 | 应用于 | 发布时的行为 | 正确的行为 |
---|---|---|---|
LWG 3446 | C++20 | 特化 (5,6) 对于同时具有 `value_type` 和 `element_type` 嵌套类型的类型是模糊的 |
添加了特化 (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) |
计算迭代器的关联类型 (别名模板) |
提供迭代器属性的统一接口 (类模板) |