| pub trait Element<S> { | |
| type Array; | |
| } | |
| impl<T> Element<()> for T { | |
| type Array = T; | |
| } | |
| impl<T: Element<S>, S> Element<[S; 3]> for T { | |
| type Array = [T::Array; 3]; | |
| } | |
| trait Foo<I> | |
| where | |
| u8: Element<I>, | |
| { | |
| fn foo(self, x: <u8 as Element<I>>::Array); | |
| } | |
| impl<I> Foo<I> for u16 | |
| where | |
| u8: Element<I>, | |
| { | |
| fn foo(self, _: <u8 as Element<I>>::Array) {} | |
| } | |
| fn main() { | |
| let b: [u8; 3] = [0u8; 3]; | |
| 0u16.foo(b); //~ ERROR type annotations needed | |
| //~^ ERROR type annotations needed | |
| //<u16 as Foo<[(); 3]>>::foo(0u16, b); | |
| } |