Der folgende Code ++ 2013 in Visual C kompiliert, aber nicht unter G ++ 4.8.2:Verarbeitung von instanziierte Template-Funktionen
template<class T>
int MyFunc(T& t)
{
return static_cast<int>(CCodes::blah);
}
template<>
int MyFunc(float& t)
{
return 0;
}
int main() {
float f = 10.f;
return MyFunc(f);
}
Visual C++ scheint die allgemeine Template-Funktion zu ignorieren, weil nur die Spezialisierung MyFunc<float>
verwendet wird. G ++ analysiert die allgemeine Funktion trotzdem und erkennt, dass die CCodes-Enumeration nicht definiert wurde.
Welches ist richtig? Oder ist diese Implementierung definiert?
In beiden Fällen ist fehlerhafter Code immer noch fehlerhafter Code. –
Also ich denke, meine Frage könnte umformuliert werden: Ist das falsch Code? Oder ist es dem Compiler erlaubt, uninstantiierte Template-Definitionen nicht zu parsen? – Tom
@Tom Was passiert, wenn Sie 'return static_cast (CCodes :: blah);'? –