const "override" and interfaces

gzp galap at freemail.hu
Fri Oct 9 09:58:42 PDT 2009


I've tried to implement a const, non-const accessor for a class similar to c++:
   a& at(int) const;
   a at(i);

With class it works as expected
class C1 
{
	int a;
	const int foo() { return 2; }
	ref int foo() 	{ return a; }
} 


Than I wanted to do it using interfaces:
interface I1 {
	const int foo();
	ref int foo();
}
	  	  	  
class C2 : I1
{
	int a;
	const int foo() { return a; }
	ref int foo() 	{ return 2; }
}   

but it won't compile (the interface itself compiles but i could not write any class implementing the interface I1)

When inheriting interfaces do code won't even compile:
interface IConst {
	const int foo();
}

interface IMutable : IConst {
	ref int foo();
} 


The compiler error i get (using dmd 2.032 on windows):
t2.d(71): Error: function t.IMutable.foo of type ref int() overrides but is not
covariant with t.IConst.foo of type const int()
t2.d(90): Error: function t.C2.foo of type ref int() overrides but is not covariant with t.I1.foo of type const int()

Is it a normal behavior, a bug or i've missed something ?

Thanks




More information about the Digitalmars-d mailing list