Reply to Jesse,

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.


The only other option (beside saying this is correct) would be to make it illegal to add a new function to an overload set after the set is used. That could get very tricky to implement.


Reply via email to