error[E0382]: use of moved value: `bar` --> $DIR/moved-value-on-as-ref-arg.rs:27:16 | LL | let bar = Bar; | --- move occurs because `bar` has type `Bar`, which does not implement the `Copy` trait LL | foo(bar); | --- value moved here LL | let _baa = bar; | ^^^ value used here after move | help: borrow the value to avoid moving it | LL | foo(&bar); | + error[E0382]: use of moved value: `bar` --> $DIR/moved-value-on-as-ref-arg.rs:30:16 | LL | let mut bar = Bar; | ------- move occurs because `bar` has type `Bar`, which does not implement the `Copy` trait LL | qux(bar); | --- value moved here LL | let _baa = bar; | ^^^ value used here after move | note: if `Bar` implemented `Clone`, you could clone the value --> $DIR/moved-value-on-as-ref-arg.rs:5:1 | LL | struct Bar; | ^^^^^^^^^^ consider implementing `Clone` for this type ... LL | qux(bar); | --- you could clone this value help: borrow the value to avoid moving it | LL | qux(&mut bar); | ++++ error[E0382]: use of moved value: `bar` --> $DIR/moved-value-on-as-ref-arg.rs:33:16 | LL | let bar = Bar; | --- move occurs because `bar` has type `Bar`, which does not implement the `Copy` trait LL | bat(bar); | --- value moved here LL | let _baa = bar; | ^^^ value used here after move | help: borrow the value to avoid moving it | LL | bat(&bar); | + error[E0382]: use of moved value: `bar` --> $DIR/moved-value-on-as-ref-arg.rs:36:16 | LL | let mut bar = Bar; | ------- move occurs because `bar` has type `Bar`, which does not implement the `Copy` trait LL | baz(bar); | --- value moved here LL | let _baa = bar; | ^^^ value used here after move | note: if `Bar` implemented `Clone`, you could clone the value --> $DIR/moved-value-on-as-ref-arg.rs:5:1 | LL | struct Bar; | ^^^^^^^^^^ consider implementing `Clone` for this type ... LL | baz(bar); | --- you could clone this value help: borrow the value to avoid moving it | LL | baz(&mut bar); | ++++ error: aborting due to 4 previous errors For more information about this error, try `rustc --explain E0382`.