I see that iterator_traits always defines a difference_type: https://en.cppreference.com/w/cpp/iterator/iterator_traits#Member_types
I'm just wondering why, wouldn't that be ptrdiff_t for every type? Is there an example of an iterator which doesn't use ptrdiff_t? And if not why isn't difference_type eliminated from iterator_traits and ptrdiff_t used everywhere?
A basic output iterator, with
std::ostream_iteratorbeing one example, may not need a difference type at all.Since it's meant to be a "fire and forget" sort of iterator, it usually doesn't make much sense to obtain a difference between two such iterators. The mere act of writing to one copy may invalidate all other copies. So it will not need to define a difference type, and should not be forced to do so artificially (or have the type forced on it).