Bug 8012 – Add .length field to enums or provide helper function to Phobos

Status
RESOLVED
Resolution
DUPLICATE
Severity
enhancement
Priority
P2
Component
dmd
Product
D
Version
D2
Platform
All
OS
All
Creation time
2012-05-01T13:44:00Z
Last change time
2012-05-01T15:39:37Z
Assigned to
nobody
Creator
andrej.mitrovich

Comments

Comment #0 by andrej.mitrovich — 2012-05-01T13:44:17Z
My use-case: enum Foo { x, z, y } enum Bar : Foo { x = Foo.x, y = Foo.y, z = Foo.z } I really want to ensure that when I update Foo I will be forced to update Bar (IOW get a compile-time error). If enums had a .length property then I could easily add a static assert: static assert(Foo.length == Bar.length); As a workaround (if the proposal is rejected), we might add this template to Phobos: template EnumLength(E) if (is(E == enum)) { enum EnumLength = [__traits(allMembers, E)].length; } Used like so: static assert(EnumLength!Foo == EnumLength!Bar); I'd prefer having .length over instantiating templates, but either is fine for me.
Comment #1 by andrej.mitrovich — 2012-05-01T13:47:14Z
Oops I marked it wrong. It's an enhancement request.
Comment #2 by bearophile_hugs — 2012-05-01T15:27:54Z
(In reply to comment #0) Dupe of Issue 4997 ? > template EnumLength(E) > if (is(E == enum)) > { > enum EnumLength = [__traits(allMembers, E)].length; > } This is enough, no need to create an array: template EnumLength(E) if (is(E == enum)) { enum EnumLength = __traits(allMembers, E).length; } But your problem is probably solved in another way, creating an "enum duplicator".
Comment #3 by andrej.mitrovich — 2012-05-01T15:39:37Z
(In reply to comment #2) > (In reply to comment #0) > > Dupe of Issue 4997 ? Yeah, I'll close this then. > This is enough, no need to create an array: > > template EnumLength(E) if (is(E == enum)) > { > enum EnumLength = __traits(allMembers, E).length; > } Thanks, I forgot tuples have length. > But your problem is probably solved in another way, creating an "enum > duplicator". Well in my real code the "subtyped" enum has different field names but the same values as another enum. Anyway it's not an issue as long as I can get the length of the enum. *** This issue has been marked as a duplicate of issue 4997 ***