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