View mode: basic / threaded / horizontal-split · Log in · Help
October 22, 2007
Compiler bug..?
static if( 1 ) {
   int var;
}

static if( 1 ) {
   float var; // Error, var already defined. As expected.
}


But if we do this....

static if(is(int T == int)) {
   writefln("T: ", typeid(T)); // T: int
}

static if(is(float T == float)) {
   writefln("T: ", typeid(T)); // T: int.... Where's my float?
}

Shouldn't this be a compiler error, or at least a warning?
October 22, 2007
Re: Compiler bug..?
Simen Haugen wrote:
> static if( 1 ) {
>     int var;
> }
> 
> static if( 1 ) {
>     float var; // Error, var already defined. As expected.
> }
> 
> 
> But if we do this....
> 
> static if(is(int T == int)) {
>     writefln("T: ", typeid(T)); // T: int
> }
> 
> static if(is(float T == float)) {
>     writefln("T: ", typeid(T)); // T: int.... Where's my float?
> }
> 
> Shouldn't this be a compiler error, or at least a warning? 

Which version of DMD are you using?

With 2.005 I get an error of "Error: declaration T is already defined" 
on the 2nd static if line.

Regan
October 22, 2007
Re: Compiler bug..?
"Regan Heath" <regan@netmail.co.nz> wrote in message 
news:ffi0ne$vb1$2@digitalmars.com...
> Which version of DMD are you using?
>
> With 2.005 I get an error of "Error: declaration T is already defined" on 
> the 2nd static if line.

1.022
October 22, 2007
Re: Compiler bug..?
Simen Haugen wrote:
> "Regan Heath" <regan@netmail.co.nz> wrote in message 
> news:ffi0ne$vb1$2@digitalmars.com...
>> Which version of DMD are you using?
>>
>> With 2.005 I get an error of "Error: declaration T is already defined" on 
>> the 2nd static if line.
> 
> 1.022 

In that case it looks like a bug fix which made it into 2.0 and not 1.0.

I would search bugzilla and see if there is a bug report for this 
(presumably closed) and re-open it or whatever is appropriate (I'm not 
sure what bugzilla netiquette applies here)

Regan
October 23, 2007
Re: Compiler bug..?
在 Mon, 22 Oct 2007 19:14:54 +0800,Regan Heath <regan@netmail.co.nz> 写道:

> Simen Haugen wrote:
>> static if( 1 ) {
>>     int var;
>> }
>>  static if( 1 ) {
>>     float var; // Error, var already defined. As expected.
>> }
>>   But if we do this....
>>  static if(is(int T == int)) {
>>     writefln("T: ", typeid(T)); // T: int
>> }
>>  static if(is(float T == float)) {
>>     writefln("T: ", typeid(T)); // T: int.... Where's my float?
>> }
>>  Shouldn't this be a compiler error, or at least a warning?
>
> Which version of DMD are you using?
>
> With 2.005 I get an error of "Error: declaration T is already defined"  
> on the 2nd static if line.
>
> Regan

umm, shouldn't T only take effect in the static if scope?
so they shouldn't conflict, and should print float?


-- 
使用 Opera 革命性的电子邮件客户程序: http://www.opera.com/mail/
October 23, 2007
Re: Compiler bug..?
"davidl" <davidl@126.com> wrote in message 
news:op.t0mz9xh9eb62bo@9568023b6e5d4f4__aad...
>? Mon, 22 Oct 2007 19:14:54 +0800,Regan Heath <regan@netmail.co.nz> ??:
>
>> Simen Haugen wrote:
>>> static if( 1 ) {
>>>     int var;
>>> }
>>>  static if( 1 ) {
>>>     float var; // Error, var already defined. As expected.
>>> }
>>>   But if we do this....
>>>  static if(is(int T == int)) {
>>>     writefln("T: ", typeid(T)); // T: int
>>> }
>>>  static if(is(float T == float)) {
>>>     writefln("T: ", typeid(T)); // T: int.... Where's my float?
>>> }
>>>  Shouldn't this be a compiler error, or at least a warning?
>>
>> Which version of DMD are you using?
>>
>> With 2.005 I get an error of "Error: declaration T is already defined" 
>> on the 2nd static if line.
>>
>> Regan
>
> umm, shouldn't T only take effect in the static if scope?
> so they shouldn't conflict, and should print float?
>

No, static if's doesn't introduce a new scope.
Top | Discussion index | About this forum | D home