=====typename===== === Specifying Type Parameters To Templates === In [[template]] argument lists [[typename]] can be used interchangeably with [[class]] to indicate type parameters. Although there is no difference to the compiler, Alexandrescu recommends using [[class]] when the template argument is expected to be a [[class]] or [[struct]], and [[typename]] for other classes of types. This is purely to encourage source readability. === Disambiguating Dependent Names === The [[typename]] keyword is also used to indicate that a [[dependent name|dependent name]] in a template definition refers to a type. struct Foo { typedef int Type; }; template struct Bar { typedef typename T::Type BarType; // In a typedef void baz() { typename T::Type instance; // In a declaration } }; typedef Bar FooBar; Related Topics: [[class]], [[template]]