The following code has a little bit of unpleasantness.
#include template struct PA1 {}; template struct QA1
C++0x will have template aliases
Oh and to track when it comes to GNU C++: http://gcc.gnu.org/projects/cxx0x.html