Hi, the following scenario has a "definition hole" in the "C" language code example: ------------------------- struct base { ... }; struct A { struct base obj; ... } aObj; struct B { struct base obj; ... } bObj; void method_base (struct base * hdl, ...); method_base(&aObj, ...) method_base(&bObj, ...) ------------------------ - a POINTER to "A" is also a valid POINTER to "base" - a POINTER to "B" is also a valid POINTER to "base" - a POINTER to "base" is NOT a valid POINTER to "A" and "B" I require a solution for this problem WITHOUT forced pointer cast code and without "void* and type-check" inflation. The following solutions are acceptable: 1. "gcc" discover by its own that "base" is a "friend" of "A" and "B". 2. add a "frienddef" keyword like "typedef" using: typedef struct base * baseP; typedef struct A * aP; typedef struct P * bP; frienddef baseP aP; frienddef baseP bP; 3. add a #PRAGMA to enable/disable this feature 4. add a "gcc" api to easy extend "GCC" without being FORCED to "hack" the core. thanks for your help