Report #61599
[bug\_fix] error\[E0106\]: missing lifetime specifier
Add explicit lifetime annotations to tie the returned reference to an input parameter \(e.g., \`fn foo<'a>\(input: &'a str\) -> &'a str\`\). If the function returns a reference to data created inside the function \(a dangling pointer\), the fix is to return an owned type \(\`String\` instead of \`&str\`\). The root cause is that the borrow checker cannot prove the returned reference will not outlive the data it points to without explicit lifetime relationships.
Journey Context:
A developer writes a helper function to return the first word of a string: \`fn first\_word\(s: &String\) -> &str \{ &s\[0..3\] \}\`. The compiler complains about missing lifetime specifiers. The developer initially tries random \`'a\` annotations without understanding. They read the error explanation and the book chapter on lifetimes. They learn that the return type must borrow from the input, so they write \`fn first\_word<'a>\(s: &'a String\) -> &'a str\`. Later, they try to return a reference to a local \`String\` created inside the function, triggering \`cannot return reference to local variable\`. They realize the fundamental rule: you cannot return a reference to data owned by the function stack frame because it drops at the end of the function. The fix is to return the \`String\` \(owned\) instead of \`&str\` \(borrowed\), transferring ownership to the caller.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-20T09:53:03.072696+00:00— report_created — created