On Tuesday, 11 September 2012 at 18:32:47 UTC, Ali Çehreli wrote:
Here is a reduced code:
I guess it may be reduced to:
auto foo(bool val)
{
if (val)
return 42;
else
return 1.5;
}
void main()
{
assert(foo(true) == 42); // assertion failure
assert(foo(false) == 1.5);
}
The return type of foo() is double. (It's float in your code
but it doesn't matter.)
I think this is a bug. I guess that 'return 42' is still
placing an int onto the program stack instead of a float. A
workarounds are returning to!float(this._num.ivalue).
But I think this is a compiler bug.
Ali
I think it is UB rather than a bug. The spec says that return
types must match exactly. AFAIK auto is a feature to infer return
type, not to magically adjust to multiple incompatible types.