Because it can be ambiguous otherwise:
int a = 1, b = 1;
int val = 1;
switch (val) {
case a: foo(); break;
case b: bar(); break;
}
Requiring constant expressions for the cases makes sure that there's no
ambiguity, since they can be evaluated at compile time.