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

De RAD Studio
Aller à : navigation, rechercher

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

When parsing code that depends in some way upon a template parameter, it is sometimes impossible to know whether a member name will resolve to a template function name, or a regular parameter. In the following code, a 'template' qualifier is required in order to know if the '<' (less-then) operator should be parsed as the beginning character of a template argument list, or as a regular less-than operator:

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.