GCC-Inkonsistenz mit Standard für explizite Spezialisierung im Nicht-Namespace-Bereich
Der C-Standard erlaubt explizit die Deklaration expliziter Vorlagenspezialisierungen in jedem Bereich Hier kann die entsprechende primäre Vorlage definiert werden. Allerdings weicht das Verhalten von GCC von diesem Standard ab. Diese Diskrepanz wurde in neueren Versionen von GCC beobachtet, wo explizite Spezialisierungen, die außerhalb eines Namespace deklariert wurden, nicht kompiliert werden konnten.
Um das Problem zu veranschaulichen, betrachten Sie den folgenden Code:
template<typename T> struct Widget { template<typename U> void foo(U) { } template<> void foo(int*) { } };
While this Wenn der Code in Clang erfolgreich kompiliert wird, tritt in GCC ein Fehler auf:
error: explicit specialization in non-namespace scope 'struct Widget<T>'
Dieser Fehler steht im Widerspruch zum C-Standard, der explizit eine explizite Spezialisierung im Nicht-Namespace-Bereich zulässt. Gemäß Absatz 2 von [temp.expl.spec] im C-Standard:
„Eine explizite Spezialisierung kann in jedem Bereich deklariert werden, in dem die entsprechende primäre Vorlage definiert werden kann.“
Diese Abweichung vom Standard stellt einen potenziellen Fehler in GCC dar. Um dieses Problem zu melden, befolgen Sie diese Schritte:
Indem Sie dieses Problem melden, können Sie einen Beitrag leisten zur Verbesserung von GCC beitragen und sicherstellen, dass es vollständig dem C-Standard entspricht.
Das obige ist der detaillierte Inhalt vonWarum lehnt GCC eine explizite Spezialisierung außerhalb eines Namespace ab?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!