operator==

template<class BidIt, class T, class Ref, class Ptr, class Dist>
    bool operator==(
        const reverse_bidirectional_iterator<BidIt, T, Ref,
            Ptr, Dist>& lhs,
        const reverse_bidirectional_iterator<BidIt, T, Ref,
            Ptr, Dist>& rhs);
template<class RanIt, class T, class Ref, class Ptr, class Dist>
    bool operator==(
        const reverse_iterator<BidIt, T, Ref, Ptr, Dist>& lhs,
        const reverse_iterator<BidIt, T, Ref, Ptr, Dist>& rhs);
template<class T, class Dist>
    bool operator==(
        const istream_iterator<T, Dist>& lhs,
        const istream_iterator<T, Dist>& rhs);
template<class E, class T>
    bool operator==(
        const istreambuf_iterator<E, T>& lhs,
        const istreambuf_iterator<E, T>& rhs);

The first two template operators each return true only if lhs.current == rhs.current. The third template operator returns true only if both lhs and rhs store the same stream pointer. The fourth template operator returns lhs.equal(rhs).