iterator_const_reference_t 实现如下:
template<std::indirectly_readable T>
using iter_const_reference_t = std::common_reference_t<const std::iter_value_t<T> &&,
std::iter_reference_t<T>>;
但是为什么呢?为什么不简单地说:
std::add_const_t<std::iter_reference_t<T>>
?
zip_view
的迭代器的引用类型,即tuple<int&, int&>
,仅通过添加顶级const
限定无法获得常量引用。
在这种情况下,我们需要使用
common_reference
对tuple
的特化来生成tuple<const int&, const int&>
,这就是iter_const_reference_t
的公式。