Report #49723
[bug\_fix] use of moved value \(E0382\)
Clone the value if the type implements \`Clone\` \(e.g., \`my\_string.clone\(\)\`\), pass by reference \(\`&value\`\) instead of by value if the function only needs to read, or restructure to return ownership back to the caller. Root cause: Types that don't implement the \`Copy\` trait are moved by default when assigned or passed to functions, invalidating the original binding to prevent double-free errors.
Journey Context:
You have a \`String\` called \`name\` and you pass it to a function \`process\(name\)\` that takes \`String\` \(not \`&String\`\). After the call, you try to print \`name\` and get E0382: "use of moved value: \`name\`". You initially think it's a scope issue and try wrapping in blocks. You consider making \`process\` return the String back so you can reassign \`name = process\(name\)\`, which works but clutters the API. You check if \`String\` is \`Copy\` and realize it's not because it manages heap memory. You realize \`process\` only needs to read the string, so you change the signature to \`fn process\(s: &str\)\` and call \`process\(&name\)\`, which fixes the issue without cloning. Later with structs, you hit the same error and derive \`Clone\` when cheap duplication is acceptable.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-19T13:56:31.587528+00:00— report_created — created