error: captured variable cannot escape `FnMut` closure body --> $DIR/issue-95079-missing-move-in-nested-closure.rs:5:29 | LL | fn foo1(s: &str) -> impl Iterator + '_ { | - variable defined here LL | None.into_iter() LL | .flat_map(move |()| s.chars().map(|c| format!("{}{}", c, s))) | - -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | | | | | returns a closure that contains a reference to a captured variable, which then escapes the closure body | | variable captured here | inferred to be a `FnMut` closure | = note: `FnMut` closures only have access to their captured variables while they are executing... = note: ...therefore, they cannot allow references to captured variables to escape help: consider adding 'move' keyword before the nested closure | LL | .flat_map(move |()| s.chars().map(move |c| format!("{}{}", c, s))) | ++++ error: lifetime may not live long enough --> $DIR/issue-95079-missing-move-in-nested-closure.rs:11:15 | LL | move |()| s.chars().map(|c| format!("{}{}", c, s)) | --------- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ returning this value requires that `'1` must outlive `'2` | | | | | return type of closure `Map, [closure@$DIR/issue-95079-missing-move-in-nested-closure.rs:11:29: 11:32]>` contains a lifetime `'2` | lifetime `'1` represents this closure's body | = note: closure implements `Fn`, so references to captured variables can't escape the closure help: consider adding 'move' keyword before the nested closure | LL | move |()| s.chars().map(move |c| format!("{}{}", c, s)) | ++++ error: captured variable cannot escape `FnMut` closure body --> $DIR/issue-95079-missing-move-in-nested-closure.rs:21:9 | LL | bar: &'a X, | --- variable defined here LL | ) -> impl Iterator + 'a { LL | Some(()).iter().flat_map(move |()| { | - inferred to be a `FnMut` closure LL | Some(()).iter().map(|()| { bar; }) | ^^^^^^^^^^^^^^^^^^^^^^^^^^^---^^^^ | | | | | variable captured here | returns a closure that contains a reference to a captured variable, which then escapes the closure body | = note: `FnMut` closures only have access to their captured variables while they are executing... = note: ...therefore, they cannot allow references to captured variables to escape help: consider adding 'move' keyword before the nested closure | LL | Some(()).iter().map(move |()| { bar; }) | ++++ error: aborting due to 3 previous errors