Thread overview |
---|
February 22, 2018 Function overloading between modules | ||||
---|---|---|---|---|
| ||||
Is this expected behaviour? bar.d --- void foo(string s) { } app.d --- import std.stdio; import bar; void foo(int x) { } void main() { foo("hi"); }; === Error: function app.foo (int x) is not callable using argument types (string) |
February 22, 2018 Re: Function overloading between modules | ||||
---|---|---|---|---|
| ||||
Posted in reply to JN | JN wrote:
> Is this expected behaviour?
>
> bar.d
> ---
> void foo(string s)
> {
> }
>
>
> app.d
> ---
>
> import std.stdio;
> import bar;
>
> void foo(int x)
> {
> }
>
> void main()
> {
> foo("hi");
> };
>
>
> ===
> Error: function app.foo (int x) is not callable using argument types (string)
yes. this is done so unqualified won't silently "steal" your functions. this can cause some unexpected (and hard to find) bugs.
if you want it to work, you can either do qualified import
import bar : foo;
or manuall bring overloads from `bar` with
alias foo = bar.foo;
|
February 22, 2018 Re: Function overloading between modules | ||||
---|---|---|---|---|
| ||||
Posted in reply to ketmar | On Thursday, 22 February 2018 at 21:19:12 UTC, ketmar wrote:
>
> yes. this is done so unqualified won't silently "steal" your functions. this can cause some unexpected (and hard to find) bugs.
>
> if you want it to work, you can either do qualified import
>
> import bar : foo;
>
> or manuall bring overloads from `bar` with
>
> alias foo = bar.foo;
I see, how about this one:
bar.d
---
void foo(T)(T t)
{
}
app.d
---
import std.stdio;
import bar;
void foo(T : string)(T t)
{
}
void main()
{
foo(123);
};
same idea?
|
February 22, 2018 Re: Function overloading between modules | ||||
---|---|---|---|---|
| ||||
Posted in reply to JN | JN wrote:
> same idea?
absolutely the same. non-qualified imports (be it template, or function) won't take part in overload resoultion.
|
February 23, 2018 Re: Function overloading between modules | ||||
---|---|---|---|---|
| ||||
Posted in reply to JN | On Thursday, 22 February 2018 at 21:12:45 UTC, JN wrote: > Is this expected behaviour? > > bar.d > --- > void foo(string s) > { > } > > > app.d > --- > > import std.stdio; > import bar; > > void foo(int x) > { > } > > void main() > { > foo("hi"); > }; > > > === > Error: function app.foo (int x) is not callable using argument types (string) https://dlang.org/articles/hijack.html |
Copyright © 1999-2021 by the D Language Foundation