```
error[E0382]: borrow of moved value: `x`
--> $DIR/moves-based-on-type-capture-clause-bad.rs:9:20
|
LL | let x = "Hello world!".to_string();
| - move occurs because `x` has type `String`, which does not implement the `Copy` trait
LL | thread::spawn(move || {
| ------- value moved into closure here
LL | println!("{}", x);
| - variable moved due to use in closure
LL | });
LL | println!("{}", x);
| ^ value borrowed here after move
|
= note: this error originates in the macro `$crate::format_args_nl` which comes from the expansion of the macro `println` (in Nightly builds, run with -Z macro-backtrace for more info)
help: consider cloning the value before moving it into the closure
|
LL ~ let value = x.clone();
LL ~ thread::spawn(move || {
LL ~ println!("{}", value);
|
```
18 lines
354 B
Rust
18 lines
354 B
Rust
//@ run-rustfix
|
|
use std::sync::Arc;
|
|
use std::thread;
|
|
|
|
fn main() {
|
|
let v = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
|
|
let arc_v = Arc::new(v);
|
|
|
|
let value = arc_v.clone();
|
|
thread::spawn(move|| {
|
|
assert_eq!((*value)[3], 4);
|
|
});
|
|
|
|
assert_eq!((*arc_v)[2], 3); //~ ERROR borrow of moved value: `arc_v`
|
|
|
|
println!("{:?}", *arc_v);
|
|
}
|