Inheriting from an interface twice

Denis Koroskin 2korden at gmail.com
Fri Oct 1 01:32:24 PDT 2010


I always thought that in D interface inheritance is always virtual, i.e.  
you only inherit it once even if it is specified twice (or more) within  
hierarchy.

Until I got an assertion on the following test (reduced from a real  
example):

interface Foo
{
}

class Bar : Foo
{
}

class Baz : Bar, Foo
{
}

void main()
{
	Baz baz = new Baz();
	Bar bar = baz;
	
	Foo foo1 = bar;
	Foo foo2 = baz;
	
	assert(foo1 is foo2);
}


foo1 and foo2 have the same type and point to the same object. Yet they  
have different addresses. Is it a bug, or a feature?

The test above passes for C# (http://ideone.com/xK5Mu) and C++  
(http://ideone.com/MnnL8 virtual inheritance used, fails otherwise, of  
course).


More information about the Digitalmars-d mailing list