c++ - 双右尖括号 (>>) 在特定情况下会产生语法错误

标签 c++ eclipse templates c++11 language-lawyer

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

static_cast<Vec<int, DIM>>(a.mul(b));

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

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

Node<Element<DIM>> * e= a.get();

为什么在上述特定情况下会出现错误?这不是 error: 'varName' was not declared in this scope 的拷贝,因为我特别询问为什么我的编译器有时会接受 >>>,但并非总是如此。

最佳答案

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

>>>>>* 这样的示例属于旧解析器的不同情况,因此它们可以正常工作而不会出现错误消息。


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

关于c++ - 双右尖括号 (>>) 在特定情况下会产生语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29331315/

相关文章:

c++ - 为什么这个 typedef 不起作用

c++ - 如何从 boost::hana::tuple_t 中检索类型?

c++ - 将 C++ 代码部署到 Github 期间的 .lib 和 .dll

eclipse - 如何在 Eclipse IDE 中拆分和取消拆分窗口/ View ?

java - 右键单击 Sonar 选项不可用

python - 找不到有效的 MSVC 版本

java - 使用 Eclipse 编写 Java GUI

c++ - 方法作为回调

c++ - 将实例变量类型映射到模板成员函数

c++ - 内部类的模板编译错误