Avatar
↓の useP が specialize されてもインライン展開されても P が表示されるのか。まさに「同名同型のoverloadになるimpl(罠)」だ・・・。 protocol P { func foo() -> String } extension P { func foo() -> String { return "P" } } class C: P { } class SC: C { func foo() -> String { return "SC" } } func useP<T: P>(_ p: T) { print(p.foo()) } func useSC(_ sc: SC) { print(sc.foo()) } let sc: SC = SC() useP(sc) // P useSC(sc) // SC