Здравствуйте, derProgrammer, Вы писали:
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>>В моём случае это не критично и хотелось бы этого избежать. Как переносимо это отключить? Ну или хотябы для конкретных рантаймов?
P>Можно унаследовать от std::list<T>::iterator собственный класс итераторов и работать с ними. Останется переопределить операторы сравнения, добавив проверку на несовпадение контейнеров итераторов. Хотя, конечно, реализация в таком случае будет зависеть от реализации STL (имени поля контейнера в protected секции итераторов), что не есть хорошо.
Это никуда не годится.
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]