func_t a(void);
void b(void);
func_t a(void) { putchar('a'); return b; }
これで、ここまで、ならば通る。

func_t b(void);
に変えると
typedef func_t (*func2_t)(void);
func2_t a(void);
にしなければならなくなる。

すると今度は・・・
難しいね。