digitalmars.D.bugs - [Issue 4702] New: Long Postfix not working with cross-module overloading
- d-bugmail puremagic.com (35/35) Aug 21 2010 http://d.puremagic.com/issues/show_bug.cgi?id=4702
- d-bugmail puremagic.com (30/30) Dec 30 2010 http://d.puremagic.com/issues/show_bug.cgi?id=4702
- d-bugmail puremagic.com (17/17) Jan 21 2012 http://d.puremagic.com/issues/show_bug.cgi?id=4702
- d-bugmail puremagic.com (22/22) Oct 27 2012 http://d.puremagic.com/issues/show_bug.cgi?id=4702
- d-bugmail puremagic.com (7/8) Oct 27 2012 http://d.puremagic.com/issues/show_bug.cgi?id=4702
http://d.puremagic.com/issues/show_bug.cgi?id=4702 Summary: Long Postfix not working with cross-module overloading Product: D Version: D2 Platform: Other OS/Version: Windows Status: NEW Severity: normal Priority: P2 Component: DMD AssignedTo: nobody puremagic.com ReportedBy: andrej.mitrovich gmail.com 08:37:39 PDT --- widget.d: void fun(int x) { } widget.d: void fun(int x) { } main.d: import widget; import io; void main() { long y = 10L; fun(y); // fine, no errors, goes to io.fun writeln(typeid(10L)); // writes long fun(10L); // error: io.fun at io.d(4) conflicts with widget.fun at widget.d(4) } -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Aug 21 2010
http://d.puremagic.com/issues/show_bug.cgi?id=4702 14:12:29 PST --- OOPS! That example code is completely wrong, please diregard it. This is the proper one which should work but doesn't: main.d: import std.stdio : writeln; import foo; // void fun(int x) import bar; // void fun(long x) void main() { auto y = 10L; fun(y); // ok, goes to bar.fun writeln(typeid(10L)); // writes long fun(10L); // error: bar.fun conflicts with foo.fun } foo.d: void fun(int x) { } bar.d: void fun(long x) { } This only happens with literals and when the two fun methods are defined in separate modules. If the fun methods are defined directly in main(), there's no error. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Dec 30 2010
http://d.puremagic.com/issues/show_bug.cgi?id=4702 17:53:28 PST --- I think what's going on is DMD figures out the literal can fit into an int and does the optimization where it converts it into an int behind the scenes. Proof is in the pudding: import std.stdio; import foo; import bar; void main() { long x; fun(cast(long)2147483648); // ok, int.max is 2147483647, overflows to long fun(cast(long)2147483647); // error, no overflow and literal stored as int } -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Jan 21 2012
http://d.puremagic.com/issues/show_bug.cgi?id=4702 Andrej Mitrovic <andrej.mitrovich gmail.com> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED Resolution| |INVALID 11:02:29 PDT --- The problem is there are two overload sets and they're not explicitly merged. The fix is: import foo; // void fun(int x) import bar; // void fun(long x) alias foo.fun fun; // added alias bar.fun fun; // added void main() { auto y = 10L; fun(y); // ok, goes to bar.fun fun(10L); // error: bar.fun conflicts with foo.fun } -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Oct 27 2012
http://d.puremagic.com/issues/show_bug.cgi?id=4702 11:03:02 PDT ---fun(10L); // error: bar.fun conflicts with foo.funDisregard the comment it's a leftover from OP sample, the code will work now. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Oct 27 2012