#include <stdio.h>
#include <assert.h>
typedef struct tagT {
int a;
} T;
int f1(T *p) {
p->a++;
return 0;
}
int main(int argc, char *argv[])
{
T t = { 0 }, *pt = &t;
typedef T *T01[5];
T01 t01;
t01[0] = pt;
t01[0]->a++;
assert(t.a == 1);
typedef T *T02;
T02 t02 = &t;
t02->a++;
assert(t.a == 2);
typedef T **T03;
T03 t03 = &pt;
(*t03)->a++;
assert(t.a == 3);
typedef int (* T04)(T *);
T04 t04 = f1;
t04(pt);
assert(t.a == 4);
typedef int (* T05[5])(T *);
T05 t05;
t05[0] = f1;
t05[0](pt);
assert(t.a == 5);
return 0;
}