I had a look at the new operator overloading and I can't seem to find opAssign in opover.c.
http://www.digitalmars.com/d/2.0/operatoroverloading.html#Assignment


Ok, found it. I guess writing "if (!s && !s_r && op != TOKequal && op != TOKnotequal && op != TOKassign)" in opover.c:458
should prevent this bug: http://d.puremagic.com/issues/show_bug.cgi?id=3935

The only question is if this is intended.

Should opAssign stay or should it be opBinary!("=")?


Furthermore, where are the checks that are suggested by http://www.digitalmars.com/d/2.0/operatoroverloading.html#Assignment

The following compiles even though opAssign(T) isn't allowed "where T is the same type as the aggregate type A"
struct Foo {
        void opAssign(Foo f)
        {
        }
}
void main() {
    Foo f;
    f = f;
}

The only implemented check I could find is the following from AssignExp::semantic, line 8931 but this one is only for classes.


    else if (t1->ty == Tclass)
    {   // Disallow assignment operator overloads for same type
        if (!e2->type->implicitConvTo(e1->type))
        {
            Expression *e = op_overload(sc);
            if (e)
                return e;
        }
    }
_______________________________________________
dmd-internals mailing list
[email protected]
http://lists.puremagic.com/mailman/listinfo/dmd-internals

Reply via email to