http://d.puremagic.com/issues/show_bug.cgi?id=2061
[EMAIL PROTECTED] changed: What |Removed |Added ---------------------------------------------------------------------------- Severity|critical |blocker ------- Comment #2 from [EMAIL PROTECTED] 2008-12-09 11:43 ------- Bumped into this again, with a simpler inheritance tree. extern(C) int printf(char*,...); interface A { char a(); } interface B { char b(); } interface C : A, B { char c(); } interface D { char d(); } interface E : C, D { char e(); } class Foo : E { char a() { return('a'); } char b() { return('b'); } char c() { return('c'); } char d() { return('d'); } char e() { return('e'); } } void main() { auto foo = new Foo; E e = foo; D d = foo; C c = foo; B b = foo; A a = foo; printf("Foo: %c %c %c %c %c\n", foo.a, foo.b, foo.c, foo.d, foo.e); printf("A: %c\n", a.a); printf("B: %c\n", b.b); printf("C: %c %c %c\n", c.a, c.b, c.c); printf("D: %c\n", d.d); printf("E: %c %c %c %c %c\n", e.a, e.b, e.c, e.d, e.e); } outputs: Foo: a b c d e A: a B: b C: a b c D: d E: a a c d e Note the incorrect E line. If I swap around E's base interfaces, so E now becomes: interface E : D, C { char e(); } Now the E line is still wrong: Foo: a b c d e A: a B: b C: a b c D: d E: d b c d e Marking as a blocker. I don't know how to work around this. --