Was sind die Unterschiede zwischen "generischen" Typen in C ++ und Java?

Java hat Generika und C ++ bietet ein sehr starkes Programmiermodell mittemplates. Was ist dann der Unterschied zwischen C ++ und Java-Generika?