我得到前者的编译错误,但后者工作正常。
错误:'>>'应为'> >'在嵌套模板参数列表
中
谢谢
答案 0 :(得分:9)
在(现已废弃)修订版C ++ 98和C ++ 03中,字符序列“>>”被无条件地解释为“右移运算符”标记,因此如果要关闭多个模板参数列表,则需要留下一些插入的空格。
从C ++ 11开始,语言的词汇规则已被修改为解释“>>”因为两个连续的模板参数列表结束,并且不再需要空格。 (但是,这使得必须在模板参数列表中括起移位表达式。)
(同样的,当用作第一个模板参数时,C ++ 11也会以“明显的”方式(参数列表的开头,后面是命名空间限定符)解释<::foo
而不是消耗{ {1}}作为<:
的备用标记。)
答案 1 :(得分:4)
在C ++ 11之前,你必须使用空格来分隔嵌套模板中的尖括号 - 否则编译器会将其解释为右移运算符“&gt;&gt;”。在C ++ 11中,您可以省略空格,它将被解释为括号。
但是有些编译器(例如MSVC ++)忽略了标准,即使不使用C ++ 11标准也允许你省略空格。