| A value was moved out of a non-copy fixed-size array. |
| |
| Erroneous code example: |
| |
| ```compile_fail,E0508 |
| struct NonCopy; |
| |
| fn main() { |
| let array = [NonCopy; 1]; |
| let _value = array[0]; // error: cannot move out of type `[NonCopy; 1]`, |
| // a non-copy fixed-size array |
| } |
| ``` |
| |
| The first element was moved out of the array, but this is not |
| possible because `NonCopy` does not implement the `Copy` trait. |
| |
| Consider borrowing the element instead of moving it: |
| |
| ``` |
| struct NonCopy; |
| |
| fn main() { |
| let array = [NonCopy; 1]; |
| let _value = &array[0]; // Borrowing is allowed, unlike moving. |
| } |
| ``` |
| |
| Alternatively, if your type implements `Clone` and you need to own the value, |
| consider borrowing and then cloning: |
| |
| ``` |
| #[derive(Clone)] |
| struct NonCopy; |
| |
| fn main() { |
| let array = [NonCopy; 1]; |
| // Now you can clone the array element. |
| let _value = array[0].clone(); |
| } |
| ``` |
| |
| If you really want to move the value out, you can use a destructuring array |
| pattern to move it: |
| |
| ``` |
| struct NonCopy; |
| |
| fn main() { |
| let array = [NonCopy; 1]; |
| // Destructuring the array |
| let [_value] = array; |
| } |
| ``` |