I have to pass queue to the new iterator on calls to ++. If I use a mutable queue, I have to return "this" from ++, which is dicey - it requires casting and opens the door to a CCE if the original iterator is used again (because one could Iterator(1, 2) ++ Iterator("foo") to get an Iterator[String], but the old Iterator[Int] reference still points at it.)