关于std::iter_value_t的C++标准与cppreference定义差异的疑问
关于std::iter_value_t定义的澄清疑问
C++草案标准中的描述及我的理解
template
using iter_value_t = see below ;
令RI为remove_cvref_t。类型iter_value_t表示:
(2.1) 若iterator_traits是由主模板生成的特化,则为indirectly_readable_traits ::value_type;
(2.2) 否则为iterator_traits::value_type。
我对此的理解用伪代码表示:
type iter_value<T>: // 注:非C++代码,仅用于澄清问题 type R = remove_cvref_t<T>; if (iterator_traits<R>是iterator_traits的主模板特化) return indirectly_readable_traits<R>::value_type; else return iterator_traits<R>::value_type;
cppreference中的描述及对应伪代码
计算T的value type。若std::iterator_traits<std::remove_cvref_t
>未被特化,则std::iter_value_t 为std::indirectly_readable_traits<std::remove_cvref_t >::value_type;否则为std::iterator_traits<std::remove_cvref_t >::value_type。
对应的伪代码为:
type iter_value<T>: type R = remove_cvref_t<T>; if (iterator_traits<R>是iterator_traits的特化) return iterator_traits<R>::value_type; else return indirectly_readable_traits<R>::value_type;
我发现上述两种关于std::iter_value_t的定义逻辑似乎存在差异,想确认哪一种是正确的(我猜测是cppreference的版本)。由于我非英语母语,可能是对C++草案的语义理解有误,恳请帮忙澄清。
内容的提问来源于stack exchange,提问作者Antonio
相关产品推荐
相关产品推荐

