| // Test that we infer the expected type of a pattern to an array of the given length. | |
| #![allow(unused_variables)] | |
| use std::array::TryFromSliceError; | |
| use std::convert::TryInto; | |
| struct Zeroes; | |
| impl Into<[usize; 2]> for Zeroes { | |
| fn into(self) -> [usize; 2] { | |
| [0; 2] | |
| } | |
| } | |
| impl Into<[usize; 3]> for Zeroes { | |
| fn into(self) -> [usize; 3] { | |
| [0; 3] | |
| } | |
| } | |
| impl Into<[usize; 4]> for Zeroes { | |
| fn into(self) -> [usize; 4] { | |
| [0; 4] | |
| } | |
| } | |
| fn zeroes_into() { | |
| let [a, b, c] = Zeroes.into(); | |
| let [d, e, f]: [_; 3] = Zeroes.into(); | |
| } | |
| fn array_try_from(x: &[usize]) -> Result<usize, TryFromSliceError> { | |
| let [a, b] = x.try_into()?; | |
| Ok(a + b) | |
| } | |
| fn destructuring_assignment() { | |
| let a: i32; | |
| let b; | |
| [a, b] = Default::default(); | |
| } | |
| fn test_nested_array() { | |
| let a: [_; 3]; | |
| let b; | |
| //~^ ERROR type annotations needed | |
| [a, b] = Default::default(); | |
| } | |
| fn test_nested_array_type_hint() { | |
| let a: [_; 3]; | |
| let b; | |
| [a, b] = Default::default(); | |
| let _: i32 = b[1]; | |
| } | |
| fn test_working_nested_array() { | |
| let a: i32; | |
| [[a, _, _], _, _] = Default::default(); | |
| } | |
| struct Foo<T>([T; 2]); | |
| impl<T: Default + Copy> Default for Foo<T> { | |
| fn default() -> Self { | |
| Foo([Default::default(); 2]) | |
| } | |
| } | |
| fn field_array() { | |
| let a: i32; | |
| let b; | |
| Foo([a, b]) = Default::default(); | |
| } | |
| fn main() {} |