When the object is move constructed, everything is moved except list::end(), which doesn't point to an actual object in memory and is recreated with a new address. So in the case where the iterator points to rhs.list::end(), it needs to be explicitly reset.