import std.random;

auto test(int n)
{
    if (n >= 0 && n < 33)
    {
        return int(0);
    }
    else if (n >= 33 && n < 66)
    {
        return float(0);
    }
    else
    {
        return real(0);
    }
}

void main()
{
    auto n = uniform(0, 100);
    auto res = test(n);
    //Prints "float"
    pragma(msg, typeof(res));
}

I expected the result to be real. Why is the return type of test inferred as float instead? I would expect it to choose real, as both int and float can be converted to real without precision loss, but the opposite is not true. Is this a bug?

Reply via email to