//@ check-pass #![allow(unused_variables)] #![feature(generic_arg_infer)] struct Zeroes; impl Into<&'static [usize; 3]> for Zeroes { fn into(self) -> &'static [usize; 3] { &[0; 3] } } impl Into<[usize; 3]> for Zeroes { fn into(self) -> [usize; 3] { [0; 3] } } fn main() { let [a, b, c] = Zeroes.into(); let [d, e, f] = >::into(Zeroes); let &[g, h, i] = Zeroes.into(); let [j, k, l]: [usize; _] = Zeroes.into(); let [m, n, o]: &[usize; _] = Zeroes.into(); // check the binding mode of these patterns: let _: &[usize] = &[a, b, c, g, h, i, j, k, l]; let _: &[&usize] = &[d, e, f, m, n, o]; }