http://d.puremagic.com/issues/show_bug.cgi?id=2999
Summary: Return-type overloading should be error Product: D Version: 2.030 Platform: PC OS/Version: All Status: NEW Keywords: accepts-invalid Severity: normal Priority: P2 Component: DMD AssignedTo: bugzi...@digitalmars.com ReportedBy: rsi...@gmail.com This code compiles without error: -------------------- short foo() { return 1; } int foo() { return 2; } -------------------- Yes, the above example is not so serious because if you try to use foo, the compiler will spit an error. But it will be serious when function overriding is involved: -------------------- interface I { short foo(); } interface J { int foo(); } class C : I, J { override short foo() { return 1; } override int foo() { return 2; } } void main() { I i = new C; J j = new C; writeln(i.foo); writeln(j.foo); } -------------------- The compiler silently accepts this code. And the result is: -------------------- 1 10289153 -------------------- Note that the lower 16-bit of 10289153 is 1. Thus, the short foo() is invoked. If the declaration order of C.foo is reversed, the result becomes -------------------- 2 2 -------------------- In this case, int foo() is invoked. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------