Вызывающая функция несет ответственность за предоставление правильного ввода, и косвенно все, что не входит в enum, является недействительным (кажется, это подразумевает прагматический программист). Тем не менее, это означает, что каждый раз, когда вы меняете свое перечисление, вы должны изменить ВСЕ код, который принимает его как ввод (и НЕКОТОРЫЙ код, который выдает его как вывод). Но это, вероятно, так или иначе. Если у вас есть часто встречающееся перечисление, вам, вероятно, следует использовать что-то иное, чем перечисление, учитывая, что перечисления обычно являются сущностями времени компиляции.