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).