Structs can easily have circular references:
struct ATag { struct BTag* pB; }; struct BTag { struct ATag* pA; };
typedef struct { BType* pB; } AType; //??? typedef struct { AType* pA; } BType;