[英]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.