digitalmars.D.bugs - [Issue 7449] New: Algebraic's operator[] is incorrect
- d-bugmail puremagic.com (27/27) Feb 05 2012 http://d.puremagic.com/issues/show_bug.cgi?id=7449
- d-bugmail puremagic.com (33/33) Feb 05 2012 http://d.puremagic.com/issues/show_bug.cgi?id=7449
http://d.puremagic.com/issues/show_bug.cgi?id=7449 Summary: Algebraic's operator[] is incorrect Product: D Version: D2 Platform: All OS/Version: All Status: NEW Severity: normal Priority: P2 Component: DMD AssignedTo: nobody puremagic.com ReportedBy: andrei metalanguage.com --- Comment #0 from Andrei Alexandrescu <andrei metalanguage.com> 2012-02-05 20:26:58 PST --- import std.variant; import std.stdio; void main() { int[string] o; o["foo"] = 42; Variant a = o; Algebraic!(int[string], string) b = o; writeln(a["foo"]); writeln(b["foo"]); } The last line fails at runtime with an exception. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Feb 05 2012
http://d.puremagic.com/issues/show_bug.cgi?id=7449 --- Comment #1 from Andrei Alexandrescu <andrei metalanguage.com> 2012-02-05 20:27:44 PST --- Hans Fugal identified this blames to revision 3a1f9109, this snippet: -313,20 +364,23 private: case OpID.index: auto me = cast(A*) pStore; - static if (isArray!(A)) + // Added allowed!(...) prompted by a bug report by Chris + // Nicholson-Sauls. + static if (isArray!(A) && allowed!(typeof(A.init[0]))) { // array type; input and output are the same VariantN auto result = cast(VariantN*) parm; size_t index = result.convertsTo!(int) ? result.get!(int) : result.get!(size_t); *result = (*me)[index]; - break; + break; } - else static if (isAssociativeArray!(A)) + else static if (isAssociativeArray!(A) + && allowed!(typeof(A.init.values[0]))) { auto result = cast(VariantN*) parm; *result = (*me)[result.get!(typeof(A.keys[0]))]; - break; + break; } else { -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Feb 05 2012