(sollte 0 sein) Während der letzten g ++ experimentieren - 5 Compiler, schrieb ich unter Anweisung in einer Datei:C++ 14 Warnung: Zu viele Template-Header für variable
template<T> T a;
template<> int a = 1;
was dazu führt:
Warnung: zu viele Template-Header für
a
(sollte 0 sein)
auch effektiv, ist es nicht wirklich a<int>
spezialisiert. z.B.
template<typename T> T a;
template<> int a = 1;
int main() {
std::cout << a<double> << "\n"; // prints 0; OK
std::cout << a<int> << "\n"; // prints 0! why not 1?
}
Was ist das Geheimnis dieser Syntax?
Das ist eine irreführende Warnung. Ich bin überrascht, dass es kein Fehler war. War es die einzige Diagnose? – Yakk
@Yakk, ja in g ++ - 5 das ist die einzige Diagnose. Bin mir nicht sicher, ob ich klingeln könnte. – iammilind
Ah, ich denke ich bekomme jetzt die Warnung! Es heißt 'int a = 1;' sollte 0 Template-Header haben, wobei 'template <' whatever '>' ein Template-Header ist. Stellen Sie sich vor, Sie hätten die 'Vorlage T a;' davor gelöscht - die Warnung ist sinnvoll. Immer noch schockierend, dass es eine Warnung ist, kein Fehler. –
Yakk