Hello bearophile,

In a not-ranged cases body, like in the program below (that doesn't
compile), the switch variable is a compile-time constant, so why
doesn't the compile see x as constant there?

template Foo(uint x) {
static if (x <= 1)
enum Foo = 1;
else
enum Foo = x * Foo!(x - 1);
}
int bar(uint x) {
switch (x) {
case 0: return Foo!x;
case 1: return Foo!x;
case 2: return Foo!x;
case 3: return Foo!x;
case 4: return Foo!x;
default: return -1;
}
}

If you want exactly that:

switch(x) {
 foreach(X; Tuple!(0,1,2,3,4)) {
   case X: return Foo!X;
 }
}


Reply via email to