c++ - 什么类型的 __iter_concept<_Iter>
问题描述
我看了std::random_access_iterator
和其他迭代器概念
这就是GCC实现的样子
template<typename _Iter>
concept random_access_iterator = bidirectional_iterator<_Iter>
&& derived_from<__detail::__iter_concept<_Iter>,
random_access_iterator_tag>
&& totally_ordered<_Iter> && sized_sentinel_for<_Iter, _Iter>
&& requires(_Iter __i, const _Iter __j,
const iter_difference_t<_Iter> __n)
{
{ __i += __n } -> same_as<_Iter&>;
{ __j + __n } -> same_as<_Iter>;
{ __n + __j } -> same_as<_Iter>;
{ __i -= __n } -> same_as<_Iter&>;
{ __j - __n } -> same_as<_Iter>;
{ __j[__n] } -> same_as<iter_reference_t<_Iter>>;
};
那是怎么__iter_concept<_Iter>
推导出来的from random_access_iterator_tag
?
解决方案
它是怎么
__iter_concept<_Iter>
产生的random_access_iterator_tag
?
因为它被写成。__iter_concept
不是一个概念;它是一种类型(或类型别名)。concept
C++20 指定了一组规则,用于从实现 C++20化迭代器类别的有效迭代器中确定迭代器类别(前向、随机访问、输入等) 。这些规则的名称容易混淆地命名为“ ITER_CONCEPT ”。
这里的“概念”一词表示它使用 C++20 概念规则进行此计算,而不是 C++17 预概念规则。
__detail::__iter_concept<T>
是 GCC 标准库中实现 ITER_CONCEPT 的模板元编程类型。由此得名。它生成一个从 ITER_CONCEPT 定义的类型继承的类型,以便使用它的概念可以derived_from
用来检测迭代器类型。
推荐阅读
- apache-spark - spark-salesforce 连接器中的空类型架构
- html - 如果我的 HTML 中的条件不起作用,我的 jinja
- python - 如何重写 XML
- python - Python:非常慢的嵌套 for 循环
- c# - 此代码运行 INSERT 命令,但表仍然为空
- android - 如何以编程方式关闭谷歌支付对话框
- reactjs - 将从本地 restify 服务器获取的对象添加到 state 中的对象中
- android - 仅在某些特定应用程序运行时出现截图问题
- javascript - 当宽度低于最小限制时限制电子应用程序调整大小
- javascript - .JOIN 按钮单击时显示的 JQuery 错误消息