[Issue 10567] New: Typeinfo.compare has unreasonable signature requirements on opCmp
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Sun Jul 7 21:25:26 PDT 2013
http://d.puremagic.com/issues/show_bug.cgi?id=10567
Summary: Typeinfo.compare has unreasonable signature
requirements on opCmp
Product: D
Version: D2
Platform: All
OS/Version: All
Status: NEW
Severity: normal
Priority: P2
Component: DMD
AssignedTo: nobody at puremagic.com
ReportedBy: hsteoh at quickfur.ath.cx
--- Comment #0 from hsteoh at quickfur.ath.cx 2013-07-07 21:25:25 PDT ---
CODE:
------------snip-----------
import std.stdio;
struct S {
int[] data;
int opCmp(const S s) const {
return (data < s.data) ? -1 : (data == s.data) ? 0 : 1;
}
}
void main() {
auto s = S([1,2,3]);
auto t = S([1,2,3]);
writeln(s==t);
writeln(typeid(s).compare(&s, &t)); // prints 16
}
------------snip-----------
Here, we defined opCmp to compare the array wrapped in S, and == correctly
calls the custom opCmp to return true.
However, typeid(S) fails to call the custom opCmp; it appears to fall back to
the default implementation of opCmp, which does a bitwise compare of S. This is
a bug, because if the signature of opCmp is changed to:
int opCmp(ref const S s) const { ... }
then typeid(S) correctly calls the custom opCmp instead.
However, requiring ref in the argument is unnecessarily restrictive. If ==
works correctly without requiring a ref const argument, then why should
typeid(S).compare require a ref const argument?
This bug is blocking issue #8435 and issue #10118.
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
More information about the Digitalmars-d-bugs
mailing list