对于嵌套模板,何时`>>`成为标准C++(而不是`>>``)?

Jim*_*mmy 26 c++ templates

我似乎记得,在过去的时候,>在处理嵌套模板参数时,要警告不要将两个字符紧挨着(没有空格).我甚至模糊地记得声明向量的向量,并遇到这个编译错误.

但现在我发现编译可怕的东西绝对没有错>>...

我的问题是这样的:

该公约在什么时候成为可接受的做法?

它是标准C++的一部分吗?

它是否始终是标准的一部分,我在大学里使用的编译器(以及我所拥有的教授)只是不支持它?

也许这些问题有点历史,但对我而言,正确的历史背景似乎使得实际的记忆变得微不足道.

Joh*_*nck 24

关闭模板嵌套>>正式支持在即将到来的标准的C++ 0x(现在的C++ 11).以前你需要空间,或者需要为你付出额外努力的编译器(并且做了标准没有指出的事情).

问题源于这样一个事实:>>在C中是右移运算符,它是一个单一的词法标记,它与>在经典构造的C++编译器中解析阶段所需的两个独立标记冲突(并且仅在模板的情况,而不是实际上是右移的情况).换句话说,>>如果允许关闭嵌套模板,则在词法上是不明确的,但在解析过程中可以(并且正在)通过额外的复杂性来解决(在现代C++中它实际上并不新鲜).