Différences par rapport aux autres implémentations
Section spécifique à Microsoft
La liste suivante présente quelques différences entre Microsoft C++ et d'autres compilateurs.
Le compilateur ne peut pas instancier un modèle en dehors du module dans lequel il est défini. Visual C++ ne prend pas en charge le mot clé exporter.
Les modèles ne peuvent pas être utilisés avec les fonctions déclarées avec __declspec (dllimport) ou __declspec (dllexport).
Tous les arguments template doivent être d'un type sans ambiguïté qui correspond exactement à la liste de paramètres de modèle. Par exemple :
template< class T > T check( T ); template< class S > void watch( int (*)(S) ); watch( check ); //error
Le compilateur doit instancier la fonction check modélisée dans le formulaire int check( int ), mais l'inférence ne peut pas être suivie.
Lors de la résolution des noms utilisés dans des modèles de classe ou des modèles de fonction, tous les noms sont traités comme noms dépendants. Consultez Résolution de noms pour les types dépendants
Dans un modèle de classe, le paramètre de modèle peut être redéfini dans la portée de la définition de classe. Consultez Résolution de noms des noms localement déclarés