双右尖括号 (>>) 会生成语法错误

Mic*_*ael 6 c++ eclipse templates language-lawyer c++11

Eclipse(Luna,4.4.2)告诉我以下行有语法错误:

static_cast<Vec<int, DIM>>(a.mul(b));
Run Code Online (Sandbox Code Playgroud)

我记得双右尖括号>>可能会导致某些编译器出现问题,所以我在中间添加了一个空格:> >。语法错误消失。

但是,>>我的程序中有很多没有检测到语法错误,例如:

Node<Element<DIM>> * e= a.get();
Run Code Online (Sandbox Code Playgroud)

为什么我会在上述特定情况下收到错误?这与错误相关:“varName”未在此范围内声明,但我不知道为什么我的编译器>>有时会接受 a,但并非总是如此。

πάν*_*ῥεῖ 8

您使用了 c++11 之前的标准编译器。旧标准有一个问题,让解析器消除嵌套>>模板类型说明符中使用的一对右尖括号的歧义operator>>()。因此你必须在它们之间写一个空格。

对于旧的解析器来说,这些样本类似于>>>>>*属于不同的情况,因此它们工作时不会出现错误消息。


我必须承认,我实际上并不知道 c++11(当前)标准定义中到底做了什么,这种情况可以通过符合 c++11 的解析器清楚地消除歧义。