GCC-Fehler: Explizite Spezialisierung im Nicht-Namespace-Bereich
Frage:
Warum? Der folgende Code kann in GCC nicht kompiliert werden, wenn eine Member-Funktionsvorlage explizit in a spezialisiert wird Klasse?
template<typename T> struct Widget { template<typename U> void foo(U) { } template<> void foo(int*) { } };
Antwort:
Gemäß dem C-Standard ([temp.expl.spec], Absatz 2) können in jedem explizite Spezialisierungen deklariert werden Bereich, in dem die entsprechende primäre Vorlage definiert werden kann. Daher sollte der Code auch in GCC kompiliert werden.
GCC-Fehler und Berichte:
Dieser Fehler beim Kompilieren in GCC ist wahrscheinlich ein Fehler. Um es zu melden, befolgen Sie diese Schritte:
Standardreferenz:
Im C-Standardabschnitt [temp.expl.spec] Absatz 2 heißt es:
Eine explizite Spezialisierung kann deklariert werden in jedem Bereich, in dem die entsprechende primäre Vorlage definiert werden kann.
Das obige ist der detaillierte Inhalt vonWarum kann GCC keine expliziten Spezialisierungen von Member-Funktionsvorlagen innerhalb einer Klasse kompilieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!