--- module runnable; class A {} void main() { A a; } --- `ptype a` gives --- type = struct runnable.A { <no data fields> } * --- which means that there's not the hint required if we must `print a` or `print *a` the later syntax is required for a class.
I think the trailing '*' is probably the hint. The D language implementation is somewhat incomplete in gdb. It just uses the C type-printing code -- so what you get is what the C language code in gdb thinks the type is. Here it is a pointer to a structure, hence the trailing "*". Enhancing the D language code is completely possible if you are interested. Right now it doesn't seem to be under active development.