| This error occurs because a value was dropped while it was still borrowed. |
| |
| Erroneous code example: |
| |
| ```compile_fail,E0597 |
| struct Foo<'a> { |
| x: Option<&'a u32>, |
| } |
| |
| let mut x = Foo { x: None }; |
| { |
| let y = 0; |
| x.x = Some(&y); // error: `y` does not live long enough |
| } |
| println!("{:?}", x.x); |
| ``` |
| |
| Here, `y` is dropped at the end of the inner scope, but it is borrowed by |
| `x` until the `println`. To fix the previous example, just remove the scope |
| so that `y` isn't dropped until after the println |
| |
| ``` |
| struct Foo<'a> { |
| x: Option<&'a u32>, |
| } |
| |
| let mut x = Foo { x: None }; |
| |
| let y = 0; |
| x.x = Some(&y); |
| |
| println!("{:?}", x.x); |
| ``` |