C++でtypenameキーワードを使うケースは以下の2つがある. テンプレートパラメータを宣言するとき テンプレート内にあるネストされた依存型名を指定するとき(例外あり) テンプレートパラメータの宣言時 ひとつはテンプレートパラメータを宣言するとき. template<typename T> void f(T t); これは,以下のようにtypenameの代わりにclassを使った場合でも同じ意味となる. template<class T> void f(T t); この場合,typenameとclassのどちらのキーワードを使うかは好みの問題となる. テンプレートにネストされた型の指定時 もうひとつは,テンプレートパラメータの型にネストされた型を指定するとき. 以下のように,STLコンテナを引数に取り,そのconst_iteratorを使って何らかの操作を行う関数テンプレートを考える.