Thread overview | ||||||||
---|---|---|---|---|---|---|---|---|
|
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..? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Simen Haugen | 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..? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Regan Heath | "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..? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Simen Haugen | 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..? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Regan Heath | 在 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..? | ||||
---|---|---|---|---|
| ||||
Posted in reply to davidl | "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. |
Copyright © 1999-2021 by the D Language Foundation