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.

Reply via email to