Bug 5979 – bigint equality comparison with rvalue

Status
RESOLVED
Resolution
DUPLICATE
Severity
normal
Priority
P2
Component
phobos
Product
D
Version
D2
Platform
All
OS
Linux
Creation time
2011-05-11T09:46:00Z
Last change time
2011-05-11T10:40:22Z
Assigned to
nobody
Creator
dpx.infinity

Comments

Comment #0 by dpx.infinity — 2011-05-11T09:46:20Z
Code import std.bigint; BigInt foo() { return BigInt(128); } void main() { BigInt bar = BigInt(128); assert(foo() == bar); assert(bar == foo()); // *** HERE } does not compile with the following error on the marked line: test.d(10): Error: foo() is not an lvalue It seems that is because of the ref parameter of the opEquals method in the BigInt structure. Obviously it is not needed for the parameter to be a reference in this case, though it could be thought as a possible performance tweak (I don't know for certain about the correctnes of this though).
Comment #1 by kennytm — 2011-05-11T10:40:22Z
Unfortunately an opEquals for a struct must take the signature of (ref const S s). See http://d-programming-language.org/operatoroverloading.html#equals. The rvalue problem here is a specialization of bug 5609. Allowing struct to have any signature is a duplicate of issue 3659. *** This issue has been marked as a duplicate of issue 5609 ***