compilers w/ different language features: version block

Seb seb at wilzba.ch
Sun Feb 25 03:05:10 UTC 2018


On Sunday, 25 February 2018 at 01:19:02 UTC, Seb wrote:
> On Sunday, 25 February 2018 at 00:42:20 UTC, Seb wrote:
>> On Sunday, 25 February 2018 at 00:36:16 UTC, kdevel wrote:
>>>    [...]
>>
>> Are you looking for something like this?
>>
>> ---
>> static if (__traits(compiles, () { static foreach (i; [0]){} 
>> }))
>>     version = supportsStaticForeach;
>>
>> void main()
>> {
>>     version(supportsStaticForeach) {
>>        pragma(msg, "Yay, your compiler is new enough.");
>>     }
>> }
>> ---
>>
>>
>> https://run.dlang.io/is/PZN5Nv
>>
>>> [...]
>>
>> Don't support GDC (or only GDC-master)?
>
> Ah sorry I replied too fast. Yeah `mixin` is the only way to 
> workaround this if you really, really have to support GDC.

BTW there's one trick that might work on your setup - conditional 
imports:

---
static if (__traits(compiles, () { static foreach (i; [0]){} }))
     version = supportsStaticForeach;

void main()
{
     version(supportsStaticForeach) {
        import compat.staticforeach;
     } else {
        import compat.no_staticforeach;
     }
}
---

With rdmd this should work out of the box - with DUB you would 
need to tweak the source paths. DUB allows all options to be 
compiler-specific, so e.g. something like this for a dub.sdl 
could work:

---
sourcePaths-dmd "compat/staticforeach"
sourcePaths-ldc "compat/staticforeach"
sourcePaths-gdc "compat/no_staticforeach"
---


More information about the Digitalmars-d-learn mailing list