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);
```