Сравнение итератора с NULL никогда не было законным. VC6 позволил вам сделать это, но был неправ, сделав это.
В приведенном вами примере сравнение не имеет смысла, поскольку итератор всегда будет указывать на что-то. Проверка (* IT)! = NULL является разумной и все еще работает.
Если существует реальная перспектива того, что итератор не указывает на действительный объект, VC9 имеет недокументированную функцию
IT._Has_container()
это будет истина, если итератор указывает на контейнер, и ложь, если итератор не делает. Чтобы установить итератор в ноль, вы назначаете пустой итератор:
IT = std::vector<aCattrBase*>::iterator();
Выше представлен непереносимый код и довольно плохой стиль, и я не рекомендую разрабатывать что-либо для его использования. Однако, если вам нужно быстро получить код VC6 для компиляции на VC9, это может избавить вас от проблем.