first->_mPrev = position.mCurrent->_mPrev; position.mCurrent->_mPrev->_mNext = first.get();   last->_mNext = position.mCurrent; position.mCurrent->_mPrev = last.get();
position.mCurrent->_mPrev->_mNext = x.mLink._mNext; x.mLink._mNext->_mPrev = position.mCurrent->_mPrev; x.mLink._mPrev->_mNext = position.mCurrent; position.mCurrent->_mPrev = x.mLink._mPrev; x.clear();
    void splice(iterator position, self_type& x, iterator first,                iterator last)    {      NS_ASSERTION(!x.empty(), "Can't insert from empty list.");      if (first == last)        return;      --last; // so we now want to move [first, last]      // remove from |x|      first->_mPrev->_mNext = last->_mNext;      last->_mNext->_mPrev = first->_mPrev;      // use |mCurrent| to prevent DEBUG_PASS_END assertions      // link into |this|, before-side      first->_mPrev = position.mCurrent->_mPrev;      position.mCurrent->_mPrev->_mNext = first.get();      // link into |this|, after-side      last->_mNext = position.mCurrent;      position.mCurrent->_mPrev = last.get();    }