| //@ check-pass | |
| struct Foo<T, U> | |
| where | |
| (T, U): Trait, | |
| { | |
| f: <(T, U) as Trait>::Assoc, | |
| } | |
| trait Trait { | |
| type Assoc: ?Sized; | |
| } | |
| struct Count<const N: usize>; | |
| impl<const N: usize> Trait for (i32, Count<N>) { | |
| type Assoc = [(); N]; | |
| } | |
| impl<'a> Trait for (u32, ()) { | |
| type Assoc = [()]; | |
| } | |
| // Test that we can unsize several trait params in creative ways. | |
| fn unsize<const N: usize>(x: &Foo<i32, Count<N>>) -> &Foo<u32, ()> { | |
| x | |
| } | |
| fn main() {} |