E2472 Eine Elementfunktion kann nicht über die Instantiierung deklariert werden (C++)

Aus RAD Studio
Wechseln zu: Navigation, Suche

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

Dieser Fehler wird generiert, wenn bei einer Deklaration innerhalb einer Template-Klasse ein Funktionstyp von einem Template-Parameter abhängt und sich daraus eine Deklaration ergibt, die nicht der syntaktischen Form einer Funktionsdeklaration entspricht. Ein Beispiel:



 template<class T>
 struct A {
 static T t;
 };
 typedef int function();
 A<function> a;    // Fehler: würde A<funktion>::t als eine
 // statische Elementfunktion deklarieren



Ein weiteres Beispiel:

Im folgenden Beispiel hat das Template-Element 'a' den Typ 'T'. Wenn die Template mit T als Funktionstyp instantiiert wird, wird dadurch impliziert, dass 'a' eine Elementfunktion ist. Dies ist nicht zulässig, und die Fehlermeldung wird ausgegeben.



 template<T& x> class foo { T a; }
 int func(int);
 template class foo<func>;