| // RUN: %target-typecheck-verify-swift |
| |
| struct X { } |
| |
| // Simple default definition for associated types. |
| protocol P1 { |
| associatedtype AssocType1 = Int |
| } |
| |
| extension X : P1 { } |
| |
| var i: X.AssocType1 = 17 |
| |
| // Dependent default definition for associated types |
| protocol P2 { |
| associatedtype AssocType2 = Self |
| } |
| |
| extension X : P2 { } |
| var xAssoc2: X.AssocType2 = X() |
| |
| // Dependent default definition for associated types that doesn't meet |
| // requirements. |
| protocol P3 { |
| associatedtype AssocType3 : P1 = Self // expected-note{{default type 'X2' for associated type 'AssocType3' (from protocol 'P3') does not conform to 'P1'}} |
| } |
| |
| extension X : P3 { } // okay |
| |
| struct X2 : P3 { } // expected-error{{type 'X2' does not conform to protocol 'P3'}} |
| |
| protocol P4 { |
| associatedtype AssocType4 : AnyObject = Int // expected-note{{default type 'Int' for associated type 'AssocType4' (from protocol 'P4') does not conform to 'AnyObject'}} |
| } |
| |
| struct X4 : P4 {} // expected-error{{type 'X4' does not conform to protocol 'P4'}} |