『プログラミング言語C++』 C.13.5 typenameとテンプレート テンプレートを使ったプログラムでは、なぜ型名にtypenameを付ける必要があるのだろうか 以下のコードはどちらもエラーになる template <class Container> struct hoge { typedef Container::iterator iterator; // エラー }; template <class Container> void foo(Container& c) { Container::iterator it; // エラー } テンプレートは使わなければコンパイル(コード生成)されないが構文エラーくらいは検出しなければならない だが、構文チェックの時点でコンパイラはContainer::iteratorが「型」なのか「staticメンバ」なのか判別できない そこで、以下の