int ?=?( int*, int ); float ?=?( float*, float ); int * ?=?( int **, int * ); float * ?=?( float **, float * ); char ?=?( char*, char ); void (* ?=?( void (**)(void), void (*)(void) ))(void); void g1() { forall( type T ) T f( T ); void f( int ); void h( void (*p)(void) ); int x; void (*y)(void); char z; float w; f( x ); f( y ); f( z ); f( w ); h( f( y ) ); } void g2() { forall( type T ) void f( T, T ); forall( type T, type U ) void f( T, U ); int x; float y; int *z; float *w; f( x, y ); f( z, w ); f( x, z ); }