I have the following code that does simple type checking: void check(T)(T t) { writefln(T.mangleof); writefln(typeof(t).mangleof); writefln(T.sizeof); writefln(typeof(t).sizeof); writefln(T.stringof); writefln(typeof(t).stringof); } It should output the same information twice, since is(typeof(t) == T) is true. Let's run tests: Test one: check(42); Output: i i 4 4 int int Test two: check(0.0); Output: d d 8 8 double double Ok so far. Test three: check(42); check(0.0); Output: i i 4 4 int int d i 8 4 double int Whoops! Results got mixed. Looks like typeof(t) returns wrong result now!
This was fixed in DMD1.039 when bug 2527 was fixed.