Allow this() { } for structs

Q. Schroll at
Mon Nov 2 19:53:31 UTC 2020

In metaprogramming, I find myself writing stuff like

     struct S(Ts...)
         this(Ts args)
             static foreach (T; Ts) { /*...*/ }

and get compiler errors for the case that `Ts` is empty. So I 
need an actually useless

     static if (Ts.length != 0)
     this(Ts args) { /*...*/ }

Can we just allow this() when the body is essentially empty (that 
is: after rewrites and lowerings contains no statements)? The 
compiler would happily accept the code and pretend this() { } 
isn't there. It would even reduce confusion because S() is legal 
as an expression, but this() isn't as a constructor. With that, 
this() is legal as a constructor, but it must not do anything.

More information about the Digitalmars-d mailing list