Using std.format required std.string?
anonymous via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Sun Mar 15 12:16:52 PDT 2015
On Sunday, 15 March 2015 at 18:03:55 UTC, Robert M. Münch wrote:
> On 2015-03-15 17:36:24 +0000, Robert M. Münch said:
>> Is there a way to use "version(...)" to have code sections
>> depending on compiler version? Something like:
>>
>> version(dmd >= 2.067) or version(dmd < 2.067)?
>
> Answerting myself:
>
> static if (__traits(compiles, version_minor < 67))
> import std.string; // format() for versions < 2.0.67
> else
> import std.format; // format() for versions >= 2.0.67
That doesn't do what you want.
You need to `import std.compiler;` for version_minor. Without
that import, `__traits(compiles, version_minor < 67)` is always
false, because version_minor is undefined.
And if you add the import, `__traits(compiles, version_minor <
67)` is always true, no matter the value of version_minor. Use
`static if(version_minor < 67)` instead.
Also, if you check version_minor, it's probably a good idea to
check (or static assert) version_major, too.
Finally, there's need for this (yet). `std.string.format` is fine
with 2.067, too. So unless you're going for (far) future
compatiblity, you can just do `import std.string;`.
More information about the Digitalmars-d-learn
mailing list