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

forall( type T, type U | { U f(T); } ) U g(T);
float f( int );
double f( int );
void i( float );

void h() {
	int a;
	i( g( a ) );
}

context has_f_and_j( type T, type U ) {
	U f( T );
	U j( T, U );
};

float j( int, float );
forall( type T, type U | has_f_and_j( T, U ) ) U k( T );

void l() {
	int b;
	i( k( b ) );
}

// Local Variables: //
// tab-width: 4 //
// End: //
