| error[E0382]: use of moved value: `x` |
| --> $DIR/binop-move-semantics.rs:8:5 |
| | |
| LL | fn double_move<T: Add<Output=()>>(x: T) { |
| | - move occurs because `x` has type `T`, which does not implement the `Copy` trait |
| LL | / x |
| LL | | + |
| LL | | x; |
| | | ^ |
| | | | |
| | |_____value used here after move |
| | `x` moved due to usage in operator |
| | |
| help: if `T` implemented `Clone`, you could clone the value |
| --> $DIR/binop-move-semantics.rs:5:16 |
| | |
| LL | fn double_move<T: Add<Output=()>>(x: T) { |
| | ^ consider constraining this type parameter with `Clone` |
| LL | x |
| | - you could clone this value |
| note: calling this operator moves the left-hand side |
| --> $SRC_DIR/core/src/ops/arith.rs:LL:COL |
| help: consider further restricting this bound |
| | |
| LL | fn double_move<T: Add<Output=()> + Copy>(x: T) { |
| | ++++++ |
| |
| error[E0382]: borrow of moved value: `x` |
| --> $DIR/binop-move-semantics.rs:14:5 |
| | |
| LL | fn move_then_borrow<T: Add<Output=()> + Clone>(x: T) { |
| | - move occurs because `x` has type `T`, which does not implement the `Copy` trait |
| LL | x |
| | - value moved here |
| LL | + |
| LL | x.clone(); |
| | ^ value borrowed here after move |
| | |
| help: consider cloning the value if the performance cost is acceptable |
| | |
| LL | x.clone() |
| | ++++++++ |
| help: consider further restricting this bound |
| | |
| LL | fn move_then_borrow<T: Add<Output=()> + Clone + Copy>(x: T) { |
| | ++++++ |
| |
| error[E0505]: cannot move out of `x` because it is borrowed |
| --> $DIR/binop-move-semantics.rs:21:5 |
| | |
| LL | fn move_borrowed<T: Add<Output=()>>(x: T, mut y: T) { |
| | - binding `x` declared here |
| LL | let m = &x; |
| | -- borrow of `x` occurs here |
| ... |
| LL | x |
| | ^ move out of `x` occurs here |
| ... |
| LL | use_mut(n); use_imm(m); |
| | - borrow later used here |
| | |
| help: if `T` implemented `Clone`, you could clone the value |
| --> $DIR/binop-move-semantics.rs:17:18 |
| | |
| LL | fn move_borrowed<T: Add<Output=()>>(x: T, mut y: T) { |
| | ^ consider constraining this type parameter with `Clone` |
| LL | let m = &x; |
| | - you could clone this value |
| |
| error[E0505]: cannot move out of `y` because it is borrowed |
| --> $DIR/binop-move-semantics.rs:23:5 |
| | |
| LL | fn move_borrowed<T: Add<Output=()>>(x: T, mut y: T) { |
| | ----- binding `y` declared here |
| LL | let m = &x; |
| LL | let n = &mut y; |
| | ------ borrow of `y` occurs here |
| ... |
| LL | y; |
| | ^ move out of `y` occurs here |
| LL | use_mut(n); use_imm(m); |
| | - borrow later used here |
| | |
| help: if `T` implemented `Clone`, you could clone the value |
| --> $DIR/binop-move-semantics.rs:17:18 |
| | |
| LL | fn move_borrowed<T: Add<Output=()>>(x: T, mut y: T) { |
| | ^ consider constraining this type parameter with `Clone` |
| LL | let m = &x; |
| LL | let n = &mut y; |
| | - you could clone this value |
| |
| error[E0507]: cannot move out of `*m` which is behind a mutable reference |
| --> $DIR/binop-move-semantics.rs:30:5 |
| | |
| LL | *m |
| | -^ |
| | | |
| | _____move occurs because `*m` has type `T`, which does not implement the `Copy` trait |
| | | |
| LL | | + |
| LL | | *n; |
| | |______- `*m` moved due to usage in operator |
| | |
| note: calling this operator moves the left-hand side |
| --> $SRC_DIR/core/src/ops/arith.rs:LL:COL |
| help: if `T` implemented `Clone`, you could clone the value |
| --> $DIR/binop-move-semantics.rs:26:24 |
| | |
| LL | fn illegal_dereference<T: Add<Output=()>>(mut x: T, y: T) { |
| | ^ consider constraining this type parameter with `Clone` |
| ... |
| LL | *m |
| | -- you could clone this value |
| |
| error[E0507]: cannot move out of `*n` which is behind a shared reference |
| --> $DIR/binop-move-semantics.rs:32:5 |
| | |
| LL | *n; |
| | ^^ move occurs because `*n` has type `T`, which does not implement the `Copy` trait |
| | |
| help: if `T` implemented `Clone`, you could clone the value |
| --> $DIR/binop-move-semantics.rs:26:24 |
| | |
| LL | fn illegal_dereference<T: Add<Output=()>>(mut x: T, y: T) { |
| | ^ consider constraining this type parameter with `Clone` |
| ... |
| LL | *n; |
| | -- you could clone this value |
| |
| error[E0502]: cannot borrow `f` as immutable because it is also borrowed as mutable |
| --> $DIR/binop-move-semantics.rs:54:5 |
| | |
| LL | &mut f |
| | ------ |
| | | |
| | _____mutable borrow occurs here |
| | | |
| LL | | + |
| LL | | &f; |
| | | ^- |
| | |_____|| |
| | |mutable borrow later used here |
| | immutable borrow occurs here |
| |
| error[E0502]: cannot borrow `f` as mutable because it is also borrowed as immutable |
| --> $DIR/binop-move-semantics.rs:62:5 |
| | |
| LL | &f |
| | -- |
| | | |
| | _____immutable borrow occurs here |
| | | |
| LL | | + |
| LL | | &mut f; |
| | | ^^^^^- |
| | |_____|____| |
| | | immutable borrow later used here |
| | mutable borrow occurs here |
| |
| error: aborting due to 8 previous errors |
| |
| Some errors have detailed explanations: E0382, E0502, E0505, E0507. |
| For more information about an error, try `rustc --explain E0382`. |