The
ideas behind templates are brilliant but, yes, as implemented in an already big & complex language they seem like a kludge. But if you designed a low-level systems language from scratch with clean generics as a top priority I think you could come up with something pretty interesting and a lot simpler than the OO mismash you tend to get with C++.
Think of something like OCaml but with a less intrusive runtime, for instance. C++ got a lot more functional with C++11 but there's too much baggage for the simpler statically polymorphic language inside C++ to emerge cleanly.