Totally tangentially, one of the features that I enjoy in D (the programming language) is "final switch" -
http://dlang.org/statement.html#FinalSwitchStatement
When used with D's enumerated type, all possible values must exist as case statements, and no default case is allowed. That way if you extend an enumerated type with a new value, whenever you have used "final switch", the compiler will tell you where you need to handle this value.