Compilerfehler C2918

'Name': Unzulässige Verwendung eines lokalen Typs in Vorlageninstanziierung

Sie können keine Funktion instanziieren, die auf einer Funktionsvorlage basiert, welche wiederum auf einem lokalen Typ basiert.Für die Instanziierung verwendete Typen müssen extern verknüpft sein.

Im folgenden Beispiel wird C2918 generiert:

// C2918.cpp
// compile with: /Za /c
template<class T> 
void f(T t) {};

template<class T> 
void g(T t) {};
struct Y {};

void g() {
   struct X {};

   X x;
   f(x);   // C2918

   Y y;
   g(y);
}