Re: STL: Сравнение валидных итераторов на разные контейнеры
От: derProgrammer Россия  
Дата: 06.11.10 15:30
Оценка:
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 секции итераторов), что не есть хорошо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.