generics - это просто такое Java-название для плюсовых templates
Ну вот как раз одно из ключевых различий - это как раз type erasure, о котором вы в контексте TS/JS тут говорили. Которое происходит из того, что в C++ компилятор должен знать, какой размер под вложенный тип выделять.