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