mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-27 17:24:06 +00:00
e6b84eb797
Fix #64008.
59 lines
2.9 KiB
Plaintext
59 lines
2.9 KiB
Plaintext
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<Item = String> + '_ {
|
|
| - 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<Chars<'_>, [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<Item = ()> + '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
|
|
|