Optional properties get unwanted default values in memberwise initializers

@tera, you'll get the behavior you are after with this change in the definition of S:

struct S {
    var a: Int
    var b: Optional<Int> // Instead of Int?
    var c: Int? = nil
}
let x = S(a: 0, b: nil, c: nil)
let z = S(a: 0, b: nil)
let y = S(a: 0, c: nil) // error: Missing argument for parameter 'b' in call
let w = S(a: 0) // error: Missing argument for parameter 'b' in call

Surprised? You're not alone. This topic is indeed currently discussed in Pre-pitch: remove the implicit initialization of Optional variables