Форма с тремя аргументами list::splice()
перемещает один элемент из одного списка в другой. Документация SGI явно заявляет, что все итераторы, в том числе те, которые указывают на перемещаемый элемент, остаются в силе. Документация Roguewave не говорит ничего о свойствах аннулирования итератора методов splice()
, тогда как в стандарте С++ явно указано, что он аннулирует все итераторы и ссылки на элемент сплайсируется.
splicing() на практике работает как определено SGI, но я получаю отказ от утверждения (разыменование недействительного итератора) в debug/secure SCL версиях реализации Microsoft STL (что строго следует букве стандарта).
Теперь я использую список именно потому, что хочу переместить элемент между списками, сохраняя при этом правильность итератора, указывающего на него. Стандарт внес чрезвычайно бесполезное изменение в оригинальную спецификацию SGI.
Как я могу обойти эту проблему? Или я просто должен быть прагматичным и придерживаться головы в песке (потому что сращивание делает не недействительными итераторы на практике - даже в реализации MS, после отладки итератора отключается).