I tried to very hard to remove all the bizarre and unpredictable special cases. This adds them back. pragma(msg) used to have the most complicated behaviour in the language. I don't believe anyone understood what it was doing,
I was very proud of what I achieved: 
pragma(msg) evaluates its arguments, which may be expressions or types (or both, if it is a mixed tuple). Then it prints them.
That's it. There's nothing special about templates. If it is given a template, it evaluates the template.
In these broken cases where the template doesn't evaluate to an expression or a type, it doesn't do some completely different accidental behaviour like printing the name of the template. It's just an error. If you want the name, do a .stringof.