On Wednesday, 21 October 2015 at 12:05:27 UTC, Shriramana Sharma wrote:
import std.math;
real round(real val, int prec)
{
    real pow = 10 ^^ prec;
    return round(val * pow) / pow;
}

Trying to compile this I get:

foo.d(5): Error: function foo.round (real val, int prec) is not callable using argument types (real)

When I've imported std.math which contains round(real), why is the compiler complaining about not being able to call the overload function defined in *this* module?

I don't see anything in http://dlang.org/module.html that says I cannot define an overload of an imported function. Did I miss something?

My guess is that <filename>.round shadows math.round. But you can get desired behavior by moving declaration of math.round inside scope of <filename>.round. This compiles:

real round(real val, int prec)
{
    import std.math;
    real pow = 10 ^^ prec;
    return round(val * pow) / pow;
}


Reply via email to