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