My Ruby claim doesn't hold much weight either if we're talking about the actual implementation.
C++ templates look like an entirely new language within the language.
Rust and Java make generics fit within the aesthetics and ergonomics of the language.
If anything feels "bolted on" to Rust, it's proc macros and (to a lesser degree) async.
It doesn't feel like very much, but now that you spell it out I guess I do see it.
Templates cover more than just generics. Java full-sale lifted its generics syntax from sepples. I'm curious how you draw the line between the two, when all 3 of them use the angle bracket declaration lists bolted onto the symbol name, a unique style invented by CFront 3. Compare with the generics syntax found in contemporaries like ML, Miranda, Ada, Modula-3 and so on.