Ich frage mich, warum die unten Funktion Vorlage Spezialisierung nicht kompiliert (aufgrund no return statement in function returning non-void
).Bool Rückgabewert in Funktion Vorlage Spezialisierung
class Boring {
public:
template<typename T> bool eval() const { }
};
template<> inline bool Boring::eval<int>() const { return true; }
Ich würde erwarten, dass die nicht-spezialisierten Funktionsvorlage, es sei denn verwendet nicht bewertet werden würde. Wenn der Rückgabetyp zu T*
geändert wird, kompiliert das Unten erfolgreich.
int x = 5;
class Boring {
public:
template<typename T> T* eval() const { }
};
template<> inline int* Boring::eval<int>() const { return &x; }
Ich nehme an, meine Frage kommt von der Tatsache, dass die primäre Eval-Vorlage im T * -Fall den gleichen Fehler (ungültiger Rückgabetyp) ergeben würde, aber der bool return case führt zum Kompilierungsfehler. Beide Funktionsvorlagen haben leere Körper. –
@ JohnKane Das ist eine Qualität der Implementierungsproblem. Legen Sie einen Fehler für Ihren Compiler fest, um im zweiten Fall die fehlende Rückgabeanweisung nicht erkennen zu können. – Brian