С самого начала в C++ тэг структуры был именем типа, что делает
ненужным typedef для структур. В других случаях typedef продолжал
использоваться, кроме того, с ростом популярности STL ему нашлось
новое применение: имена типов часто получаются очень длинными и
неудобочитаемыми, и хочется их сократить до чего-то долее
съедобного. Но классический typedef не идеален для шаблонов,
поэтому в C++ было введено новое слово using, которое умеет всё,
что умеет typedef, плюс новые трюки. Теперь typedef действительно не нужен, но многие по старой памяти пользуются.