protocol P1 {} protocol P2 : P1 {} class Animal { func g<X: P1>() -> X { fatalError() } } class Cat: Animal { override func g<X: P2>() -> X { fatalError() } // Overridden method 'g' has generic signature <X where X : P2> which is incompatible with base method's generic signature <X where X : P1>; expected generic signature to be <X where X : P1> }