www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - Compiler bug..?

reply "Simen Haugen" <simen norstat.no> writes:
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? 
Oct 22 2007
parent reply Regan Heath <regan netmail.co.nz> writes:
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
Oct 22 2007
next sibling parent reply "Simen Haugen" <simen norstat.no> writes:
"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
Oct 22 2007
parent Regan Heath <regan netmail.co.nz> writes:
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
Oct 22 2007
prev sibling parent reply davidl <davidl 126.com> writes:
在 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/
Oct 22 2007
parent "Simen Haugen" <simen norstat.no> writes:
"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.
Oct 23 2007