Maison >développement back-end >C++ >Quel est le « contexte immédiat » dans C 11 SFINAE et comment affecte-t-il les échecs de substitution ?
Comprendre le « contexte immédiat » dans C 11 SFINAE
La norme C 11 spécifie les conditions dans lesquelles un échec de substitution entraîne une compilation matérielle erreur ou une erreur logicielle qui supprime simplement un modèle des candidats à la résolution de surcharge. Un concept clé dans cette détermination est le « contexte immédiat ».
Définition du « contexte immédiat »
Le terme « contexte immédiat » est brièvement mentionné dans la norme, mais sa définition exacte n'est pas explicitement fournie. Cependant, on le trouve souvent en conjonction avec le texte suivant :
Note: The evaluation of the substituted types and expressions can result in side effects such as instantiation of template specializations, generation of implicitly-defined functions, etc. Such side effects are not in the “immediate context” and can result in the program being ill-formed.
Cette note indique que les effets secondaires survenant au cours du processus de substitution, tels que les instanciations de modèles ou les définitions de fonctions implicites, ne sont pas considérés comme faisant partie du processus de substitution. contexte immédiat.
Détermination des erreurs de substitution dans le contexte immédiat
Pour déterminer si une erreur de substitution se produit dans le Dans un contexte immédiat, envisagez les étapes suivantes :
Exemples
Considérez le modèle et la fonction de secours suivants :
template<typename T> void func(typename T::type* arg); template<> void func(...);
Conclusion
En comprenant le concept de contexte immédiat, vous pouvez mieux identifier quand une erreur de substitution entraînera une erreur de compilation matérielle ou un échec de déduction douce, permettant l'utilisation efficace de SFINAE en C 11.
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!