digitalmars.D.bugs - [Issue 533] New: Cannot use int from tuple as an index
- d-bugmail puremagic.com (29/29) Nov 16 2006 http://d.puremagic.com/issues/show_bug.cgi?id=533
- d-bugmail puremagic.com (8/8) Nov 26 2006 http://d.puremagic.com/issues/show_bug.cgi?id=533
- d-bugmail puremagic.com (6/6) Dec 17 2006 http://d.puremagic.com/issues/show_bug.cgi?id=533
- d-bugmail puremagic.com (19/19) Jun 27 2008 http://d.puremagic.com/issues/show_bug.cgi?id=533
- d-bugmail puremagic.com (7/21) Jun 28 2008 http://d.puremagic.com/issues/show_bug.cgi?id=533
http://d.puremagic.com/issues/show_bug.cgi?id=533 Summary: Cannot use int from tuple as an index Product: D Version: 0.174 Platform: All OS/Version: All Status: NEW Severity: normal Priority: P2 Component: DMD AssignedTo: bugzilla digitalmars.com ReportedBy: wbaxter gmail.com An int in a tuple cannot be used as an index for a tuple, even if it is completely determined at compile time. --------------------------- // This doesn't work template Nth(TList...) { const int N = TList[0]; auto Nth = TList[N]; } void main() { writefln( Nth!(1,"hi","there") ); } ------------- In this case the sample can be fixed by using: template Nth(int N, TList...) { But that's not always the case. --
Nov 16 2006
http://d.puremagic.com/issues/show_bug.cgi?id=533 As of DMD 0.175 this can also be worked around by eliminating the N, and indexing directly with TList[0]: template Nth(TList...) { auto Nth = TList[TList[0]]; } --
Nov 26 2006
http://d.puremagic.com/issues/show_bug.cgi?id=533 Just retested with 0.177. This behavior is still there. (I thought there was a chance it might have been fixed by the last two rounds of bug slaughters.) --
Dec 17 2006
http://d.puremagic.com/issues/show_bug.cgi?id=533 bugzilla digitalmars.com changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED Resolution| |WORKSFORME The example is broken because in order for the 'promotion' of the member Nth, it must be the only member. The following works: import std.stdio; template Nth(TList...) { const int N = TList[0]; auto Nth = TList[N]; } void main() { writefln( Nth!(1,"hi","there").Nth ); } --
Jun 27 2008
http://d.puremagic.com/issues/show_bug.cgi?id=533The example is broken because in order for the 'promotion' of the member Nth, it must be the only member. The following works: import std.stdio; template Nth(TList...) { const int N = TList[0]; auto Nth = TList[N]; } void main() { writefln( Nth!(1,"hi","there").Nth ); }Good point. Or use the version I posted above without the intermediate variable. I blame the misunderstanding on my youth at the time of reporting this one. :-) --
Jun 28 2008