E2105: Le qualificateur 'modèle' doit spécifier un nom de modèle membre (C++)

De RAD Studio (Français)

Remonter à Erreurs et avertissements du compilateur (C++) - Index

Lors de l'analyse du code qui dépend d'une certaine manière d'un paramètre de modèle, il est parfois impossible de savoir si un nom de membre résoudra un nom de fonction modèle ou un paramètre normal. Dans le code suivant, un qualificateur 'modèle' est nécessaire pour savoir si l'opérateur ‘<’ (inférieur à) doit être analysé comme caractère de début d'une liste d'arguments modèle ou comme opérateur "inférieur à" normal :

template<class T>
void foo(T a)
{
a.member<10>();
}


Même si cela semble évident pour vous, le compilateur ne sait pas que ce "membre" fait référence à une fonction modèle de membre ; c'est pour cette raison qu'il analyse la ligne de code comme suit :

a.member < (10>());

Afin d'indiquer au compilateur que le caractère "inférieur à" est au début d'une liste d'arguments de modèles, le qualificateur 'modèle' est nécessaire :

a.template member<10>();   // "membre" doit être un modèle de membre

Si le qualificateur 'modèle' est utilisé dans une situation où "membre" ne se résout pas en modèle de membre, le message d'erreur ci-dessus apparaît.

Autres langues