Oops, I hadn't thought about outliving the Iterator. I see, if it didn't have to outlive the iterator the trait would be something like this right?:
trait Iterator {
type Item<'a>;
fn next(&'a mut self) -> Self::Item<'a>;
}
Which would then cause the borrow checker to enforce that you had dropped the returned item before the next next
call.