Code
#[derive(Default)]
struct A {}
struct B<'a> {
a: &'a mut A,
}
struct C<'a, 'b> {
b: &'b mut B<'a>,
}
fn some_fn<'a>(b: &mut B<'a>, f: impl FnOnce(&C<'a, '_>)) {}
fn main() {
let some_closure = |_fs| {};
for _ in [1] {
let mut a = Default::default();
let mut b = B { a: &mut a };
some_fn(&mut b, |c| {
some_closure(c);
});
}
}
Current output
error[E0373]: closure may outlive the current block, but it borrows `a`, which is owned by the current block
--> src/main.rs:19:28
|
19 | let mut b = B { a: &mut a };
| ^^^^^^
| |
| `a` is borrowed here
| may outlive borrowed value `a`
|
note: block requires argument type to outlive `'1`
--> src/main.rs:21:13
|
21 | some_closure(c);
| ^^^^^^^^^^^^
help: to force the closure to take ownership of `a` (and any other referenced variables), use the `move` keyword
|
19 | let mut b = B { a: move &mut a };
| ++++
Desired output
move should not be recommended as it does not solve any issue. This is the case even if put at the closure definition since the closure does not capture anything.
Rationale and extra context
The recommendation for the move is wrong.
Other cases
No response
Anything else?
Playground link.
Rust version:
Nightly version: 1.72.0-nightly
(2023-06-21 065a1f5df9c2f1d93269)
Code
Current output
Desired output
moveshould not be recommended as it does not solve any issue. This is the case even if put at the closure definition since the closure does not capture anything.Rationale and extra context
The recommendation for the
moveis wrong.Other cases
No response
Anything else?
Playground link.
Rust version: