Switch constants

bearophile bearophileHUGS at lycos.com
Sat Nov 13 14:21:52 PST 2010

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;
        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;

void main() {
    assert(bar(4) == 24);

That code works if I replace lines like:
case 2: return Foo!x;

case 2: return Foo!2;

But when the code isn't DRY bugs may happen...
(There are ten different better ways to write that program, but this is not the point).


More information about the Digitalmars-d-learn mailing list