D2.008 const test doesn't work

Janice Caron caron800 at googlemail.com
Thu Nov 29 02:39:47 PST 2007


The following code doesn't do what I expect:

    import std.stdio;

    template constType(T)
    {
        static if(is(T == invariant))
        {
            static const int constType = 3;
        }
        else static if(is(T == const))
        {
            static const int constType = 2;
        }
        else
        {
            static const int constType = 1;
        }
    }

    void main()
    {
        writefln(constType!(int));
        writefln(constType!(const(int)));
        writefln(constType!(invariant(int)));
    }

It prints
1
1
1
wheras I would have expected
1
2
3

It seems that the is(T==const) test isn't working.

Back in the days of D2.007, the following used to work:

    template constType(T)
    {
        static if(is(T == invariant(T)))
        {
            static const int constType = 3;
        }
        else static if(is(T == const(T)))
        {
            static const int constType = 2;
        }
        else
        {
            static const int constType = 1;
        }
    }

    void main()
    {
        writefln(constType!(int));
        writefln(constType!(const(int)));
        writefln(constType!(invariant(int)));
    }

which printed
1
2
3

but now that doesn't work either in D2.008.

We need to be able to distinguish int from const(int) from
invariant(int), in order to write classes like

    struct MyArray!(T) { /*...*/ }

    MyArray!(const(int)) a;


More information about the Digitalmars-d-bugs mailing list