context has_f( type T ) {
    T f( T );
};

context has_g( type U | has_f( U ) ) {
    U g( U );
};

forall( type V | has_g( V ) ) void h( V );
