I don't think this is a bug but...

Jeremie Pelletier jeremiep at gmail.com
Fri Aug 14 14:08:54 PDT 2009


Jesse Phillips Wrote:

> Benjamin Shropshire Wrote:
> 
> > The same expression twice gets different results
> > 
> > code:
> > 
> > import std.stdio;
> > 
> > bool Fn(float i){ return true; }
> > const bool b = Fn(cast(int)0);
> > 
> > static if(b) bool Fn(int i){ return false; }
> > const bool c = Fn(cast(int)0);
> > 
> > void main()
> > {
> >    writef("%s\n", b);
> >    writef("%s\n", c);
> > }
> > 
> > output:
> > 
> > true
> > false
> > 
> 
> The value of 'b' is assigned during compile time, but since it is indirectly called the behavior seems odd. I suppose it is something to be aware of, but it is behaving correctly.

Exactly, when 'b' is declared, Fn(int) isn't declared yet, as it depends on b being true, int is implicitly convertible to float so it matches the first declaration. When 'c' is declared both functions are available and the second declaration is chosen.



More information about the Digitalmars-d mailing list