protocol A { } protocol B: Self.X { associatedtype X: A } class C: A { } class D: A, B { typealias X = C } D.X.self D.self D()