digitalmars.D.bugs - [Issue 9452] New: Type-safe variadic parameter of enums does not work at compile time
- d-bugmail puremagic.com (52/52) Feb 05 2013 http://d.puremagic.com/issues/show_bug.cgi?id=9452
http://d.puremagic.com/issues/show_bug.cgi?id=9452 Summary: Type-safe variadic parameter of enums does not work at compile time Product: D Version: unspecified Platform: All OS/Version: All Status: NEW Severity: normal Priority: P2 Component: DMD AssignedTo: nobody puremagic.com ReportedBy: jmdavisProg gmx.com PST --- This code fails to compile: enum Mix { col, } string getString()(Mix[] mixArgs...) { return "{}"; } void main() { enum a = getString(Mix.col); } and gives this error q.d(15): Error: Array length mismatch assigning [0..0] to [0..1] q.d(15): called from here: getString((Mix[1LU] __arrayArg862 = cast(Mix)0; , __arrayArg862[0LU] = cast(Mix)0 , cast(Mix[])__arrayArg862)) but this code succeeds enum Mix { col, } string getString()(Mix[] mixArgs...) { return "{}"; } void main() { enum a = getString([Mix.col]); } as does this code enum Mix { col, } string getString()(int[] mixArgs...) { return "{}"; } void main() { enum a = getString(Mix.col); } Apparently, the compiler can't handle figuring out the length of the array if it holds enums, and its implicitly instantiated, but if it's an array of something else or it's explicitly instantiated, it's fine. I had a much larger example which compiled with 2.060 but not 2.061, so there's a regression here, but the reduced example fails to compile with both 2.060 and 2.061, and it was already a huge pain to get a reduced example at all, so I'm not going to go through the effort of figuring out how to get a reduced example that worked with 2.060 but not 2.061. And I'll just mark this as a normal bug, since the example itself isn't a regression. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Feb 05 2013