string enum_to_str(E)(E v) if (is(E == enum)) { final switch (v) with(E) { static foreach (m; __traits(allMembers, E)) { case mixin(m): return m; } } }