Supporting that would require some fancier control-flow-sensitive analysis than we current do for definite initialization, since we'd have to ensure that a self =
assignment only occurred in a context where it was known that Self == ConcreteClass
. Maybe if we a type-refining cast feature like like what @grego proposes here we could confine self-assignments in a designated initializer to if <Self == C>
condition blocks.