儘管遵守C 標準,但它明確允許在主模板可以存在的任何範圍內進行明確專業化已定義,所提供的程式碼在GCC 中顯示編譯錯誤,但在Clang 中則不然。這種差異引發了這樣的問題:這是否是 GCC 中的錯誤以及如何在其錯誤追蹤器中找到它。
根據[temp.expl.spec],第2 段,「可以在可以定義對應主模板的任何範圍。」但是,帶有-std=c 2a 的GCC HEAD 8.0.1 會產生一條錯誤訊息,指示在非命名空間範圍內不允許明確專業化。
這種與標準的偏差表明 GCC 中存在潛在錯誤。若要在錯誤追蹤器中找到此問題,可以在 GCC 錯誤資料庫中搜尋「明確專業化」或「範圍」。或者,可以直接使用錯誤回報系統報告該問題。
在這種情況下,該問題已報告為 Bug 85282,該錯誤承認該問題及其與 CWG 727 修正案的不一致。該修正案修訂了標準,允許在可以定義主模板的任何範圍內進行明確專業化。
此錯誤的含義是,GCC 使用者在嘗試在命名空間範圍之外聲明顯式專業化時可能會遇到編譯問題,儘管 C 標準允許這樣的聲明。為了緩解這個問題,使用者可以針對非 GCC 編譯器,或將顯式專業化封裝在命名空間中,這是目前唯一與 GCC 對標準的解釋相容的範圍。
以上是為什麼 GCC 無法編譯非命名空間範圍內的顯式專業化?的詳細內容。更多資訊請關注PHP中文網其他相關文章!