// check-pass trait Baz { type Quaks; } impl Baz for u8 { type Quaks = [u16; 3]; } trait Bar {} impl Bar for [u16; 3] {} impl Bar for [[u16; 3]; 2] {} trait Foo where [::Quaks; 2]: Bar, ::Quaks: Bar, { } struct FooImpl; impl Foo for FooImpl {} fn f(_: impl Foo) {} fn main() { f(FooImpl) }