Первое имеет преимущество в том, что можно предварительно объявить класс, но не typedef.
не может сделать шаблон из typedef или typedef шаблонного класса. Я знаю, если я унаследую и сделаю свой класс шаблоном, это будет работать.
Примеры:
// Illegal
template <class T>
typedef MyVectorType vector<T>;
//Valid, but advantageous?
template <class T>
class MyVectorType : public vector<T> { };
Делать это выгодно, чтобы я мог "подделать" typedef или есть лучшие способы сделать это?