diff --git a/src/lifetime-elision.md b/src/lifetime-elision.md index c65a157..dfa45ec 100644 --- a/src/lifetime-elision.md +++ b/src/lifetime-elision.md @@ -14,15 +14,17 @@ T<'a> Lifetime positions can appear as either "input" or "output": -* For `fn` definitions, input refers to the types of the formal arguments - in the `fn` definition, while output refers to +* For `fn` definitions, `fn` types, and the traits `Fn`, `FnMut`, and `FnOnce`, + input refers to the types of the formal arguments, while output refers to result types. So `fn foo(s: &str) -> (&str, &str)` has elided one lifetime in - input position and two lifetimes in output position. - Note that the input positions of a `fn` method definition do not - include the lifetimes that occur in the method's `impl` header - (nor lifetimes that occur in the trait header, for a default method). - -* In the future, it should be possible to elide `impl` headers in the same manner. + input position and two lifetimes in output position. Note that the input + positions of a `fn` method definition do not include the lifetimes that occur + in the method's `impl` header (nor lifetimes that occur in the trait header, + for a default method). + +* For `impl` headers, all types are input. So `impl Trait<&T> for Struct<&T>` + has elided two lifetimes in input position, while `impl Struct<&T>` has elided + one. Elision rules are as follows: