template< class T > T f(); template< class T > struct g { static int _(T); static void _(...); }; struct X { }; int main(int argc, char* argv[]) { typedef int const int_c; typedef int volatile int_v; typedef int const volatile int_cv; sizeof(g< int >::_(f< int >())); sizeof(g< int >::_(f< int_c >())); sizeof(g< int >::_(f< int_v >())); sizeof(g< int >::_(f< int_cv >())); sizeof(g< int >::_(f< int & >())); sizeof(g< int >::_(f< int_c & >())); sizeof(g< int >::_(f< int_v & >())); sizeof(g< int >::_(f< int_cv& >())); sizeof(g< int_c >::_(f< int >())); sizeof(g< int_c >::_(f< int_c >())); sizeof(g< int_c >::_(f< int_v >())); sizeof(g< int_c >::_(f< int_cv >())); sizeof(g< int_c >::_(f< int & >())); sizeof(g< int_c >::_(f< int_c & >())); sizeof(g< int_c >::_(f< int_v & >())); sizeof(g< int_c >::_(f< int_cv& >())); sizeof(g< int_v >::_(f< int >())); sizeof(g< int_v >::_(f< int_c >())); sizeof(g< int_v >::_(f< int_v >())); sizeof(g< int_v >::_(f< int_cv >())); sizeof(g< int_v >::_(f< int & >())); sizeof(g< int_v >::_(f< int_c & >())); sizeof(g< int_v >::_(f< int_v & >())); sizeof(g< int_v >::_(f< int_cv& >())); sizeof(g< int_cv >::_(f< int >())); sizeof(g< int_cv >::_(f< int_c >())); sizeof(g< int_cv >::_(f< int_v >())); sizeof(g< int_cv >::_(f< int_cv >())); sizeof(g< int_cv >::_(f< int & >())); sizeof(g< int_cv >::_(f< int_c & >())); sizeof(g< int_cv >::_(f< int_v & >())); sizeof(g< int_cv >::_(f< int_cv& >())); //sizeof(g< int & >::_(f< int >())); //sizeof(g< int & >::_(f< int_c >())); //sizeof(g< int & >::_(f< int_v >())); //sizeof(g< int & >::_(f< int_cv >())); sizeof(g< int & >::_(f< int & >())); //sizeof(g< int & >::_(f< int_c & >())); //sizeof(g< int & >::_(f< int_v & >())); //sizeof(g< int & >::_(f< int_cv& >())); sizeof(g< int_c & >::_(f< int >())); sizeof(g< int_c & >::_(f< int_c >())); //sizeof(g< int_c & >::_(f< int_v >())); //sizeof(g< int_c & >::_(f< int_cv >())); sizeof(g< int_c & >::_(f< int & >())); sizeof(g< int_c & >::_(f< int_c & >())); //sizeof(g< int_c & >::_(f< int_v & >())); //sizeof(g< int_c & >::_(f< int_cv& >())); //sizeof(g< int_v & >::_(f< int >())); //sizeof(g< int_v & >::_(f< int_c >())); //sizeof(g< int_v & >::_(f< int_v >())); //sizeof(g< int_v & >::_(f< int_cv >())); sizeof(g< int_v & >::_(f< int & >())); //sizeof(g< int_v & >::_(f< int_c & >())); sizeof(g< int_v & >::_(f< int_v & >())); //sizeof(g< int_v & >::_(f< int_cv& >())); //sizeof(g< int_cv& >::_(f< int >())); //sizeof(g< int_cv& >::_(f< int_c >())); //sizeof(g< int_cv& >::_(f< int_v >())); //sizeof(g< int_cv& >::_(f< int_cv >())); sizeof(g< int_cv& >::_(f< int & >())); sizeof(g< int_cv& >::_(f< int_c & >())); sizeof(g< int_cv& >::_(f< int_v & >())); sizeof(g< int_cv& >::_(f< int_cv& >())); typedef X const X_c; typedef X volatile X_v; typedef X const volatile X_cv; sizeof(g< X >::_(f< X >())); sizeof(g< X >::_(f< X_c >())); //sizeof(g< X >::_(f< X_v >())); //sizeof(g< X >::_(f< X_cv >())); sizeof(g< X >::_(f< X & >())); sizeof(g< X >::_(f< X_c & >())); //sizeof(g< X >::_(f< X_v & >())); //sizeof(g< X >::_(f< X_cv& >())); sizeof(g< X_c >::_(f< X >())); sizeof(g< X_c >::_(f< X_c >())); //sizeof(g< X_c >::_(f< X_v >())); //sizeof(g< X_c >::_(f< X_cv >())); sizeof(g< X_c >::_(f< X & >())); sizeof(g< X_c >::_(f< X_c & >())); //sizeof(g< X_c >::_(f< X_v & >())); //sizeof(g< X_c >::_(f< X_cv& >())); sizeof(g< X_v >::_(f< X >())); sizeof(g< X_v >::_(f< X_c >())); //sizeof(g< X_v >::_(f< X_v >())); //sizeof(g< X_v >::_(f< X_cv >())); sizeof(g< X_v >::_(f< X & >())); sizeof(g< X_v >::_(f< X_c & >())); //sizeof(g< X_v >::_(f< X_v & >())); //sizeof(g< X_v >::_(f< X_cv& >())); sizeof(g< X_cv >::_(f< X >())); sizeof(g< X_cv >::_(f< X_c >())); //sizeof(g< X_cv >::_(f< X_v >())); //sizeof(g< X_cv >::_(f< X_cv >())); sizeof(g< X_cv >::_(f< X & >())); sizeof(g< X_cv >::_(f< X_c & >())); //sizeof(g< X_cv >::_(f< X_v & >())); //sizeof(g< X_cv >::_(f< X_cv& >())); //sizeof(g< X & >::_(f< X >())); //sizeof(g< X & >::_(f< X_c >())); //sizeof(g< X & >::_(f< X_v >())); //sizeof(g< X & >::_(f< X_cv >())); sizeof(g< X & >::_(f< X & >())); //sizeof(g< X & >::_(f< X_c & >())); //sizeof(g< X & >::_(f< X_v & >())); //sizeof(g< X & >::_(f< X_cv& >())); sizeof(g< X_c & >::_(f< X >())); sizeof(g< X_c & >::_(f< X_c >())); //sizeof(g< X_c & >::_(f< X_v >())); //sizeof(g< X_c & >::_(f< X_cv >())); sizeof(g< X_c & >::_(f< X & >())); sizeof(g< X_c & >::_(f< X_c & >())); //sizeof(g< X_c & >::_(f< X_v & >())); //sizeof(g< X_c & >::_(f< X_cv& >())); sizeof(g< X_v & >::_(f< X >())); //sizeof(g< X_v & >::_(f< X_c >())); sizeof(g< X_v & >::_(f< X_v >())); //sizeof(g< X_v & >::_(f< X_cv >())); sizeof(g< X_v & >::_(f< X & >())); //sizeof(g< X_v & >::_(f< X_c & >())); sizeof(g< X_v & >::_(f< X_v & >())); //sizeof(g< X_v & >::_(f< X_cv& >())); sizeof(g< X_cv& >::_(f< X >())); sizeof(g< X_cv& >::_(f< X_c >())); sizeof(g< X_cv& >::_(f< X_v >())); sizeof(g< X_cv& >::_(f< X_cv >())); sizeof(g< X_cv& >::_(f< X & >())); sizeof(g< X_cv& >::_(f< X_c & >())); sizeof(g< X_cv& >::_(f< X_v & >())); sizeof(g< X_cv& >::_(f< X_cv& >())); return 0; }