Partager via


Erreur du compilateur C3206

'fonction' : argument type non valide pour 'param', liste d’arguments type absente dans le type de classe 'nom_type'

Un modèle de fonction est défini comme prenant un argument de type de modèle. Toutefois, un argument de type de modèle a été passé.

L’exemple suivant génère l’erreur C3206 :

// C3206.cpp
template <class T>
void f() {}

template <class T>
struct S {};

void f1() {
   f<S>();   // C3206
   // try the following line instead
   // f<S<int> >();
}

Résolution possible :

// C3206b.cpp
// compile with: /c
template <class T>
void f() {}

template <class T>
struct S {};

void f1() {
   f<S<int> >();
}

L’erreur C3206 peut également se produire lors de l’utilisation de génériques :

// C3206c.cpp
// compile with: /clr
generic <class GT1>
void gf() {}

generic <class T>
value struct GS {};

int main() {
   gf<GS>();   // C3206
}

Résolution possible :

// C3206d.cpp
// compile with: /clr
generic <class GT1>
void gf() {}

generic <class T>
value struct GS {};

int main() {
   gf<GS<int> >();
}

Un modèle de classe n’est pas autorisé comme argument de type de modèle. L’exemple suivant déclenche l’erreur C3206 :

// C3206e.cpp
template <class T>
struct S {};

template <class T>
void func() {   // takes a type
   T<int> t;
}

int main() {
   func<S>();   // C3206 S is not a type.
}

Résolution possible :

// C3206f.cpp
template <class T>
struct S {};

template <class T>
void func() {   // takes a type
   T t;
}

int main() {
   func<S<int> >();
}

Si un paramètre de modèle de modèle est nécessaire, vous devez encapsuler la fonction dans une classe de modèle qui accepte un paramètre de modèle de modèle :

// C3206g.cpp
template <class T>
struct S {};

template<template<class> class TT>
struct X {
   static void func() {
      TT<int> t1;
      TT<char> t2;
   }
};

int main() {
   X<S>::func();
}