#include<stdio.h> #define R const char #define Y template<typename T> #define X operator R*(){ #define O return n;}}; #define N(t) template<> R* C<t>::n=#t; #define W(M,S) Y struct C<M>{X static char n[512];strcpy(n,S);strcat(n,C<T>());O #define P(t) printf("%s/n",C<t>()); Y struct C{static R* n;X O Y R* C<T>::n="u";N(int)W(T*,"p to ")W(T&,"r to ")W(T[],"a of ")W(T const," c")W(T volatile," v")W(T(*)(),"p to f ret ")