error[E0509]: cannot move out of type `S<()>`, which implements the `Drop` trait --> $DIR/borrowck-struct-update-with-dtor.rs:20:19 | LL | let _s2 = S { a: 2, ..s0 }; | ^^^^^^^^^^^^^^^^ | | | cannot move out of here | move occurs because `s0.b` has type `B`, which does not implement the `Copy` trait | note: `B` doesn't implement `Copy` or `Clone` --> $DIR/borrowck-struct-update-with-dtor.rs:4:1 | LL | struct B; | ^^^^^^^^ help: if `B` implemented `Clone`, you could clone the value from the field instead of using the functional record update syntax | LL | let _s2 = S { a: 2, b: s0.b.clone(), ..s0 }; | +++++++++++++++++ error[E0509]: cannot move out of type `S`, which implements the `Drop` trait --> $DIR/borrowck-struct-update-with-dtor.rs:24:19 | LL | let _s2 = S { a: 2, ..s0 }; | ^^^^^^^^^^^^^^^^ | | | cannot move out of here | move occurs because `s0.b` has type `B`, which does not implement the `Copy` trait | note: `B` doesn't implement `Copy` or `Clone` --> $DIR/borrowck-struct-update-with-dtor.rs:4:1 | LL | struct B; | ^^^^^^^^ help: if `B` implemented `Clone`, you could clone the value from the field instead of using the functional record update syntax | LL | let _s2 = S { a: 2, b: s0.b.clone(), c: s0.c.clone() }; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ error[E0509]: cannot move out of type `S`, which implements the `Drop` trait --> $DIR/borrowck-struct-update-with-dtor.rs:24:19 | LL | let _s2 = S { a: 2, ..s0 }; | ^^^^^^^^^^^^^^^^ | | | cannot move out of here | move occurs because `s0.c` has type `B`, which does not implement the `Copy` trait | note: `B` doesn't implement `Copy` or `Clone` --> $DIR/borrowck-struct-update-with-dtor.rs:4:1 | LL | struct B; | ^^^^^^^^ help: if `B` implemented `Clone`, you could clone the value from the field instead of using the functional record update syntax | LL | let _s2 = S { a: 2, b: s0.b.clone(), c: s0.c.clone() }; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ error[E0509]: cannot move out of type `S`, which implements the `Drop` trait --> $DIR/borrowck-struct-update-with-dtor.rs:29:19 | LL | let _s2 = S { a: 2, ..s0 }; | ^^^^^^^^^^^^^^^^ | | | cannot move out of here | move occurs because `s0.b` has type `B`, which does not implement the `Copy` trait | note: `B` doesn't implement `Copy` or `Clone` --> $DIR/borrowck-struct-update-with-dtor.rs:4:1 | LL | struct B; | ^^^^^^^^ help: if `B` implemented `Clone`, you could clone the value from the field instead of using the functional record update syntax | LL | let _s2 = S { a: 2, b: s0.b.clone(), ..s0 }; | +++++++++++++++++ error[E0509]: cannot move out of type `S`, which implements the `Drop` trait --> $DIR/borrowck-struct-update-with-dtor.rs:29:19 | LL | let _s2 = S { a: 2, ..s0 }; | ^^^^^^^^^^^^^^^^ | | | cannot move out of here | move occurs because `s0.c` has type `K`, which does not implement the `Copy` trait | help: clone the value from the field instead of using the functional record update syntax | LL | let _s2 = S { a: 2, c: s0.c.clone(), ..s0 }; | +++++++++++++++++ error[E0509]: cannot move out of type `T`, which implements the `Drop` trait --> $DIR/borrowck-struct-update-with-dtor.rs:37:19 | LL | let _s2 = T { a: 2, ..s0 }; | ^^^^^^^^^^^^^^^^ | | | cannot move out of here | move occurs because `s0.b` has type `Box`, which does not implement the `Copy` trait | help: clone the value from the field instead of using the functional record update syntax | LL | let _s2 = T { a: 2, b: s0.b.clone() }; | ~~~~~~~~~~~~~~~~~ error[E0509]: cannot move out of type `T`, which implements the `Drop` trait --> $DIR/borrowck-struct-update-with-dtor.rs:42:19 | LL | let _s2 = T { ..s0 }; | ^^^^^^^^^^ | | | cannot move out of here | move occurs because `s0.b` has type `Box`, which does not implement the `Copy` trait | help: clone the value from the field instead of using the functional record update syntax | LL | let _s2 = T { b: s0.b.clone(), ..s0 }; | ~~~~~~~~~~~~~~~~~~~~~~~~~ error[E0509]: cannot move out of type `T`, which implements the `Drop` trait --> $DIR/borrowck-struct-update-with-dtor.rs:47:32 | LL | let _s2 = T { a: 2, b: s0.b }; | ^^^^ | | | cannot move out of here | move occurs because `s0.b` has type `Box`, which does not implement the `Copy` trait | help: consider cloning the value if the performance cost is acceptable | LL | let _s2 = T { a: 2, b: s0.b.clone() }; | ++++++++ error[E0509]: cannot move out of type `V`, which implements the `Drop` trait --> $DIR/borrowck-struct-update-with-dtor.rs:52:19 | LL | let _s2 = V { a: 2, ..s0 }; | ^^^^^^^^^^^^^^^^ | | | cannot move out of here | move occurs because `s0.b` has type `Box`, which does not implement the `Copy` trait | help: clone the value from the field instead of using the functional record update syntax | LL | let _s2 = V { a: 2, b: s0.b.clone(), ..s0 }; | +++++++++++++++++ error[E0509]: cannot move out of type `V`, which implements the `Drop` trait --> $DIR/borrowck-struct-update-with-dtor.rs:52:19 | LL | let _s2 = V { a: 2, ..s0 }; | ^^^^^^^^^^^^^^^^ | | | cannot move out of here | move occurs because `s0.c` has type `K`, which does not implement the `Copy` trait | help: clone the value from the field instead of using the functional record update syntax | LL | let _s2 = V { a: 2, c: s0.c.clone(), ..s0 }; | +++++++++++++++++ error[E0509]: cannot move out of type `V`, which implements the `Drop` trait --> $DIR/borrowck-struct-update-with-dtor.rs:58:19 | LL | let _s2 = V { a: 2, ..s0 }; | ^^^^^^^^^^^^^^^^ | | | cannot move out of here | move occurs because `s0.b` has type `Box`, which does not implement the `Copy` trait | help: clone the value from the field instead of using the functional record update syntax | LL | let _s2 = V { a: 2, b: s0.b.clone(), ..s0 }; | +++++++++++++++++ error[E0509]: cannot move out of type `V`, which implements the `Drop` trait --> $DIR/borrowck-struct-update-with-dtor.rs:58:19 | LL | let _s2 = V { a: 2, ..s0 }; | ^^^^^^^^^^^^^^^^ | | | cannot move out of here | move occurs because `s0.c` has type `Clonable`, which does not implement the `Copy` trait | help: clone the value from the field instead of using the functional record update syntax | LL | let _s2 = V { a: 2, c: s0.c.clone(), ..s0 }; | +++++++++++++++++ error: aborting due to 12 previous errors For more information about this error, try `rustc --explain E0509`.