When writing functions that return references, lifetimes must be explicitly annotated. These functions are generic and we must tell the compiler what is the relationship between the lifetimes of the objects that appear in the arguments and the output.

Let's illustrate with an example: we want a function that returns a reference to the title field of a Book struct. The most generic function that we could write would look like this:

{explicit.play}

The compiler can't tell how 'a and 'b are related, so we must supply this information. The answer here is that 'a = 'b, the reason is that the title field will be destroyed when the book gets destroyed (same way with the creation time), therefore the title field has the same lifetime as the book.