Lifetimes Are Just Borrow Scopes Made Explicit
When the compiler cannot infer how long a reference lives, you annotate with a lifetime: fn longest<'a>(x: &'a str, y: &'a str) -> &'a str. The 'a just means 'the output lives at least as long as both inputs'. Lifetimes express constraints, they do not create them.