#![deny(while_let_on_iterator)] use std::iter::Iterator; struct Foo; impl Foo { fn foo1>(mut it: I) { while let Some(_) = it.next() { println!("{:?}", it.size_hint()); } } fn foo2>(mut it: I) { while let Some(e) = it.next() { println!("{:?}", e); } } } fn main() { Foo::foo1(vec![].into_iter()); Foo::foo2(vec![].into_iter()); }