| //@ build-pass | |
| pub fn works() { | |
| let array/*: [_; _]*/ = default_array(); | |
| let _: [_; 4] = array; | |
| Foo::foo(&array); | |
| } | |
| pub fn didnt_work() { | |
| let array/*: [_; _]*/ = default_array(); | |
| Foo::foo(&array); | |
| let _: [_; 4] = array; | |
| } | |
| trait Foo { | |
| fn foo(&self) {} | |
| } | |
| impl Foo for [i32; 4] {} | |
| impl Foo for [i64; 8] {} | |
| // Only needed because `[_; _]` is not valid type syntax. | |
| fn default_array<T, const N: usize>() -> [T; N] | |
| where | |
| [T; N]: Default, | |
| { | |
| Default::default() | |
| } | |
| fn main() { | |
| works(); | |
| didnt_work(); | |
| } |