Wall of text incoming.
First. I'd like to remind to several important properties of D structs:
* They have both compile-time initialization and run-time one. First
is T.init, second is T(...). Needing both is a perfectly valid need
from the programmer, especially with generic code in question.
* structs always have constructors. So this snippet is wrong:
> struct SIn fact, S has constructor. All structs have constructor with
> {
> immutable int c = 123; // This should be static, compiler issues error
> // No constructor
> }
parameter count that matches member field count. And judging only by S
definition you can't ever possibly say if "c" will be the same in all
S instances or not.