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