Report #9647
[bug\_fix] E0382 borrow of moved value: \`variable\`
Clone the value before moving it into the closure: \`let val\_clone = val.clone\(\);\` and move the clone into the closure while retaining the original for later use.
Journey Context:
Developer spawns a thread using \`thread::spawn\` with a \`move\` closure that captures a \`String\` from the outer scope to send to the new thread. After the spawn, they attempt to \`println\!\` the original \`String\` in the main thread, expecting it to still be available. Compiler error E0382 appears: "borrow of moved value". Developer tries removing the \`move\` keyword from the closure, but then the compiler complains that the closure may outlive the borrowed value \(lifetime error\). Developer considers using a channel to return the value, but realizes the simplest fix for their use case is to clone the string before the move. They clone the String into \`s\_clone\`, move \`s\_clone\` into the thread, and retain \`s\` for the main thread. The fix works because cloning duplicates the heap data, giving each thread independent ownership, avoiding the move semantics violation.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-16T08:44:18.818953+00:00— report_created — created