alias and __VERSION__ condition doesn't play well

vit vit at vit.vit
Wed Jan 19 06:22:40 UTC 2022


On Wednesday, 19 January 2022 at 04:15:54 UTC, Steven 
Schveighoffer wrote:
> On 1/18/22 7:19 AM, vit wrote:
>> On Tuesday, 18 January 2022 at 12:05:38 UTC, Paul Backus wrote:
>>> 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`
>>>
>>> Works for me: https://run.dlang.io/is/XZlvQ8
>> 
>> It works until you have cyclic dependencies:
>> 
>> https://run.dlang.io/is/wDDcK5
>
> Has nothing to do with `__VERSION__`:
>
> https://run.dlang.io/is/pa8lDy
>
> That does seem like a bug. And it's LDC specific, dmd seems to 
> work fine.
>
> -Steve

In dmd is order of module compilation different.
Same problem:

https://run.dlang.io/is/NkySAw

This is not only problem with imports:

```d
class Foo{
     Bar.B b;

     static if(true)
     	alias F = int;

}

class Bar{
     Foo.F f;     //Error: no property `F` for type `onlineapp.Foo`

     static if(true)
     	alias B = int;

}

void main(){}
```




More information about the Digitalmars-d-learn mailing list