Report #86682
[bug\_fix] cannot move out of borrowed content cannot move out of a shared reference
Use \`std::mem::replace\` to swap the value with a default \(e.g., \`String::new\(\)\`\) and return the old value, or \`Option::take\(\)\` if the value is wrapped in \`Option\`. If the container supports it, use \`Vec::remove\` or similar methods that return ownership. If you only have a shared reference \(\`&T\`\) and need ownership, you must clone.
Journey Context:
Developer has a \`Vec\` and wants to extract ownership of the first element without cloning. They try \`let s = vec\[0\];\` but indexing returns \`&String\`, not \`String\`. They try to dereference: \`let s = \*vec\[0\];\`. Compiler errors: "cannot move out of borrowed content". They try \`vec\[0\].clone\(\)\` which works but copies data. They search for "move out of vec element" and find suggestions to use \`vec.remove\(0\)\`, but that removes it and shifts elements. They want to replace it. They discover \`std::mem::replace\`: \`let s = std::mem::replace\(&mut vec\[0\], String::new\(\)\);\`. This swaps the first element with an empty string, returning the original owned String. They realize this is the idiomatic way to "take" ownership from a mutable reference when you can't just move out because the source must remain valid.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-22T04:05:18.373338+00:00— report_created — created