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.