On Thursday, 14 November 2013 at 15:40:49 UTC, Robert wrote:
Enums in D may be scoped. There is nothing that prevents you
from declaring your enum thus:
enum { protected_, private_, none }
making the shorter version perfectly legal.
mixin(signal!(string, int)("valueChanged", protected_));
Your concern about extra typing by always needing to specify
the scope is thus unwarranted.
This would work, but would make the protection parameter an
int. Not really any more beautiful than a string. The advantage
of the enum for me was, that it is clear from the signature
what are valid protections, this advantage gets lost with an
anonymous enum.
The only remaining advantage would be tool support for
completion, but I don't think it is worth it.
enum Protection { protected_, private_, none }
alias protected_ = Protection.protected_;
alias private_ = Protection.private_;
alias none = Protection.none;
Best of both worlds?