Protocol Witness Matching Mini-Manifesto

Moving the discussion from the other thread into here:

So either the default argument feature from above cannot be reduced to zero arguments or I still don‘t understand something here.

protocol P {
  static func foo() -> Self
}

struct S: P {
  static func foo(_ s: S = .init()) -> S { s } // #1 is this okay?
}

enum E: P {
  case foo(Void = ()) // if #1 is okay then this should be okay as well
}