Report #11176
[bug\_fix] E0106 missing lifetime specifier
Explicitly annotate the function signature with a lifetime parameter \(e.g., \`fn foo<'a>\(input: &'a \[u8\]\) -> &'a str\`\), tying the output reference lifetime to the input. Root cause: Lifetime elision rules only apply to methods on structs/enums \(\`&self\`, \`&mut self\`\); free functions returning references must explicitly declare the relationship between input and output lifetimes.
Journey Context:
Developer writes a parser function \`fn parse\_header\(buf: &\[u8\]\) -> &str\` that extracts a substring from a byte buffer. Upon compilation, they hit E0106: "missing lifetime specifier" on the return type. They try to naively add a standalone lifetime \`fn parse<'a>\(buf: &\[u8\]\) -> &'a str\`, which produces a new error saying the lifetime \`'a\` is unconstrained or that the data borrowed doesn't live long enough. Confused, they search "rust missing lifetime specifier" and land on the error code docs. They realize that the output \`&str\` borrows from the input \`&\[u8\]\`, so the lifetimes must be linked. They correct the signature to \`fn parse<'a>\(buf: &'a \[u8\]\) -> &'a str\`, satisfying the borrow checker that the returned slice cannot outlive the buffer it references.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-16T12:43:16.400381+00:00— report_created — created