struct S(T){int x;} template X(T){ struct S{int x;} } void main(){ pragma(msg, S!int); // "struct S" pragma(msg, X!int); // X!(int) pragma(msg, X!int.S); // "S", why not identical to first one? } The fact that for eponymous templates the template parameters are not shown sometimes has a severe negative impact on the readability of error messages, as well as on the usefulness of debug output via pragma(msg) I propose that .stringof for eponymous templates should apply to the template instance instead of to the eponymous declaration.
But that should only be the case for templated types, for example the following should still print "1": template X(int x) { enum X = x; } pragma(msg, X!1);
No longer reproducible in '21