【发布时间】:2014-06-27 08:22:32
【问题描述】:
我正在实现一些类型特征/概念类,以检查传递给泛型函数的类型是否满足迭代器类型的编译时要求(如标准中所定义,从 24.2.2 开始)。
问题在于基本迭代器要求(表 106)是 *r 的类型(其中 r 是对 T 类型的迭代器的引用)是 std::iterator_traits<T>::reference。但是,如果我们考虑一个输出迭代器,例如std::ostream_iterator,
http://en.cppreference.com/w/cpp/iterator/ostream_iterator
我们可以看到在这种情况下reference 类型是void,而迭代器类型的operator*() 返回std::ostream_iterator &。
很明显,我在这里误解了一些东西,但我看不到什么?这与输出迭代器只能在赋值的左侧取消引用这一事实有关吗?
编辑:我想澄清一下,我的问题是关于引用类型与在 std::ostream_iterator 上调用 operator*()(以及标准库中的一堆其他输出迭代器)产生的类型之间的不一致。
【问题讨论】: