error: borrow of moved value --> $DIR/ref-pattern-binding.rs:10:9 | LL | let _moved @ ref _from = String::from("foo"); | ^^^^^^ --------- value borrowed here after move | | | value moved into `_moved` here | move occurs because `_moved` has type `String` which does not implement the `Copy` trait | help: borrow this binding in the pattern to avoid moving the value | LL | let ref _moved @ ref _from = String::from("foo"); | +++ error: cannot move out of value because it is borrowed --> $DIR/ref-pattern-binding.rs:11:9 | LL | let ref _moved @ _from = String::from("foo"); | ^^^^^^^^^^ ----- value is moved into `_from` here | | | value is borrowed by `_moved` here error: cannot move out of value because it is borrowed --> $DIR/ref-pattern-binding.rs:15:9 | LL | let ref _moved @ S { f } = S { f: String::from("foo") }; | ^^^^^^^^^^ - value is moved into `f` here | | | value is borrowed by `_moved` here error: borrow of moved value --> $DIR/ref-pattern-binding.rs:18:9 | LL | let _moved @ S { ref f } = S { f: String::from("foo") }; | ^^^^^^ ----- value borrowed here after move | | | value moved into `_moved` here | move occurs because `_moved` has type `S` which does not implement the `Copy` trait | help: borrow this binding in the pattern to avoid moving the value | LL | let ref _moved @ S { ref f } = S { f: String::from("foo") }; | +++ error[E0382]: use of moved value --> $DIR/ref-pattern-binding.rs:9:9 | LL | let _moved @ _from = String::from("foo"); | ^^^^^^ ----- ------------------- move occurs because value has type `String`, which does not implement the `Copy` trait | | | | | value moved here | value used here after move | help: borrow this binding in the pattern to avoid moving the value | LL | let ref _moved @ ref _from = String::from("foo"); | +++ +++ error[E0382]: borrow of moved value --> $DIR/ref-pattern-binding.rs:11:9 | LL | let ref _moved @ _from = String::from("foo"); | ^^^^^^^^^^ ----- ------------------- move occurs because value has type `String`, which does not implement the `Copy` trait | | | | | value moved here | value borrowed here after move | help: borrow this binding in the pattern to avoid moving the value | LL | let ref _moved @ ref _from = String::from("foo"); | +++ error[E0382]: use of partially moved value --> $DIR/ref-pattern-binding.rs:14:9 | LL | let _moved @ S { f } = S { f: String::from("foo") }; | ^^^^^^ - value partially moved here | | | value used here after partial move | = note: partial move occurs because value has type `String`, which does not implement the `Copy` trait help: borrow this binding in the pattern to avoid moving the value | LL | let ref _moved @ S { ref f } = S { f: String::from("foo") }; | +++ +++ error[E0382]: borrow of partially moved value --> $DIR/ref-pattern-binding.rs:15:9 | LL | let ref _moved @ S { f } = S { f: String::from("foo") }; | ^^^^^^^^^^ - value partially moved here | | | value borrowed here after partial move | = note: partial move occurs because value has type `String`, which does not implement the `Copy` trait help: borrow this binding in the pattern to avoid moving the value | LL | let ref _moved @ S { ref f } = S { f: String::from("foo") }; | +++ error: aborting due to 8 previous errors For more information about this error, try `rustc --explain E0382`.