Spécialisation dans l'espace de noms std : restrictions et autorisations
Malgré la possibilité d'ajouter des spécialisations explicites à l'espace de noms std, certains modèles ont des interdictions explicites . Comprendre ces restrictions est crucial pour garantir la validité du code utilisant les spécialisations d'espace de noms std.
Modèles interdits de spécialisation
-
numeric_limits : Non autorisé pour les types standards non arithmétiques (par exemple, complexe).
-
shared_ptr : Doit être CopyConstructible, CopyAssignable, LessThanComparable et convertible en bool.
-
weak_ptr : Doit être CopyConstructible et CopyAssignable.
-
std::hash : Les spécialisations doivent répondre aux exigences du hachage du modèle de classe.
-
type_traits : Spécialisations explicites de tous les modèles de classe dans ne sont pas définis sauf indication contraire.
-
Locales : Avoir les spécialisations requises.
-
istreambuf_iterator : Nécessite un constructeur de copie trivial, un constructeur par défaut constexpr et un destructeur trivial .
-
complexe : Seules les spécialisations float, double et long double sont autorisées.
-
atomic : Les spécialisations doivent avoir un constructeur de copie supprimé, copie opérateur d'affectation et constructeur de valeur constexpr.
-
fonction_unaire et fonction_binaire : Obsolètes et ne doivent pas être spécialisées.
Restrictions supplémentaires
- Selon la clause 17.6.4.2.1, le comportement n'est pas défini lors de l'ajout de déclarations ou de définitions à l'espace de noms std ou à ses sous-espaces de noms. Les exceptions s'appliquent uniquement aux spécialisations de modèles qui dépendent de types définis par l'utilisateur et répondent aux exigences standard.
- Il est interdit de spécialiser explicitement une fonction membre d'un modèle de classe de bibliothèque standard, d'un modèle de fonction membre ou d'un modèle de classe membre.
Modèles autorisés pour la spécialisation
Les modèles non explicitement interdits peuvent être spécialisés s'ils dépendent de types définis par l'utilisateur et répondent aux exigences standard du modèle d'origine.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!