// 1. C SEM
struct Tag; // Simple Forward Decl.

// 2. C OBR C SEM [C SEM ...] CBR SEM
struct Tag { m1; m2; }; // Basic Struct Declaration
struct Flex { int len; int data[]; }; // Struct+Flex Array

// 3. C OBR C SEM [C SEC ...] CBR C SEM
struct { m1; m2; } variable; // Anonymous Struct
typedef struct Tag { m1; m2; } Alias; // Struct Def+Typedef

// 4. C OBR C OBR C SEM [C SEC...] CBR C SEC CBR SEC
struct Outer { struct { int a; } inner; }; // == Nested Structs
struct Outer { struct { int a; }; }; // == Nested Structs

// 5. C OBR C OPR C CPR OPR C CPR SEC CBR SEC
struct Callback { int (*func)(int, int); }; // Struct+Fn Ptrs

// 6. C OBR C SEC [C SEC ...] CBR SEC
union Tag { m1; m2; }; // Union Decl.

// 7. C OBR C SEM [C SEM ...] CBR SEM
struct BitField { ui a:1; ui b:2; }; // Struct+Bit Fields

// 8. C OBR C OBR C SEM [C SEM ...] CBR C SEM C OBR C CBR C SEM CBR SEM
struct Mixed { union { int a; ui b; } u; enum {R,G,B} color; };
// Struct with Union/Enum Members
