title: STL list::splice - iterator validity
body: <p>I'm reading how "<a href="http://www.cplusplus.com/reference/list/list/splice/" rel="nofollow">list::splice</a>" works and I don't understand something:</p>
  
  <pre><code>  mylist1.splice (it, mylist2); // mylist1: 1 10 20 30 2 3 4
                                  // mylist2 (empty)
                                  // "it" still points to 2 (the 5th element)
  
    mylist2.splice (mylist2.begin(),mylist1, it);
                                  // mylist1: 1 10 20 30 3 4
                                  // mylist2: 2
                                  // "it" is now invalid.
    it = mylist1.begin();
    std::advance(it,3);           // "it" points now to 30
  
    mylist1.splice ( mylist1.begin(), mylist1, it, mylist1.end());
                                  // mylist1: 30 3 4 1 10 20
  </code></pre>
  
  <p>in the first and third splice the <strong>it</strong> iterator is still valid, but why isn't it in the second splice?</p>
  
  <p>According to the documentation:</p>
  
  <blockquote>
    <p>Iterator validity </p>
    
    <p>No changes on the iterators, pointers and references
    related to the container before the call. <strong>The iterators, pointers and
    references that referred to transferred elements keep referring to
    those same elements</strong>, but iterators now iterate into the container the
    elements have been transferred to.</p>
  </blockquote>
  
  <p>thus it should still be valid</p>