首页 > 解决方案 > 什么类型的 __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

标签: c++variadic-templatesc++20c++-concepts

解决方案


它是怎么__iter_concept<_Iter>产生的random_access_iterator_tag

因为它被写成。__iter_concept不是一个概念;它是一种类型(或类型别名)。conceptC++20 指定了一组规则,用于从实现 C++20化迭代器类别的有效迭代器中确定迭代器类别(前向、随机访问、输入等) 。这些规则的名称容易混淆地命名为“ ITER_CONCEPT ”。

这里的“概念”一词表示它使用 C++20 概念规则进行此计算,而不是 C++17 预概念规则。

__detail::__iter_concept<T>是 GCC 标准库中实现 ITER_CONCEPT 的模板元编程类型。由此得名。它生成一个从 ITER_CONCEPT 定义的类型继承的类型,以便使用它的概念可以derived_from用来检测迭代器类型。


推荐阅读