>>357
1に関して。
まず、typedef宣言自体が、ポインタや配列や関数型などが複雑に絡んだ
「組み立て型」を簡単に表すためと、
C言語では、構造体型をそのまま型名として使うことができず、typedefを
使わなければ、「struct タグ名」とstructを省略できなかったので、
typedefが好んで使われた。

ところが、C++では、structやclassキーワードを書かなくても、いきなり
タグ名を書いても型名として扱われる。だから、class名/struct名を敢えて
typedef宣言する人は非常に少なくなった。なので、そのような書き方に
滅多に遭遇しないので、テスト不十分でコンパイラにバグが残っている可能性がある。