首頁  >  文章  >  後端開發  >  為什麼 GCC 無法編譯非命名空間範圍內的顯式專業化?

為什麼 GCC 無法編譯非命名空間範圍內的顯式專業化?

Susan Sarandon
Susan Sarandon原創
2024-11-22 00:08:10375瀏覽

Why Does GCC Fail to Compile Explicit Specializations in Non-Namespace Scope?

非命名空間範圍內的明確專業化:GCC 編譯問題

儘管遵守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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn