Compilerfehler C2975

Aktualisiert: November 2007

Fehlermeldung

'arg' : Ungültiges Vorlagenargument für 'Typ', konstanter Ausdruck zur Kompilierungszeit erwartet
'arg' : invalid template argument for 'type', expected compile-time constant expression

Das Vorlagenargument stimmt nicht mit der Vorlagendeklaration überein. Innerhalb der spitzen Klammern sollte ein konstanter Ausdruck stehen. Variablen sind nicht als tatsächlich an die Vorlage übergebene Argumente zulässig. Überprüfen Sie die Vorlagendefinition, um die richtigen Typen zu finden.

Im folgenden Beispiel wird C2975 generiert:

// C2975.cpp
template<int I>
class X {};

int main() {
   int i = 4, j = 2;
   X<i + j> x1;   // C2975
   X<6> x2;   // OK
}

C2975 tritt auch auf, wenn Sie __LINE__ als Konstante zur Kompilierungszeit zusammen mit /ZI verwenden. Eine Lösung wäre, mit /Zi statt mit /ZI zu kompilieren.

// C2975b.cpp
// compile with: /ZI
// processor: x86
template<long line> 
void test(void) {}

int main() {
   test<__LINE__>();   // C2975
}