[英]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;
templates
的C ++語法規則具有用於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.