On Thursday, 10 March 2016 at 22:57:41 UTC, Jonathan M Davis wrote:
IMHO, at this point, inheritance is the only reason they're worth
having in the language. [snip]


I created a simple example to understand your point about contracts only really mattering for inheritance, but my example is giving assertion errors for the inherited class the same way as the base class. What would I need to do for this issue to become apparent?

class A
{
        int a;
        
        this(int x)
        {
                a = x;
        }
        
        int foo(int x)
        {
                assert(x != 0);
                scope(exit) assert((this.a - x) != 0);

                return this.a - x;
        }
}

class B : A
{
        this()
        {
                super(4);
        }

}

void main()
{
        import std.stdio : writeln;
        
        auto a = new A(2);
        //writeln(a.foo(0)); //causes assertion failure
        //writeln(a.foo(2)); //causes assertion failure
        
        auto b = new B();
        //writeln(b.foo(0)); //causes assertion failure
        //writeln(b.foo(4)); //causes assertion failure
}

Reply via email to