D issues are now tracked on GitHub. This Bugzilla instance remains as a read-only archive.
Issue 10965 - Allow alias initializer as enum member to avoid counter reset
Summary: Allow alias initializer as enum member to avoid counter reset
Status: RESOLVED WONTFIX
Alias: None
Product: D
Classification: Unclassified
Component: dmd (show other issues)
Version: D2
Hardware: All All
: P2 enhancement
Assignee: No Owner
URL:
Keywords: pull
Depends on:
Blocks:
 
Reported: 2013-09-04 17:47 UTC by Andrej Mitrovic
Modified: 2013-09-08 18:47 UTC (History)
1 user (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this issue.
Description Andrej Mitrovic 2013-09-04 17:47:00 UTC
I've recently ran into a hard to track bug in my code:

-----
enum MouseAction
{
    press,

    release,

    /** Convenience - equal to $(D press). */
    click = press,

    double_click,  // oops, it's now equal to release!!
}

void main()
{
    static assert(MouseAction.release != MouseAction.double_click);  // fail
}
-----

Unfortunately the introduction of the convenience member ended up re-setting the enum member init counter, which ended up making "double_click" equal the value of "release".

To avoid such buggy code, but still allow these convenience members, I propose we introduce member aliases as a new feature:

-----
enum MouseAction
{
    press,

    release,

    alias click = press,  // same as press, but does not reset the counter!

    double_click,  // equals release + 1
}

void main()
{
    static assert(MouseAction.release != MouseAction.double_click);  // ok
}
-----