struct A<T1, T2> {} typealias B<T> = A<Int, T> typealias D = A<Int, Int> protocol C {} extension A: C where T1 == Int {}