On Sunday, 24 June 2018 at 23:53:09 UTC, Timoses wrote:
enum members = [_traits(allMembers, E)];
seems to work
Great!
Now becomes:
@safe:
/** Enumeration wrapper that uses optimized conversion to string
(via `toString`
* member).
*/
struct Enum(E)
if (is(E == enum))
{
@property string toString() @safe pure nothrow @nogc
{
enum members = [__traits(allMembers, E)];
final switch (_enum)
{
static foreach (index, member; members)
{
static if (index == 0 ||
(__traits(getMember, E, members[index
- 1]) !=
__traits(getMember, E, member)))
{
case __traits(getMember, E, member):
return member;
}
}
}
}
E _enum; // the wrapped enum
alias _enum this;
}