__traits(compiles) + mixin

simendsjo simendsjo at gmail.com
Tue Mar 5 00:10:09 PST 2013


On Tuesday, 5 March 2013 at 08:04:12 UTC, Andrej Mitrovic wrote:
> On Tuesday, 5 March 2013 at 07:53:15 UTC, cal wrote:
>> I'm confused about this:
>>
>> import std.conv;
>>
>> void main()
>> {
>>    enum s = "`1`.to!int;";
>>    enum c = __traits(compiles, mixin("{auto a = new 
>> "~s~";}")); // line 1
>>    mixin("auto a = "~s~";");
>> // line 2
>> }
>>
>> This does not compile, giving errors about instantiating 
>> std.conv.to!(int).to!(string). If I switch the order of lines 
>> 1 and 2 it compiles. Is this a bug or something I don't 
>> understand about __traits(compiles)?
>
> You can't test declarations inside of __traits(compiles), only 
> expressions. It's in the docs: 
> http://dlang.org/traits.html#compiles

The errormessage is rather cryptic though.. Makes it look like 
there is something with conv rather than compiles.


More information about the Digitalmars-d-learn mailing list