Hi Satoshi, Protocols do not conform to themselves. Only concrete types can conform to protocols in the current implementation of Swift.
Slava > On May 2, 2017, at 1:57 AM, Satoshi Nakagawa via swift-users > <swift-users@swift.org> wrote: > > Hi, > > I got a build error "Generic parameter 'T' could not be inferred" for the > following code. > > Can anyone explain why we can't use a protocol to infer the generic type T? > > class Emitter { > func emit<T: Emittable>() -> T { > ... > } > } > > protocol Emittable {} > protocol Subemittable: Emitable {} > > class ConcreteEmittable: Subemittable {} > > func testCode() { > let emitter = Emitter() > > // Error: Generic parameter 'T' could not be inferred > let _: Emittable = emitter.emit() > > // Error: Generic parameter 'T' could not be inferred > let _: Subemittable = emitter.emit() > > // This works > let _: ConcreteEmittable = emitter.emit() > } > > Thanks, > Satoshi > > _______________________________________________ > swift-users mailing list > swift-users@swift.org > https://lists.swift.org/mailman/listinfo/swift-users _______________________________________________ swift-users mailing list swift-users@swift.org https://lists.swift.org/mailman/listinfo/swift-users