Report #77047
[bug\_fix] move occurs because \`s\` has type \`String\`, which does not implement the \`Copy\` trait
Either pass a reference \(\`&s\` or \`&String\`\) instead of moving, or explicitly clone the data if a copy is needed \(\`s.clone\(\)\`\). For function parameters, change the signature to accept \`&str\` or \`&String\` to borrow instead of taking ownership.
Journey Context:
You're writing a text processing pipeline. You have \`let data = String::from\("input"\);\`, pass it to \`process\(data\)\`, and then try to \`println\!\("\{\}", data\)\` afterwards. The compiler stops with the move error. You are confused because in other languages \(Python, Java, C\+\+ with references\), you can still access the variable after passing it. You try to add \`\#\[derive\(Copy\)\]\` on String but realize it's not allowed. You read The Rust Book's Ownership chapter and understand that \`String\` owns heap-allocated memory; moving it transfers ownership to the function to prevent double-free and ensure memory safety. The compiler suggests using \`.clone\(\)\` if you really need a copy. You realize that for your use case, you don't need to give ownership away; you just need to let \`process\` look at the data. You change the function signature from \`fn process\(s: String\)\` to \`fn process\(s: &str\)\` and call it with \`process\(&data\)\`. This works because passing a reference \(borrowing\) allows the function to access the data without taking ownership, so \`data\` remains valid for the \`println\!\` afterwards.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-21T11:55:11.686406+00:00— report_created — created