The interface's 'in' contract passes if it makes a virtual function call

Ali Çehreli via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Tue Nov 4 12:50:11 PST 2014


On 11/04/2014 12:41 PM, Steven Schveighoffer wrote:

 > Yep. I debugged it. It's calling toHash instead.

Yeah, you were spot on. :) I did a different experiment. I added a 
number of functions to the interface (before virtualCheck()) and 
implementations to the class:

interface I
{
// ...

     bool a();
     bool b();
     bool c();
     bool d();

     bool virtualCheck();
}


class C : I
{
// ...

     bool a() { return false; }
     bool b() { return false; }
     bool c() { return false; }
     bool d() { return false; }
}

Adding only a() calls C's precondition unconditionally (because it 
pushes virtualCheck() to the next slot in vtbl.)

Adding a() and b() has the same effect.

Adding a(), b(), and c() prints I.foo.in indefinitely. :)

Finally, adding a(), b(), c(), and d() seems to bring the expected 
behavior. :)

Ali



More information about the Digitalmars-d-learn mailing list