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
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
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








d-bugmail puremagic.com