Explizite Spezialisierung im Nicht-Namespace-Bereich
Der angegebene Code kann trotz erfolgreicher Kompilierung in Clang nicht in GCC kompiliert werden. Gemäß dem C-Standard ([temp.expl.spec]) können explizite Spezialisierungen in jedem Bereich deklariert werden, in dem die entsprechende primäre Vorlage definiert werden könnte.
Dieses Verhalten scheint ein Fehler in GCC zu sein. Gemäß CWG 727 wurde die Regel in [temp.expl.spec] bezüglich der expliziten Spezialisierung geändert, um solche Deklarationen in jedem relevanten Bereich zuzulassen.
Bereich der expliziten Spezialisierung
Der ursprüngliche Standard besagte, dass die explizite Spezialisierung in einem Namespace deklariert werden sollte, der die spezialisierte Vorlage umschließt. Der aktuelle Standard erlaubt jedoch eine explizite Spezialisierung in jedem Bereich, in dem die primäre Vorlage definiert werden kann:
Die Nichteinhaltung dieser aktualisierten Regel durch GCC stellt einen Fehler dar. Das Problem wurde als Bug 85282 identifiziert und wird derzeit vom GCC-Entwicklungsteam verfolgt.
Das obige ist der detaillierte Inhalt vonWarum kann GCC keine explizite Spezialisierung im Nicht-Namespace-Bereich kompilieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!