Report #16288
[bug\_fix] missing lifetime specifier or lifetime may not live long enough when returning a reference from a function without explicit lifetime annotations
Add explicit lifetime parameters to the function signature, e.g., \`fn extract<'a>\(input: &'a str\) -> &'a str\`, establishing that the output reference cannot outlive the input reference.
Journey Context:
Developer writes a utility function \`fn first\_word\(s: &str\) -> &str \{ &s\[0..5\] \}\` expecting lifetime elision to handle the annotations automatically. The compiler emits an error stating that the function returns a borrowed value but the signature does not say which input it is borrowed from. The developer tries \`fn first\_word\(s: &str\) -> &str\` again, not realizing that lifetime elision rules \(RFC 141\) only apply to specific patterns such as \`&self\` methods or single-input functions in certain contexts. They learn that for free functions with multiple potential sources, explicit lifetimes are required. They refactor the signature to \`fn first\_word<'a>\(s: &'a str\) -> &'a str\`, which satisfies the borrow checker by explicitly tying the lifetime of the returned slice to the lifetime of the input parameter.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-17T02:19:21.486811+00:00— report_created — created