I've just fixed UFCS for the experimental type function branch

Paul Backus snarwin at gmail.com
Thu Sep 10 21:08:31 UTC 2020


On Thursday, 10 September 2020 at 18:44:46 UTC, Meta wrote:
>
> It looks like it depends on the order of fields:
>
> struct S
> {
>     int a;
>     mixin("int b;"); //No error
>     enum size = S.sizeof;
> }
>
> Ideally `enum size = S.sizeof` could be delayed until after all 
> mixins are "evaluated" (is that during one of the semantic 
> phases? I don't know much about how DMD actually works), but I 
> imagine that would take some major re-architecting. Really 
> though, is it even necessary to be able to "freeze" a type like 
> this when evaluating type functions?

Sometimes there is no way to avoid "evaluating" one part of the 
program before another. For example:

struct S
{
     int a;
     static if (S.sizeof < 8) {
         int b;
     }
}

Because of the way static if works, the compiler *must* do 
semantic analysis on S.sizeof before it does semantic analysis on 
the declaration of b. There is no way to avoid it by re-ordering 
or deferring the analysis of certain declarations.


More information about the Digitalmars-d mailing list