splice () en std :: list e iterator invalidation

La forma de 3 argumentos delist::splice() Mueve un solo elemento de una lista a la otra.Documentación de la SGI declara explícitamente que todos los iteradores,Incluyendo el que apunta al elemento que se está moviendo. Se mantiene valido.Documentación de Roguewave no dice nada acerca de las propiedades de invalidación iterador desplice() métodos, mientras que el estándar de C ++ indica explícitamente que invalida todos los iteradores y referencias al elemento que se está empalmando.

En la práctica, splicing () funciona como lo define SGI, pero obtengo un error de aserción (anulación de la referencia al iterador inválido) en las versiones SCL de debug / secure de la implementación STL de microsoft (que sigue estrictamente la letra del estándar).

Ahora, estoy usando la lista exactamente porque quiero mover un elemento entre listas, a la vez que conservo la validez del iterador que la apunta. El estándar ha realizado un cambio extremadamente inútil a la especificación original de SGI.

¿Cómo puedo solucionar este problema? O debería ser pragmático y meter la cabeza en la arena (porque el empalme síno invalidar los iteradores en la práctica, ni siquiera en la implementación de MS, una vez que se desactiva la depuración del iterador).

Respuestas a la pregunta(3)

Su respuesta a la pregunta