// "cfa-cpp -nx Abstype.c"

type T | { T x( T ); };

T y( T t )
{
	T t_instance;
	return x( t );
}

forall(type T) lvalue T			*?(                T* );
int		?++( int *);
int ?=?( int*, int );
forall(dtype DT) DT* 		   	?=?(                DT *          *,          DT* );

type U = int*;

U x( U u )
{
	U u_instance = u;
	(*u)++;
	return u;
}

int *break_abstraction( U u )
{
	return u;
}
