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

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

Susan Sarandon
Susan Sarandon原創
2024-11-16 05:40:03135瀏覽

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

非命名空間範圍中的顯式專業化

儘管在Clang 中成功編譯,但給定的程式碼無法在GCC 中編譯。根據 C 標準 ([temp.expl.spec]),可以在可以定義對應主模板的任何範圍內聲音明顯式特化。

此行為似乎是 GCC 中的一個錯誤。根據 CWG 727,[temp.expl.spec] 中有關明確專業化的規則已被修改,以允許在任何相關範圍內進行此類聲明。

明確專業化的範圍

原始標準規定,顯式專業化應該在包含專業模板的命名空間中聲明。但是,目前標準允許在可以定義主模板的任何範圍內明確專業化:

  • 類別定義(12.2)
  • 成員函數(17.6.2)
  • 內嵌命名空間(10.3.1.2)

GCC的不遵守此更新規則將構成錯誤。該問題已被識別為 Bug 85282,目前由 GCC 開發團隊追蹤。

以上是為什麼 GCC 無法在非命名空間範圍內編譯顯式專業化?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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