Overloading an imported function
Shriramana Sharma via Digitalmars-d
digitalmars-d at puremagic.com
Fri Oct 23 09:15:39 PDT 2015
Forwarding a thread from the D.learn forum:
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?
Kagamin wrote:
> http://dlang.org/hijack.html
Shriramana Sharma wrote:
> Thanks people, but even as per the rules:
>
> 1. Perform overload resolution independently on each overload set
> 2. If there is no match in any overload set, then error
> 3. If there is a match in exactly one overload set, then go with that
> 4. If there is a match in more than one overload set, then error
>
> Here there is only one round(real, int) i.e. in the current module and
> only one round(real) i.e. in the imported module, so as per rule 3, there
> should be a clear resolution.
>
> So why the conflict then?
Clearly when the signature of the overload in the current module is
different from that in the imported module, there should be no hijacking and
thus no measures needed to prevent it. Yet I am not able to compile.
Should I file a bug? Please advise.
--
Shriramana Sharma, Penguin #395953
More information about the Digitalmars-d
mailing list