Skip to content

Commit

Permalink
Merge pull request #298 from ssbr/patch-1
Browse files Browse the repository at this point in the history
Document lifetime elision for fn types, Fn*, impl
  • Loading branch information
Manishearth authored Aug 4, 2021
2 parents bf9b837 + 3abf036 commit 0c7e5bd
Showing 1 changed file with 10 additions and 8 deletions.
18 changes: 10 additions & 8 deletions src/lifetime-elision.md
Original file line number Diff line number Diff line change
Expand Up @@ -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:

Expand Down

0 comments on commit 0c7e5bd

Please sign in to comment.