I am unsure why there is both std::distance(iterator const&, iterator const&) and a iterator::operator-(iterator const&) (as well as adaptors operator-(iterator const&, iterator const&)), where iterator is a placeholder for any iterator. Should one be used over the other, and if so, what circumstances?