It's a longstanding bug, but a bug we can't fix easily, and one whose fix would probably break user code. It's tracked by SR-3908 <https://bugs.swift.org/browse/SR-3908>. (The description's a little different but it's the same underlying issue.)
Jordan > On Apr 19, 2017, at 22:13, Howard Lovatt via swift-users > <swift-users@swift.org> wrote: > > Hi, > > If I have the *same* extension in two *different* modules, ModuleA and > ModuleB, and ModuleC uses both modules, but in *seperate* files, then there > is still ambiguity about which extension to call: > > ModuleA > A.swift > public protocol P { > func m() -> String > } > extension Int: P { > public func m() -> String { return "AP.m" } > } > ModuleB > B.swift > public protocol P { > func m() -> String > } > extension Int: P { > public func m() -> String { return "BP.m" } > } > ModuleC > A.swift > import ModuleA > func am(_ i: Int) -> String { return i.m() } > B.swift > import ModuleB > func bm(_ i: Int) -> String { return i.m() } > main.swift > let i = 0 > print(am(i)) > print(bm(i)) > > Gives the following errors when built: > > sunzero-ln:ModuleC lov080$ swift build > Fetching /Users/lov080/Google Drive/Swift/Examples/Example Module > Clashes/ModuleA > Fetching /Users/lov080/Google Drive/Swift/Examples/Example Module > Clashes/ModuleB > Cloning /Users/lov080/Google Drive/Swift/Examples/Example Module > Clashes/ModuleA > Resolving /Users/lov080/Google Drive/Swift/Examples/Example Module > Clashes/ModuleA at 1.0.0 > Cloning /Users/lov080/Google Drive/Swift/Examples/Example Module > Clashes/ModuleB > Resolving /Users/lov080/Google Drive/Swift/Examples/Example Module > Clashes/ModuleB at 1.0.0 > Compile Swift Module 'ModuleB' (1 sources) > Compile Swift Module 'ModuleA' (1 sources) > Compile Swift Module 'ModuleC' (3 sources) > /Users/lov080/Google Drive/Swift/Examples/Example Module > Clashes/ModuleC/Sources/B.swift:3:38: error: ambiguous use of 'm()' > func bm(_ i: Int) -> String { return i.m() } > ^ > ModuleA.Int:2:17: note: found this candidate > public func m() -> String > ^ > ModuleB.Int:2:17: note: found this candidate > public func m() -> String > ^ > /Users/lov080/Google Drive/Swift/Examples/Example Module > Clashes/ModuleC/Sources/A.swift:3:38: error: ambiguous use of 'm()' > func am(_ i: Int) -> String { return i.m() } > ^ > ModuleA.Int:2:17: note: found this candidate > public func m() -> String > ^ > ModuleB.Int:2:17: note: found this candidate > public func m() -> String > ^ > <unknown>:0: error: build had 1 command failures > error: exit(1): > /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift-build-tool > -f /Users/lov080/Google\ Drive/Swift/Examples/Example\ Module\ > Clashes/ModuleC/.build/debug.yaml > > Is this the expected behaviour or a bug? > > Thanks in advance for any help, > > -- Howard. > _______________________________________________ > 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