在 template <typename T> 或 template <class T> 中,typename 與 class 語意完全相同,可互換使用。
class,後引入 typename 以明確語意。class 用於「僅接受類別型別」,typename 用於「接受任意型別(含基本型別)」。typename,因更直觀。template <typename T>
void foo() {
typename T::value_type v; // 必須加 typename 告訴編譯器這是型別
}
此處 typename 不可替換為 class。