I would like to require any implementation of an interface to override

import std.stdio, std.cstream;

interface A
{
        void opOpAssign(string op : "^")(int c);
}

class B : A
{
        int x;
        void opOpAssign(string op : "+")(int c) { x = c; }
        // Note it uses +
}

void main(string[] argv)
{
        
        B b = new B;

        b ^= 3;
        writeln(b.x);
        din.getc();
}

but the compiler gives an error that is 3 and b are incompatible types.. I'm not sure if ^= is overloaded in some default way or what but there is no error about b not implementing the property OpAssign.

If I use override for opOpassign in B, dmd says it can't override a non-virtual function. This is a bit strange as it would seem it would break inheritance.


The following code produces an undefined symbol... I could make A.opOpAssign final but then inheritance because a casualty.

import std.stdio, std.cstream;

interface A
{
        void opOpAssign(string op)(int c) if (op == "^");
}

class B : A
{
        int x;
        void opOpAssign(string op : "^")(int c) { x = c; }
}

class C : B
{
        void opOpAssign(string op : "^")(int c) { x = c+2; }
}

void main(string[] argv)
{
        
        B b = new B;
        C c = new C;
        A a = new C;

        b ^= 3;
        writeln(b.x);
        c ^= 3;
        writeln(c.x);
        a ^= 3;

        writeln((cast(C)a).x);
        din.getc();
}


Let me guess... this is a feature of D?

Reply via email to