This fragment compiles fine:
protocol P {
func instanceReq(_ v: String) -> Int
func instanceReq(_ v: String?) -> Int?
static func staticReq(_ v: String) -> Int
static func staticReq(_ v: String?) -> Int?
}
struct S: P {
func instanceReq(_ v: String) -> Int { 0 }
func instanceReq(_ v: String?) -> Int? { instanceReq("") } // ✅
func instanceNotReq(_ v: String) -> Int { 0 }
func instanceNotReq(_ v: String?) -> Int? { instanceNotReq("") } // ✅
static func staticReq(_ v: String) -> Int { 0 }
static func staticReq(_ v: String?) -> Int? { staticReq("") } // ✅
static func staticNotReq(_ v: String) -> Int { 0 }
static func staticNotReq(_ v: String?) -> Int? { staticNotReq("") } // ✅
}
it also compiles fine if S is a class or an enum. However it gives an error if it is a protocol extension:
extension P {
func instanceReq(_ v: String) -> Int { 0 }
func instanceReq(_ v: String?) -> Int? { instanceReq("") } // ❌ Ambiguous use
func instanceNotReq(_ v: String) -> Int { 0 }
func instanceNotReq(_ v: String?) -> Int? { instanceNotReq("") } // ❌ Ambiguous use
static func staticReq(_ v: String) -> Int { 0 }
static func staticReq(_ v: String?) -> Int? { staticReq("") } // ✅
static func staticNotReq(_ v: String) -> Int { 0 }
static func staticNotReq(_ v: String?) -> Int? { staticNotReq("") } // ✅
}
is this a bug?