Thread overview
[Issue 3759] New: Implementing two interfaces with same final function is accepted
Jan 31, 2010
Ary Borenszweig
Feb 01, 2010
Mike Parker
Feb 06, 2011
Brad Roberts
Jan 31, 2012
yebblies
January 31, 2010
http://d.puremagic.com/issues/show_bug.cgi?id=3759

           Summary: Implementing two interfaces with same final function
                    is accepted
           Product: D
           Version: 2.040
          Platform: x86_64
        OS/Version: Windows
            Status: NEW
          Severity: normal
          Priority: P2
         Component: DMD
        AssignedTo: nobody@puremagic.com
        ReportedBy: ary@esperanto.org.ar


--- Comment #0 from Ary Borenszweig <ary@esperanto.org.ar> 2010-01-31 10:05:31 PST ---
import std.stdio;

interface One {

  final void foo() {
    writefln("One");
  }

}

interface Two {

  final void foo() {
    writefln("Two");
  }

}

class X : One, Two {
}

class Y : Two, One {
}

void main() {
  X x = new X();
  x.foo(); // prints "One"
  Y y = new Y();
  y.foo(); // prints "Two"
}
---

This might lead to bugs. I think this should be a compile-time error. I don't know how to solve this issue if you do want to implement both interfaces.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
February 01, 2010
http://d.puremagic.com/issues/show_bug.cgi?id=3759


Mike Parker <aldacron@gmail.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |aldacron@gmail.com


--- Comment #1 from Mike Parker <aldacron@gmail.com> 2010-01-31 17:14:48 PST ---
According to TDPL, the solution *should* be the following:

---
void main() {
  X x = new X();
  x.foo(); // prints "One"
  x.Two.foo(); // should print "Two"
  Y y = new Y();
  y.foo(); // prints "Two"
  y.One.foo(); // should print "One"
}
---

But this gives the following errors:

ifinal.d(28): Error: no property 'Two' for type 'ifinal.X'
Error: no property 'foo' for type 'int'
ifinal.d(28): Error: function expected before (), not __error of type int
ifinal.d(31): Error: no property 'One' for type 'ifinal.Y'
Error: no property 'foo' for type 'int'
ifinal.d(31): Error: function expected before (), not __error of type int

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
February 06, 2011
http://d.puremagic.com/issues/show_bug.cgi?id=3759


Brad Roberts <braddr@puremagic.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Platform|x86_64                      |x86


--- Comment #2 from Brad Roberts <braddr@puremagic.com> 2011-02-06 15:39:07 PST ---
Mass migration of bugs marked as x86-64 to just x86.  The platform run on isn't what's relevant, it's if the app is a 32 or 64 bit app.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
January 31, 2012
http://d.puremagic.com/issues/show_bug.cgi?id=3759


yebblies <yebblies@gmail.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
                 CC|                            |yebblies@gmail.com
           Platform|x86                         |All
            Version|2.040                       |D2
         Resolution|                            |DUPLICATE
         OS/Version|Windows                     |All


--- Comment #3 from yebblies <yebblies@gmail.com> 2012-01-31 13:34:12 EST ---
*** This issue has been marked as a duplicate of issue 4647 ***

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------