context addable( type T ) {
	T ?+?( T,T );
	T ?=?( T*, T);
};

type List1( type T | addable( T ) ) = struct { T data; List1( T ) *next; } *;
typedef List1( int ) ListOfIntegers;
//List1( int ) li;
ListOfIntegers li;
int f( List1( int ) ( (*g ))( int ) );
[int] h( * List1( int ) p );							// new declaration syntax

struct( type T ) S2 { T i; };							// actual definition
struct( int ) S3 v1, *p;								// expansion and instantiation
struct( type T )( int ) S24 { T i; } v2;				// actual definition, expansion and instantiation
struct( type T )( int ) { T i; } v2;					// anonymous actual definition, expansion and instantiation

struct( type T | addable( T ) ) node { T data; struct( T ) node *next; };
type List( type T ) = struct( T ) node *;
List( int ) my_list;

type Complex | addable( Complex );

int main() {
	(struct( int ) node)my_list;
}

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