www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Function overloading between modules

reply JN <666total wp.pl> writes:
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)
Feb 22 2018
next sibling parent reply ketmar <ketmar ketmar.no-ip.org> writes:
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;
Feb 22 2018
parent reply JN <666total wp.pl> writes:
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?
Feb 22 2018
parent ketmar <ketmar ketmar.no-ip.org> writes:
JN wrote:

 same idea?
absolutely the same. non-qualified imports (be it template, or function) won't take part in overload resoultion.
Feb 22 2018
prev sibling parent bauss <jj_1337 live.dk> writes:
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
Feb 23 2018