首頁  >  文章  >  後端開發  >  為什麼 GCC 無法編譯類別中成員函數模板的明確特化?

為什麼 GCC 無法編譯類別中成員函數模板的明確特化?

DDD
DDD原創
2024-11-24 12:52:43345瀏覽

Why Does GCC Fail to Compile Explicit Specializations of Member Function Templates Within a Class?

GCC 錯誤:非命名空間範圍中的顯式專業化

問題:

為什麼當在a 中明確專門化成員函數模板時,以下程式碼無法在GCC 中編譯類別?

template<typename T>
struct Widget
{
    template<typename U>
    void foo(U)
    {
    }

    template<>
    void foo(int*)
    {
    }
};

答案:

根據C 標準([temp.expl.spec],第2 段),明確特化可以在任何可以定義相應的主模板的範圍。因此,程式碼也應該在 GCC 中編譯。

GCC 錯誤和報告:

在 GCC 中編譯失敗可能是錯誤。要回報問題,請按照以下步驟操作:

  1. 在 https://gcc.gnus.org/bugzilla/index.cgi 建立錯誤報告。
  2. 分配「C」元件以及適當的 GCC 版本(例如「8」)。
  3. 提供問題的描述,包括您收到的錯誤訊息和預期行為。
  4. 將最小的可重現程式碼片段(例如您提供的程式碼)附加到報告中。

標準參考:

C 標準部分[temp.expl.spec] 第2 段指出:

An明確專業化可以在定義相應主模板的任何範圍內聲明。

以上是為什麼 GCC 無法編譯類別中成員函數模板的明確特化?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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