There's an _is_ expression, which allows one to determine the underlying type of a enum:
template EnumType(T) if(is(T U = enum)) { alias U EnumType; } It would be awesome if the same mechanism was implemented for aliased types: template AliasType(T) if(is(T U = alias)) { enum string AliasType = U; } which would return a string, containing the alias name.