Проблема не в скалярном типе, а в том, что метки регистра могут менять значение, когда они являются такими переменными.
Для всех намерений и целей, компилятор компилирует оператор switch как набор gotos. Метки не могут быть переменными.
Используйте перечисляемый тип или # определяет.