Wieso gibt das keinen Fehler?
-
Ich habe einen Header Misc.h, in dem folgendes steht:
template<class T> void foo() { float f = D3DX_PI; }D3DX_PI ist eine #define Konstante und definiert in d3dx9math.h.
Ich inkludiere jetzt in main.cpp als allererstes (!) Misc.h und bekomme dennoch KEINEN Compiler-Fehler. Wie kann das sein? Am Anfang von main.cpp müsste doch jetzt die Definition von foo() stehen und er meckern, dass er D3DX_PI; nicht kennt.

-
Hast du das Template denn auch instanziiert? Also f<T>() mal für irgendein T aufgerufen? Erst dann dürfte der Compiler feststellen, dass das ein unbekannter Bezeichner ist.
-
Nein hatte ich nicht. Das wars wohl, Danke.

Nebenbei: Wenn ich meine Template-Funktion beispielsweise für einen int und einen float instantiiere, dann lagt er ja 2 verschiedene Funktionen an. Wo genau wird eigentlich dieser Code abgelegt?
-
Wie "wo"? Da wo der andere Code auch ist.

-
Öhm, also wenn ich in a.cpp foo<int>() habe und in b.cpp foo<float>(), dann ist in a.obj der Code zu foo<int> und in b.obj der zu foo<float>, oder?