D issues are now tracked on GitHub. This Bugzilla instance remains as a read-only archive.
Issue 9058 - Problem with std.traits.EnumMembers conversion to array
Summary: Problem with std.traits.EnumMembers conversion to array
Status: RESOLVED FIXED
Alias: None
Product: D
Classification: Unclassified
Component: dmd (show other issues)
Version: D2
Hardware: x86 Windows
: P2 regression
Assignee: No Owner
URL:
Keywords: pull, rejects-valid
Depends on:
Blocks:
 
Reported: 2012-11-22 14:46 UTC by bearophile_hugs
Modified: 2012-12-11 11:13 UTC (History)
0 users

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this issue.
Description bearophile_hugs 2012-11-22 14:46:47 UTC
import std.traits: EnumMembers;
enum Foo { A, B }
size_t bar(size_t n) {
    return 0;
}
void main() {
    Foo x = [EnumMembers!Foo][bar($)];
}


That code compiles and runs correctly with DMD 2.060, but with DMD 2.061alpha gives:


OPTLINK (R) for Win32  Release 8.00.12
Copyright (C) Digital Mars 1989-2010  All rights reserved.
http://www.digitalmars.com/ctg/optlink.html
test.obj(test) 
 Error 42: Symbol Undefined _D4test4mainFZv8__dollark


While now this code gives:

import std.traits: EnumMembers;
enum Foo { A, B }
void main() {
    EnumMembers[] array = [EnumMembers!Foo];
}


test.d(4): Error: template std.traits.EnumMembers(E) if (is(E == enum)) is used as a type
Comment 1 bearophile_hugs 2012-11-22 14:49:49 UTC
> While now this code gives:
> 
> import std.traits: EnumMembers;
> enum Foo { A, B }
> void main() {
>     EnumMembers[] array = [EnumMembers!Foo];
> }
> 
> 
> test.d(4): Error: template std.traits.EnumMembers(E) if (is(E == enum)) is used
> as a type

Please ignore this second test case, it's wrong (the array should be Foo[], and it compiles correctly).
Comment 3 github-bugzilla 2012-12-11 10:08:49 UTC
Commits pushed to master at https://github.com/D-Programming-Language/dmd

https://github.com/D-Programming-Language/dmd/commit/2d79ad35c3c7f624a9c619759852e01bdf9049af
fix Issue 9058 - Problem with std.traits.EnumMembers conversion to array

https://github.com/D-Programming-Language/dmd/commit/5752497c08bcfcf4905d5684d1535d1a9e09021f
Merge pull request #1363 from 9rnsr/fix9058

Issue 9058 - Problem with std.traits.EnumMembers conversion to array
Comment 4 bearophile_hugs 2012-12-11 11:13:06 UTC
Seems to work now.