__traits(compiles, ...) returns true for syntactic garbage and for semantically incorrect code
mist
none at none.none
Mon Dec 17 02:59:37 PST 2012
Argument is supposed to be not a string but plain D code. And it
is pretty logical that string literal is a valid compiling D
code, as well as an existing variable name.
On Monday, 17 December 2012 at 10:42:38 UTC, Pavel wrote:
> Either I do not understand the work of this feature or it is an
> obvious bug:
>
> import std.stdio;
> import std.conv;
>
> void main()
> {
> enum string expr = "DMD compiles this garbage ... iiiii - \"
> #### $$$";
>
> enum bool bTest = __traits(compiles, expr);
> enum bool bTest2 = __traits(compiles, "int i = q{};");
>
> writeln("bTest: " ~ to!string(bTest));
> writeln("bTest2: " ~ to!string(bTest2));
> }
>
> Produces (tested with dmd32 2.060 and dmd32 2.059):
> bTest: true
> bTest2: true
>
> (http://dpaste.dzfl.pl/5d338ab3)
>
> Could you please somebody explain this?
>
> Thanks,
> Pavel
More information about the Digitalmars-d
mailing list