digitalmars.D.bugs - [Issue 5155] New: AssociativeArray.get does not compile when opBinary("in") is defined.
- d-bugmail puremagic.com (56/56) Nov 02 2010 http://d.puremagic.com/issues/show_bug.cgi?id=5155
http://d.puremagic.com/issues/show_bug.cgi?id=5155 Summary: AssociativeArray.get does not compile when opBinary("in") is defined. Product: D Version: D2 Platform: Other OS/Version: Windows Status: NEW Keywords: patch Severity: normal Priority: P2 Component: Phobos AssignedTo: nobody puremagic.com ReportedBy: sandford jhu.edu If an appropriate "in" opBinary function is defined, AA.get calls that instead of the actual built-in "in" operator. As I can see no reason, type wise, for this to be so, this may be rooted in a DMD error. Also, complex templates can cause an ICE: I found this bug after tracing down an instance of Issue 5079 (glue.c, 1103) due to a std.variant unit test instantiating This[This]. Using DMD 2.050: In Object.di: Line 366: - void* _aaIn(void* p, TypeInfo keyti); + void* _aaIn(void* p, TypeInfo keyti,...); Lines 413: - auto p = key in *cast(Value[Key]*)(&p); + auto ptr = cast(Value*) _aaIn(p,typeid(Key),key); In Object_.d: Line 2218: - void* _aaIn(void* p, TypeInfo keyti); + void* _aaIn(void* p, TypeInfo keyti,...); Line 2296: - auto p = key in *cast(Value[Key]*)(&p); + auto ptr = cast(Value*) _aaIn(p,typeid(Key),key); Test case (doesn't ICE): struct Bug { int x; Bug opBinary(string op, T)(T rhs) { return Bug; } } void main(string[] args) { Bug key1 = Bug(1); Bug key2 = Bug(2); Bug value1 = Bug(3); Bug value2 = Bug(4); Bug[Bug] bug = [key1:value1]; assert( bug.get(key1,value2).x == value1.x); assert( bug.get(key2,value2).x == value2.x); int[string] vals; vals["x"] = 1; assert( vals.get("x", 0) == 1 ); assert( vals.get("y", 0) == 0 ); } -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Nov 02 2010