|    | Generics C# 2.0 | Templates C++ | 
        
            | Istanziazione | Compile-Time (JIT) | Compile-Time (Preprocessore) | 
        
            | Parametri permessi | Tutti i value-type, i reference-type a meno di array e puntatori unmanaged e i closed costructed type.  Non un altro generic. | Tutti i tipi, non-tipi (espressioni costanti, puntatori a funzioni e mebri, riferimeni, ...) e anche un altro template. | 
        
            | Tipi di default per i parametri  | No. | Si. | 
        
            | Parametro usato come classe base  | No. | Si, è possibile usare un parametro per indicare una classe base del template.. | 
        
            | Controlli sull'uso dei tipi parametrici  | Nel codice dei membri del tipo generico è possibile richiamare solo quei membri  di un type parameter definiti nei sottotipi (classe base, interfaccie) indicati nei constraints. | Nessun vincolo,  se si usano membri di un template parameter non presenti nel tipo specificato si ha un errore a Compile-Time. | 
        
            | Limitazioni alla specializ. dei membri | Non è possibile definire generic methods di tipo: operatori, operatori di conversione, property, indexer, array, events, constructor, destructor e web methods. | Nessuna. | 
        
            | Identità dei tipi istanziati | Identità unica a livello globale: uno stesso generic istanziato da due qualsiasi assembly specificando i medesimi argomenti viene riconosciuto come il medesimo tipo. | L'identità di un tipo istanziato è riconosciuta solo all'interno della stesss compilation-unit (assembly). | 
        
            | Specializzazione | Non è possibile specializzare un generic. | Si, è possibile specializzare un template con le user-specialization e le partial-specialization.
 | 
        
            | Duplicazione in memoria del codice  | No, in memoria tutte le istanze di uno stesso generic ottenute con parametri reference-type condividono il medesimo codice automaticamente. | Si, ma è possibile evitarlo definendo per un template una user-specialization per tutti parametri di tipo puntatore.
 | 
        
            | Informazioni sui tipi a Run-Time | Si, la Reflection supporta i Generics. | No, le RTTI non danno informazioni sui template. | 
        
            | Supporto cross-language | Si, potenzialmente per tutti i linguaggi managed. | No. |