I've already noticed that C# generics are quite different from C++ templates. I've read this question and answers to it and got a basic understanding of what the difference is.
However I don't get the reason for that design difference. I mean C++ was already quite developed when C# was being designed. What was suboptimal in C++ templates that C# developers did not clone C++ templates but instead rolled in generics that are so massively different?
What can generics do what C++ templates can't? In what are C# generics better than C++ templates? What's the reason for designing C# generics behaving differently from C++ templates?