template <int K>
class Wrap
{
// stuffs
};
如果我实例化Wrap < 5>4 > p;
之类的模板有什么问题?
我在数值常量错误之前得到预期的不合格ID。如何解决这个问题?
答案 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;代替。