__traits(compiles, ...) returns true for syntactic garbage and for semantically incorrect code

Pavel proger79 at gmail.com
Mon Dec 17 03:18:40 PST 2012


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!


More information about the Digitalmars-d mailing list