[dmd-internals] where is opAssign?
Trass3r
mrmocool at gmx.de
Fri Mar 12 10:58:09 PST 2010
> 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;
}
}
More information about the dmd-internals
mailing list