// RUN: not %target-swift-frontend %s -typecheck protocol MyIteratorProtocol { typealias Element mutating func next() -> Element? } protocol MySequence { typealias Iterator : MyIteratorProtocol func makeIterator() -> Iterator } protocol MyCollectionDefaults : MySequence {} extension MyCollectionDefaults { final func makeIterator() -> DefaultIterator { return DefaultIterator() } } protocol MyCollection : MySequence, MyCollectionDefaults {} struct DefaultIterator : MyIteratorProtocol { mutating func next() -> C.Iterator.Element { fatalError("") } } struct FooIteratorWrapper { init(_ base: Base) {} } func f(c: C) { FooIteratorWrapper(c.makeIterator()) }