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;
}

Reply via email to