|
|
|
@ -252,7 +252,7 @@ Furthermore, the returned string reference must also share this same lifetime to
|
|
|
|
|
So how does the compiler make sure this is the case?
|
|
|
|
|
|
|
|
|
|
At the call-site of `shortest()`, the compiler must try to *convert* the lifetimes of
|
|
|
|
|
the references corresponding to a reference marked `&'a` in the function signature
|
|
|
|
|
the references marked `&'a` in the `shortest()` function signature
|
|
|
|
|
into a single *unified* lifetime. This new lifetime must be shorter than, or equally as
|
|
|
|
|
long as, each of the reference lifetimes in isolation. A reference `&'o T` can be
|
|
|
|
|
converted to to `&'p T` if (and only if) it can be proven that `'o` lives as
|
|
|
|
@ -260,7 +260,7 @@ long as (or longer than) `'p`. In our example the references `'&s1`, `&s2` and
|
|
|
|
|
the returned reference can all be shown to be valid for the
|
|
|
|
|
scope created by the `let s2` binding (see above for information on implicit
|
|
|
|
|
scopes introduced by `let` bindings). So in this case, we can prove that the
|
|
|
|
|
lifetimes of `&s1`, `&s2` and the returned reference can be unified, and as a
|
|
|
|
|
lifetimes can be unified, and as a
|
|
|
|
|
result he compiler accepts the program.
|
|
|
|
|
|
|
|
|
|
If, on the other hand, the compiler cannot find such a lifetime, then the
|
|
|
|
|