My own reasoning for it is that there is no random access and there is no way to know the bounds. But then why do we have std::advance? [EDIT] And come to think of
std::advance
The rational for std::advance is that it should be obvious that you really intended to use it, even if it is not O(1).
You don't need a std::deadvance as you can use std::advance with a negative distance (for bidirectional iterators).
std::deadvance