public protocol P: C {} public class C: P { public init() {} public func funcInClass() {} } public protocol GenericP: GenericC {} public class GenericC { public init() {} public func funcInClass() {} } extension GenericC: GenericP where T == Int {}