fn iter(vec: Vec) -> impl Iterator { vec.into_iter() } fn foo() { let vec = vec!["one", "two", "three"]; while let Some(item) = iter(vec).next() { //~ ERROR use of moved value //~^ HELP consider moving the expression out of the loop so it is only moved once println!("{:?}", item); } } fn bar() { let vec = vec!["one", "two", "three"]; loop { //~^ HELP consider moving the expression out of the loop so it is only moved once let Some(item) = iter(vec).next() else { //~ ERROR use of moved value break; }; println!("{:?}", item); } } fn baz() { let vec = vec!["one", "two", "three"]; loop { //~^ HELP consider moving the expression out of the loop so it is only moved once let item = iter(vec).next(); //~ ERROR use of moved value //~^ HELP consider cloning if item.is_none() { break; } println!("{:?}", item); } } fn qux() { let vec = vec!["one", "two", "three"]; loop { //~^ HELP consider moving the expression out of the loop so it is only moved once if let Some(item) = iter(vec).next() { //~ ERROR use of moved value println!("{:?}", item); break; } } } fn zap() { loop { let vec = vec!["one", "two", "three"]; loop { //~^ HELP consider moving the expression out of the loop so it is only moved once loop { loop { if let Some(item) = iter(vec).next() { //~ ERROR use of moved value println!("{:?}", item); break; } } } } } } fn main() { foo(); bar(); baz(); qux(); zap(); }