www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - Multiple interface implementation doesn't seem to work quite right.

reply Andy Friesen <andy ikagames.com> writes:
test.d:

     interface I1
     {
         void i1();
     }

     interface I2
     {
         void i2();
     }

     interface I3 : I1, I2
     {
     }

     class C1 : I3
     {
         void i1() { printf("i1\n"); }
         void i2() { printf("i2\n"); }
     }

     void f1(I1 i1, I2 i2)
     {
         i1.i1();
         i2.i2();
     }

     int main()
     {
         I3 i3 = new C1();
         f1(i3, i3);
         return 0;
     }

Yields the output:

i1
i1

  -- andy
May 30 2004
next sibling parent "Walter" <newshound digitalmars.com> writes:
Argh. This is a particularly nasty one. Anyhow, it's fixed now :-)
Jun 01 2004
prev sibling parent "Kris" <someidiot earthlink.dot.dot.dot.net> writes:
I ran into more diamond-shaped interface problems last night, when combined
with the "multiple derivation" shown below. The vTable gets seriously borked
in such cases; it's exasperating :-(


"Andy Friesen" <andy ikagames.com> wrote in message
news:c9ctoa$10k$1 digitaldaemon.com...
 test.d:

      interface I1
      {
          void i1();
      }

      interface I2
      {
          void i2();
      }

      interface I3 : I1, I2
      {
      }

      class C1 : I3
      {
          void i1() { printf("i1\n"); }
          void i2() { printf("i2\n"); }
      }

      void f1(I1 i1, I2 i2)
      {
          i1.i1();
          i2.i2();
      }

      int main()
      {
          I3 i3 = new C1();
          f1(i3, i3);
          return 0;
      }

 Yields the output:

 i1
 i1

   -- andy
Jun 26 2004