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