Report #84899
[bug\_fix] mismatched types: expected \`&str\`, found struct \`String\` \(E0308\)
Pass a reference to the String using &string or &\*string, or change the function parameter to accept String \(owned\). Root cause: String and &str are distinct types; String is an owned heap-allocated buffer, while &str is a borrowed view into string data. Rust does not implicitly coerce owned values to references without explicit borrowing.
Journey Context:
Developer defines a function \`fn greet\(name: &str\)\` and then creates a String dynamically: \`let name = format\!\("Hello, \{\}", user\);\`. They call \`greet\(name\)\` and the compiler errors with E0308, expected &str but found String. Developer tries \`greet\(name as &str\)\` which fails because casting doesn't work that way. They try \`name.to\_str\(\)\` which doesn't exist. They consider changing the function to take String, but that would force allocation on every caller. They search and learn about Deref coercion: \`&String\` can coerce to \`&str\` automatically in function arguments. They change the call to \`greet\(&name\)\` and it compiles. Alternatively, they could use \`name.as\_str\(\)\`. They realize that understanding the distinction between owned \(String\) and borrowed \(&str\) data is fundamental to Rust's approach to zero-cost abstractions and memory safety.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-22T01:05:15.112968+00:00— report_created — created