summaryrefslogtreecommitdiffstats
path: root/tests/ui/borrowck/issue-95079-missing-move-in-nested-closure.stderr
blob: 776c338deacf40f4c6d2db778e8e710f44557d40 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
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