List defined version specifications

Basile B. via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Wed Oct 19 04:36:12 PDT 2016


On Wednesday, 19 October 2016 at 10:25:51 UTC, Lodovico Giaretta 
wrote:
> Hi!
>
> A simple question: is there a way to list all defined version 
> specifications?
>
> Something like:
>
>     pragma(msg, __traits(allVersions));
>
> Example output (DMD on Ubuntu x64, release build):
>
>     [all, D_InlineAsm_X86_64, X86_64, Posix, linux, 
> DigitalMars, CRuntime_Glibc, D_Version2, LittleEndian, D_LP64, 
> D_HardFloat, D_SIMD, D_NoBoundsChecks, ELFv2]
>
> Thank you in advance.

No, but they can be generated with a string mixin:

static __gshared string[] definedVersions;

enum predefinedVersions = [
	"ARM_Thumb","assert","ELFv1","ELFv2",
	"HPPA","HPPA64","Posix","unittest",
	"Win32","Win64","Windows","X86","X86_64"
];

alias addDefinedVer = (ver) => `version(`~ ver ~`) 
definedVersions~="`
     ~ ver ~ `";`;

string genDefinedVersions()
{
     import std.meta: aliasSeqOf;
     import std.range: iota;
     string result;
     foreach(i; aliasSeqOf!(iota(0, predefinedVersions.length)))
         result ~= addDefinedVer(predefinedVersions[i]);
     return result;
}

void main()
{
     mixin(genDefinedVersions);
}

The problem being that they are not available at compile time.


More information about the Digitalmars-d-learn mailing list