Интересно, что является основанием для создания std::list<>::splice
чтобы аннулировать итераторы, которые ссылаются на подпоследовательность, сращиваемую в новый контейнер. Это выглядит нелогично для меня, особенно в свете стандартной спецификации std::container::swap
. Согласно стандарту языка std::container::swap
не отменяет никаких итераторов. Это совершенно разумная практическая спецификация. Однако я бы сказал, что std::list<>::splice
также сильно выиграет от поведения, сохраняющего итератор.
Я понимаю, что могут быть некоторые чисто академические соображения, основанные на концепциях достижимости итератора и т.д. Но в то же время splice
является операцией std::list
-specific, а это означает, что предоставление специальной спецификации для нее, вероятно, не будет сделать серьезный концептуальный ущерб конструкции STL в целом.
Так что это было? Будет ли он объявлять вне закона или превышать некоторые практические реализации std::list
, которые я не могу распознать?