Maison >développement back-end >C++ >Qu'est-ce qui détermine si une erreur de substitution de modèle C 11 est une erreur matérielle ou logicielle ?
Contexte immédiat dans la substitution de modèle C 11
La norme C 11 introduit l'échec de la substitution n'est pas une erreur (SFINAE), qui permet le suppression des erreurs de compilation matérielle lors de la substitution d'arguments de modèle. Cependant, la norme définit un « contexte immédiat » spécifique pour lequel SFINAE s'applique, laissant une certaine incertitude quant au moment où une erreur de substitution entraîne une erreur matérielle ou logicielle.
Définition du contexte immédiat
La norme définit le contexte immédiat comme :
"Seuls les types et expressions non valides dans le contexte immédiat du type de fonction et de ses types de paramètres de modèle peuvent entraîner un échec de déduction. . De tels effets secondaires ne sont pas dans le « contexte immédiat » et peuvent entraîner une mauvaise formation du programme."Décision. Procédure
Pour déterminer si une erreur de substitution se produit dans le contexte immédiat, considérez la procédure de décision suivante :
Étape 1 :
Identifiez tous les modèles et fonctions implicitement définies nécessaires pour déterminer le résultat de la substitution.Erreur matérielle :
func> - Instanciation de AEn comprenant le concept de contexte immédiat et en utilisant le ci-dessus, les programmeurs peuvent mieux prédire quand les erreurs de substitution entraîneront des erreurs matérielles ou logicielles, permettant une utilisation plus efficace de SFINAE en C 11. modèles.
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!