290のコードだと、TAGの外で構造体TAG2を単独で使いたい場合、
Cでは単にTAG2と書くが、C++ではTAG::TAG2と書くという違いが生じる(TAG3も同じ)。

その差をなくすには、構造体の宣言を外に出せば良い。こうするとC/C++で同じ扱いになる。
typedef struct _tag2 {
  int x;
  int y;
} TAG2;
typedef struct _tag3 {
  int xx;
  int yy;
} TAG3;
typedef struct _tag {
  TAG2 rc1;
  TAG3 rc2;
} TAG;