June 05, 2013 nice library workaround for lack of version boolean operations, would be nice to have in phobos | ||||
---|---|---|---|---|
| ||||
Attachments:
| Just figured out we can do this. Could this be added to phobos? ---- //in std.compiler (or std.traits?) template Version(alias V){ mixin(` version(`~V~`){ enum Version=true; } else enum Version=false; `); } ---- usage: ---- import std.compiler; void main(){ static if(!Version!"assert") writeln("not assert"); static if(Version!"OSX" && !Version!"D_NoBoundsChecks" || !Version!"assert") { writeln("special code"); } } ---- without this, we have to resort to something ugly, not dry, error prone: ---- //pollutes namespace, as we can't define version=temp inside a function version(OSX) { version(D_NoBoundsChecks) { } else { version=temp;//need to make sure temp doesn't clash with other version identifiers / symbols } } else { version(assert) { } else { version=temp;//NOT DRY: repeats temp } } void main() { version(assert) { } else { writeln("not assert"); } version(temp) // here we use it { writeln("special code"); } } ---- Likewise, with debug: ---- template Debug(alias V){ import std.traits:isIntegral; static if(!isIntegral!(typeof(V))){ mixin(` debug(`~V~`){ enum Debug=true; } else enum Debug=false; `); } else{ import std.conv:to; mixin(` debug(`~V.to!string~`){ enum Debug=true; } else enum Debug=false; `); /+ //NOTE:maybe a dmd bug but this didn't work debug(V) enum Debug=true; else enum Debug=false; +/ } } ---- usage: ---- void main(){ import std.compiler; static if(Debug!2){ writeln("debug>=2"); } static if(Debug!"foo"){ writeln("debug=foo"); } } ---- |
June 05, 2013 Re: nice library workaround for lack of version boolean operations, would be nice to have in phobos | ||||
---|---|---|---|---|
| ||||
Posted in reply to Timothee Cour | Timothee Cour:
> Just figured out we can do this. Could this be added to phobos?
I don't think it will be added to Phobos because that feature was not desired in the language...
Bye,
bearophile
|
Copyright © 1999-2021 by the D Language Foundation