【发布时间】:2009-02-11 20:28:38
【问题描述】:
以下代码是否可移植?
template<typename In>
struct input_sequence_range : public pair<In,In> {
input_sequence_range(In first, In last) : pair<In,In>(first, last) { }
};
template<typename Arr>
input_sequence_range<Arr*> iseq(Arr* a,
typename iterator_traits<Arr*>::difference_type n)
{
return input_sequence_range<Arr*>(a, a + n);
}
template<typename Iter>
input_sequence_range<Iter> iseq(Iter first, Iter last)
{
return input_sequence_range<Iter>(first, last);
}
我特别质疑在 std::iterator_traits::difference_type 上重载的可移植性。如果将其类型化为 int* (尽管这可能很奇怪;我认为标准并未禁止这样做),那么为 int 数组调用 iseq() 将是模棱两可的。
关于 iterator_traits typedefs 的标准保证是什么?
【问题讨论】: