1 // run-pass
2 #![allow(dead_code)]
3 struct S<T, U = u16> {
4     a: T,
5     b: U,
6 }
7 
8 trait Tr {
9     type A;
10 }
11 impl Tr for u8 {
12     type A = S<u8, u16>;
13 }
14 
f<T: Tr<A = S<u8>>>()15 fn f<T: Tr<A = S<u8>>>() {
16     let s = T::A { a: 0, b: 1 };
17     match s {
18         T::A { a, b } => {
19             assert_eq!(a, 0);
20             assert_eq!(b, 1);
21         }
22     }
23 }
24 
main()25 fn main() {
26     f::<u8>();
27 }
28