alias and __VERSION__ condition doesn't play well

vit vit at vit.vit
Tue Jan 18 06:19:26 UTC 2022


On Tuesday, 18 January 2022 at 04:42:45 UTC, frame wrote:
> At the very top of my module I have this declaration:
>
> ```d
> static if (__VERSION__ >= 2098)
> {
>     alias Foo = TypeA;
> }
> else
> {
>     alias Foo = TypeB;
> }
> ```
>
> No problem inside the module itself but this doesn't work when 
> imported from another module:
> Error: undefined identifier `Foo`
>
> While this workaround works:
>
> ```d
> template getAlias()
> {
>     static if (__VERSION__ >= 2098)
>     {
>         alias getAlias = TypeA;
>     }
>     else
>     {
>         alias getAlias = TypeB;
>     }
> }
> alias Foo = getAlias!();
> ```
>
> Is there a reason for that?

static ifs and mixins need semantic analysis to expand, but when 
you import module, the semantic analysis doesn't run yet (depends 
on order).

Beter workaround is:
```d
import std.traits : Select;

alias Foo  = Select!(__VERSION__ >= 2098, TypeA, TypeB);
```


More information about the Digitalmars-d-learn mailing list