Thread overview
[Issue 8012] New: Add .length field to enums or provide helper function to Phobos
May 01, 2012
Andrej Mitrovic
May 01, 2012
Andrej Mitrovic
May 01, 2012
Andrej Mitrovic
May 01, 2012
http://d.puremagic.com/issues/show_bug.cgi?id=8012

           Summary: Add .length field to enums or provide helper function
                    to Phobos
           Product: D
           Version: D2
          Platform: All
        OS/Version: All
            Status: NEW
          Severity: trivial
          Priority: P2
         Component: DMD
        AssignedTo: nobody@puremagic.com
        ReportedBy: andrej.mitrovich@gmail.com


--- Comment #0 from Andrej Mitrovic <andrej.mitrovich@gmail.com> 2012-05-01 13:44:17 PDT ---
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.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
May 01, 2012
http://d.puremagic.com/issues/show_bug.cgi?id=8012


Andrej Mitrovic <andrej.mitrovich@gmail.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Severity|trivial                     |enhancement


--- Comment #1 from Andrej Mitrovic <andrej.mitrovich@gmail.com> 2012-05-01 13:47:14 PDT ---
Oops I marked it wrong. It's an enhancement request.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
May 01, 2012
http://d.puremagic.com/issues/show_bug.cgi?id=8012


Andrej Mitrovic <andrej.mitrovich@gmail.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
         Resolution|                            |DUPLICATE


--- Comment #3 from Andrej Mitrovic <andrej.mitrovich@gmail.com> 2012-05-01 15:39:37 PDT ---
(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 ***

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------