error[E0382]: use of moved value: `pointee` --> $DIR/pin_move.rs:11:18 | LL | let mut pointee = NotCopy(PhantomPinned); | ----------- move occurs because `pointee` has type `a::NotCopy`, which does not implement the `Copy` trait LL | pin!(pointee); | ------- value moved here LL | let _moved = pointee; | ^^^^^^^ value used here after move | note: if `a::NotCopy` implemented `Clone`, you could clone the value --> $DIR/pin_move.rs:7:5 | LL | struct NotCopy(T); | ^^^^^^^^^^^^^^^^^ consider implementing `Clone` for this type ... LL | pin!(pointee); | ------- you could clone this value error[E0507]: cannot move out of a mutable reference --> $DIR/pin_move.rs:18:10 | LL | pin!(*&mut pointee); | ^^^^^^^^^^^^^ move occurs because value has type `b::NotCopy`, which does not implement the `Copy` trait | note: if `b::NotCopy` implemented `Clone`, you could clone the value --> $DIR/pin_move.rs:16:5 | LL | struct NotCopy(T); | ^^^^^^^^^^^^^^^^^ consider implementing `Clone` for this type LL | let mut pointee = NotCopy(PhantomPinned); LL | pin!(*&mut pointee); | ------------- you could clone this value help: consider removing the dereference here | LL - pin!(*&mut pointee); LL + pin!(&mut pointee); | error: aborting due to 2 previous errors Some errors have detailed explanations: E0382, E0507. For more information about an error, try `rustc --explain E0382`.