Question: what is the difference between template class t and template typename t?
Answer: There is no difference. typename and class are interchangeable in the declaration of a type template parameter. You do, however, have to use class (and not typename ) when declaring a template template parameter: template <template <typename> class T> class C { }; // valid!