Merge pull request #254 from mdaverde/ml/adds-compiler-err-lifetimes

pull/263/head
Yuki Okushi 4 years ago committed by GitHub
commit adca786547
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -74,7 +74,7 @@ care about, but the lifetime system is too coarse-grained to handle that.
# Improperly reduced borrows # Improperly reduced borrows
This currently fails to compile, because Rust doesn't understand that the borrow The following code fails to compile, because Rust doesn't understand that the borrow
is no longer needed and conservatively falls back to using a whole scope for it. is no longer needed and conservatively falls back to using a whole scope for it.
This will eventually get fixed. This will eventually get fixed.
@ -96,5 +96,29 @@ where
} }
``` ```
Because of the lifetime restrictions imposed, `&mut map`'s lifetime
overlaps other mutable borrows, resulting in a compile error:
```text
error[E0499]: cannot borrow `*map` as mutable more than once at a time
--> src/main.rs:12:13
|
4 | fn get_default<'m, K, V>(map: &'m mut HashMap<K, V>, key: K) -> &'m mut V
| -- lifetime `'m` defined here
...
9 | match map.get_mut(&key) {
| - --- first mutable borrow occurs here
| _____|
| |
10 | | Some(value) => value,
11 | | None => {
12 | | map.insert(key.clone(), V::default());
| | ^^^ second mutable borrow occurs here
13 | | map.get_mut(&key).unwrap()
14 | | }
15 | | }
| |_____- returning this value requires that `*map` is borrowed for `'m`
```
[ex2]: lifetimes.html#example-aliasing-a-mutable-reference [ex2]: lifetimes.html#example-aliasing-a-mutable-reference

Loading…
Cancel
Save