struct foo(T) { T value; } template bar(T) { typedef foo!(T) bar; } void main(string[] args) { writefln((bar!(int)).stringof); // prints 'bar' writefln((bar!(float)).stringof); // also prints 'bar' } Seeing as these two are different instantiations of the bar template, it seems weird to me that they have the same type name. The typedef maps to bar!(something), hence should the name as well.
Though marked as a D2-only bug, it's actually D1 only! struct foo(T) { T value; } template bar(T) { typedef foo!(T) bar; } void main() { pragma(msg, (bar!(int)).stringof); // prints 'bar' pragma(msg, (bar!(float)).stringof); // also prints 'bar' }