[Issue 12359] implicit overload merging with selective imports should be removed
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Sun Apr 6 21:40:16 PDT 2014
https://d.puremagic.com/issues/show_bug.cgi?id=12359
--- Comment #10 from Kenji Hara <k.hara.pg at gmail.com> 2014-04-06 21:40:13 PDT ---
The negative effect of the implicit alias is that it makes selective imports
and basic imports unexchangeable. For example:
module a;
auto foo(int[] ) { return 2; }
module b;
import a; // [A]
auto foo(long[] ) { return 1; }
void main()
{
assert(foo([1,2]) == 1);
}
At the line [A], the basic import makes b.foo visible, but it is hidden by
b.foo. Therefore foo([1,2]) in main will call b.foo properly.
Next, what's will occur if you replace `import a;` to `import a : foo`?
import a : foo; // [A2]
auto foo(long[] ) { return 1; }
The selected a.foo is *implicitly* added in the overload set of b.foo, then
foo([1,2]) will match a.foo(int[] ) more better than b.foo(long[] ), and the
assertion in main will fail in runtime.
I think this is much non-intuitive behavior. No one would expect the silent
code breaking in module b.
--
Configure issuemail: https://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
More information about the Digitalmars-d-bugs
mailing list