Unbelievable - I had no idea that T[] wasn't equal to T* (I'm not kidding, I actually thought not specifying a size for the array degraded it to a pointer).
The naming convention used by typeinfo is compiler specific. So yah zero or no length arrays are not defined by C++ and are simply extensions provided by some compilers. Kind of surprised gcc doesn't give a warning about that.
T[] in a function parameter list is converted to T* (same for function types), because neither arrays nor functions can be passed by value to begin with.
T[] in template parameter list is not converted (and neither are function types), because they are distinct types.
A declaration of a member of a struct is a whole other story about non-standard language extensions. gcc reports it with -pedantic-errors
T[] in a function parameter list is converted to T* (same for function types), because neither arrays nor functions can be passed by value to begin with.
This is what I was thinking of, I understood this to be true in all cases, not just a function parameter list. Misunderstanding on my part.