在数字常量之前预期的nonqualified-id

时间:2011-05-26 18:24:00

标签: c++ templates

template <int K>
class Wrap
{
   // stuffs
};

如果我实例化Wrap < 5>4 > p;之类的模板有什么问题? 我在数值常量错误之前得到预期的不合格ID。如何解决这个问题?

3 个答案:

答案 0 :(得分:13)

Wrap < 5>4 > p;更改为Wrap < (5>4) > p;

遇到的第一个>被视为模板参数列表的结尾,而不是大于运算符>

ISO C ++ [14.2 / 3]

  

解析template-id时,第一个非嵌套>被视为模板的结尾     参数列表而不是大于运算符。

答案 1 :(得分:8)

  

如果我实例化Wrap < 5>4 > p;

这样的模板,会出现什么问题

通过查看声明,这应该是直观明显的:即使对人类来说也是如此令人困惑!编译器无法在这里处理>的双重含义:它是否意味着“大于”?这是否意味着“关闭模板参数列表”?事实证明,它意味着两者,并且编译器没有提示应用于哪个含义。两者都是技术上有效的解析。

答案 2 :(得分:2)

歧义。使用Wrap&lt;(5&gt; 4)&gt;代替。