Why version() ?

Chris Nicholson-Sauls ibisbasenji at gmail.com
Tue Feb 10 11:32:54 PST 2009


Tim M wrote:
> On Wed, 11 Feb 2009 00:28:21 +1300, bobef <bobef at nospam-abv.bg> wrote:
> 
>> I was thinking... what is the point of version() ? It is so 
>> inflexible. There is no even version(!...). Why not "static 
>> if(version(DMD))" or static if(is(version == DMD))?
>>
>> Regards,
>> bobef
> 
> You could try something like this:
> 
> 
> module Vers;
> 
> template vers(char[] V)
> {
>       mixin("version(" ~ V ~ ")
>       {
>             const bool vers = true;
>       }
>       else
>       {
>             const bool vers = false;
>       }");
> }
> 
> int main()
> {
>       static if(vers!("X86_64"))
>       {
>             long a;
>             pragma(msg, "64 bit");
>       }
>       else
>       {
>             int a;
>             pragma(msg, "32 bit");
>       }
> 
>       a = 2;
> 
>       return a;
> }
> 

You beat me to it.  I actually use this a little here and there.  But 
honestly, I find that the cases where I just want 
'version(X){...}else{...}' far outweigh the cases where I want 'X && Y' 
or the like.  While it is technically a hack/workaround, I've been 
perfectly happy with it.

Now, what would be nice, would be if version() could appear in places it 
currently can't, following a few rules.  In mid-statement, for example, 
so long as its body is a complete expression.  And then the same for 
mixin expressions.  Might be daydreaming too much, there.

Imagine though...

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

Add to that a deep shorthand syntax a la:

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

Okay, I'll come down from the clouds now.

-- Chris Nicholson-Sauls



More information about the Digitalmars-d mailing list