| 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; | |
| } | |
| ``` |