E2105 'Template'-Qualifizierer muss einen Template-Elementnamen festlegen (C++)

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Compiler-Fehler und -Warnungen (C++) - Index

Wenn Quelltext compiliert wird, der auf bestimmte Weise von einem Template-Parameter abhängt, ist manchmal nicht festzustellen, ob ein Elementname zum Namen einer Template-Funktion oder zu einem normalen Parameter aufgelöst wird. Im folgenden Quelltext ist ein ‘Template’-Qualifizierer erforderlich, um festzustellen, ob der Operator ‘<’ (kleiner als) als Beginn einer Template-Argumentliste oder als normaler Operator interpretiert werden soll:



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



Für den Programmierer ist die Bedeutung offensichtlich. Der Compiler kann jedoch nicht wissen, dass sich "member" auf eine Template-Elementfunktion bezieht. Daher zerlegt er diese Zeile folgendermaßen:



 a.member < (10>());



Um dem Compiler mitzuteilen, dass das Kleiner-Zeichen eine Template-Argumentliste einleitet, ist der ‘Template’-Qualifizierer erforderlich:



 a.template member<10>();   // "member" muss ein Template-Element sein



Wenn der ‘Template’-Qualifizierer in einer Situation verwendet wird, in der "member” nicht zu einem Template-Element aufgelöst werden kann, gibt der Compiler die obige Meldung aus.