Коль, я ошибку я специально привел - такие вот сравнения компилятор пропускает и не ругается.
Такой компилятор ...
GCC 4.3, например, ругается.
error: no match for ‘operator!=’ in ‘ita != ita.std::_Rb_tree_iterator<_Tp>::operator-> [with _Tp = std::pair<const int, A>]()->std::pair<const int, A>::second.A::items.std::map<_Key, _Tp, _Compare, _Alloc>::end [with _Key = int, _Tp = B, _Compare = std::less<int>, _Alloc = std::allocator<std::pair<const int, B> >]()’
/usr/lib/gcc/i686-pc-cygwin/4.3.4/include/c++/bits/stl_tree.h:214: note: candidates are: bool std::_Rb_tree_iterator<_Tp>::operator!=(const std::_Rb_tree_iterator<_Tp>&) const [with _Tp = std::pair<const int, A>]