Dabei ist zu beachten, dass C++-Templates und C#-Generics nicht genau dasselbe sind. Siehe dies Antwort für weitere Einzelheiten zu diesen Unterschieden.
Aus der Seite, auf die Sie verlinkt haben, um C++0x-Konzepte zu erklären, klingt es so, als ob die Idee ist, dass man in C++ in der Lage sein möchte, anzugeben, dass der Vorlagentyp bestimmte Eigenschaften implementiert. In C# geht die Einschränkung weiter als das und zwingt den generischen Typ dazu, "von" dieser Einschränkung zu sein. Zum Beispiel der folgende C#-Code:
public GenericList<T> where T : IDisposable
besagt, dass jeder Typ, der anstelle von T muss die Schnittstelle IDisposable implementieren. Ähnlich verhält es sich mit dem folgenden Code:
public abstract class ABC {}
public class XYZ : ABC {}
public GenericList<T> where T : ABC
besagt, dass jeder Typ, der anstelle von T verwendet wird, vom Typ ABC oder abgeleitet von ABC sein muss.
Die Idee des C++0x-Konzepts besagt nur, dass der Typ, der anstelle von T verwendet wird, dieselben Eigenschaften haben muss, die durch ABC (oder IDisposable) definiert sind, und nicht, dass er von diesem Typ sein muss.