簡體   English   中英

功能模板失敗

[英]Function template failing in clang

我有這段代碼,以前可以使用Microsoft編譯器很好地進行編譯。 我現在已切換到clang,並收到以下錯誤:

錯誤16錯誤:預期的會員名稱或';' 聲明后聲明者

--

錯誤15錯誤:“類型名”后應為合格名稱

用於代碼行

template<typename PRIM> typename const PRIM::OutputPtrType          GetData(unsigned long index = 0) const;

有人知道問題出在哪里嗎?

將您的typename const切換為const typename

template<typename PRIM> const typename PRIM::OutputPtrType          GetData(unsigned long index = 0) const;

templatesC ++語法規則具有用於typename的條目,該條目指示:

類型名... opt標識符opt

類型名嵌套名稱說明符

const不是identifier而是cv-qualifier 您上下文中的標識符是從屬名稱。 基本上是PRIM::OutputPtrType ,因為OutputPtrType將取決於名稱PRIM 對於第二行,我們可以更准確地說是PRIM::是一個嵌套名稱說明符。

編輯

$ 14.6:1當限定ID引用的類型不是當前實例的成員( [temp.dep.type] )且其nested-name-specifier引用從屬類型時,應加前綴由關鍵字typename組成一個typename-specifier。 如果typename-specifier中的qualified-id不表示類型,則程序格式錯誤。

 typename-specifier: typename nested-name-specifier identifier typename nested-name-specifier templateopt simple-template-id 

您必須將const向右移動:

template<typename PRIM>
typename PRIM::OutputPtrType const GetData(unsigned long index = 0) const;
                             ^^^^^

或在左側:

template<typename PRIM>
const typename PRIM::OutputPtrType GetData(unsigned long index = 0) const;
^^^^^

在這種情況下,在typename關鍵字之后,編譯器需要一個限定名稱。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM