protocol P { func a() -> Self } struct S : P { func a() -> S { fatalError() } } func main() { var p: P = S() }