Следует иметь в виду, что шаблоны C ++ и дженерики C # не совсем одинаковы. См. ответ для более подробной информации об этих различиях.
На странице, на которую вы ссылались с объяснением концепций C ++ 0x, звучит идея, что в C ++ вы хотите указать, что тип шаблона реализует определенные свойства. В C # ограничение идет дальше этого и заставляет универсальный тип быть «из» этого ограничения. Например, следующий код C #:
public GenericList<T> where T : IDisposable
говорит, что любой тип, используемый вместо T , должен реализовывать интерфейс IDisposable. Аналогично, следующий код:
public abstract class ABC {}
public class XYZ : ABC {}
public GenericList<T> where T : ABC
говорит, что любой тип, используемый вместо T, должен иметь тип ABC или производный от ABC.
Идея концепции C ++ 0x говорит только о том, что тип, используемый вместо T, должен иметь те же свойства, что определены ABC (или IDisposable), но не должен быть того типа.