On Monday, 17 December 2012 at 10:59:38 UTC, mist wrote:
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

Thanks for the clarification - now everything is clear!

Reply via email to