Compilerfehler C3203

'Typ': Nicht spezialisierter Klassentyp kann nicht als Typargument für Typparameter 'param' verwendet werden, es wird ein realer Typ erwartet.

An eine Klassenvorlage oder ein Generikum wurde ein ungültiges Argument übergeben.Die Klassenvorlage oder das Generikum erwartet einen Typ als Parameter.

Dieser Fehler kann infolge einer Verbesserung der Compilerkonformität für Visual C++ 2005 ausgegeben werden: Eine nicht spezialisierte Klassenvorlage kann in einer Basisklassenliste nicht als Vorlagenargument verwendet werden.Um den Fehler C3203 zu beheben, fügen Sie zu dem Vorlageklassennamen den/die Vorlagentypparameter explizit hinzu, wenn Sie die Vorlagenklasse in einer Basisklassenliste als Vorlagenparameter verwenden.

// C3203.cpp
template< typename T >
struct X {
   void f(X) {}
};

template< typename T >
struct Y : public X<Y> {   // C3203
// try the following line instead
// struct Y : public X<Y<T> > {
   void f(Y) {}
};

int main() {
   Y<int> y;
}

Im folgenden Beispiel wird C3203 generiert:

// C3203_b.cpp
// compile with: /c
template <class T>
struct S1 {};

template <class T>
class C1 {};

typedef C1<S1> MyC1;   // C3203

// OK
template <template <class> class T>
class C2 {};

typedef C2<S1> MyC1;

template <class T>
class C3 {};

typedef C3<S1<int> > MyC12;

C3203 kann auch auftreten, wenn Generika verwendet werden:

// C3203_c.cpp
// compile with: /clr /c
generic <class T>
value struct GS1 {};

generic <class T>
value struct GC1 {};

typedef GC1<GS1> MyGC1;   // C3203
typedef GC1<GS1<int> > MyGC2;   // OK