It gets even better with constants and works in static asserts too:


module Vers;

template vers(char[] V)
{
      mixin("version(" ~ V ~ ")
      {
            const bool vers = true;
      }
      else
      {
            const bool vers = false;
      }");
}

const DigitalMars = "DigitalMars";
const X86 = "X86";
const X86_64 = "X86_64";
const Windows = "Windows";
const Win32 = "Win32";
const Win64 = "Win64";
const LittleEndian = "LittleEndian";
const BigEndian = "BigEndian";
const D_Coverage = "D_Coverage";
const D_Ddoc = "D_Ddoc";
const D_InlineAsm_X86 = "D_InlineAsm_X86";
const D_InlineAsm_X86_64 = "D_InlineAsm_X86_64";
const D_LP64 = "D_LP64";
const D_PIC = "D_PIC";
const none = "none";
const all = "all";

int main()
{
      const bool forceLong = false;
      static if(vers!(X86_64) || forceLong)
      {
            long a;
            pragma(msg, "64 bit");
      }
      else
      {
            int a;
            pragma(msg, "32 bit");
      }

static assert(vers!(LittleEndian) || vers!(BigEndian), "You are a weird endian");



      a = 2;

      return a;
}

Reply via email to