| // RUN: %target-typecheck-verify-swift -swift-version 3 |
| // RUN: %target-typecheck-verify-swift -swift-version 4 |
| |
| class C { } |
| |
| protocol P { |
| associatedtype AssocP : C // expected-note{{protocol requires nested type 'AssocP'; do you want to add it?}} |
| associatedtype AssocA : AnyObject // expected-note{{protocol requires nested type 'AssocA'; do you want to add it?}} |
| } |
| |
| struct X : P { // expected-error{{type 'X' does not conform to protocol 'P'}} |
| typealias AssocP = Int // expected-note{{possibly intended match 'X.AssocP' (aka 'Int') does not inherit from 'C'}} |
| typealias AssocA = Int // expected-note{{possibly intended match 'X.AssocA' (aka 'Int') does not conform to 'AnyObject'}} |
| } |
| |
| // SR-5166 |
| protocol FooType { |
| associatedtype BarType |
| |
| func foo(bar: BarType) |
| func foo(action: (BarType) -> Void) |
| } |
| |
| protocol Bar {} |
| |
| class Foo: FooType { |
| typealias BarType = Bar |
| |
| func foo(bar: Bar) { |
| } |
| |
| func foo(action: (Bar) -> Void) { |
| } |
| } |