V>Сравнение валидных итераторов на разные контейнеры одного типа как минимум в MSVC 2005 приводит к закрытию программы.
V>V>void main()
V>{
V> std::list<int> a,b;
V> std::list<int>::iterator i1 = a.end();
V> std::list<int>::iterator i2 = b.end();
V> if(i1 != i2) //Boom
V> {
V> printf("Just not equal\n");
V> }
V>}
V>
V>В моём случае это не критично и хотелось бы этого избежать. Как переносимо это отключить? Ну или хотябы для конкретных рантаймов?
Можно унаследовать от std::list<T>::iterator собственный класс итераторов и работать с ними. Останется переопределить операторы сравнения, добавив проверку на несовпадение контейнеров итераторов. Хотя, конечно, реализация в таком случае будет зависеть от реализации STL (имени поля контейнера в protected секции итераторов), что не есть хорошо.