context addable( otype T ) { T ?+?( T,T ); T ?=?( T*, T); }; otype List1( otype 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( otype T ) S2 { T i; }; // actual definition struct( int ) S3 v1, *p; // expansion and instantiation struct( otype T )( int ) S24 { T i; } v2; // actual definition, expansion and instantiation struct( otype T )( int ) { T i; } v2; // anonymous actual definition, expansion and instantiation struct( otype T | addable( T ) ) node { T data; struct( T ) node *next; }; otype List( otype T ) = struct( T ) node *; List( int ) my_list; otype Complex | addable( Complex ); int main() { (struct( int ) node)my_list; } // Local Variables: // // tab-width: 4 // // End: //