int ?=?( int*, int );
int ?*?( int, int );

forall( type T | { T ?*?( T, T ); } )
T square( T t )
{
  return t * t;
}

forall( type U | { U square( U ); } )
U quad( U u )
{
  return square( square( u ) );
}

void f()
{
  quad( 7 );
}
