www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 2999] New: Return-type overloading should be error

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: bugzilla digitalmars.com
        ReportedBy: rsinfu 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: -------
May 17 2009