char ?=?( char*, char ); int ?=?( int*, int ); float ?=?( float*, float ); forall( dtype DT ) DT * ?=?( DT**, DT* ); forall(otype T) lvalue T *?( T* ); char *__builtin_memcpy(); void a( char ); void b( int ); void c( int* ); void d( float* ); struct a_struct { int a; char a; float a; }; union b_struct { int *a; char *a; float *a; }; void f() { struct a_struct the_struct; union b_struct the_struct; a( the_struct.a ); b( the_struct.a ); c( the_struct.a ); d( the_struct.a ); } struct c_struct { int; char; float; }; union d_struct { int*; char*; float*; }; void g() { unsigned short x; struct c_struct x; union d_struct x; a( x ); // the 'a' and 'b' calls resolve to the ushort b( x ); // it's debatable whether this is good c( x ); d( x ); } // make sure that forward declarations work struct forward; struct forward *q; struct forward { int y; }; void h() { q->y; } // Local Variables: // // tab-width: 4 // // End: //