You can't add a defaulted function argument to a protocol-satisfying method?!

Test.extension.foo(a: Bool = true) isn't considered a witness for Test.foo(). You'll get the same error if you did:

struct S: Test {} // Type 'S' does not conform to protocol 'Test'

although I think it would be reasonable to allow functions with default arguments to satisfy protocol requirements (as I mentioned in the Protocol Witness Matching Manifesto).

2 Likes