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

Reply via email to