Closed
Description
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?
Rust version:
Nightly version: 1.72.0-nightly
(2023-06-21 065a1f5df9c2f1d93269)