3

几周前,我发布了这个关于奇怪错误消息的问题。罪魁祸首是对 < 标记的错误解析,通过使用“模板”消歧器关键字解决了这个问题。

不过,我们发现了一个意想不到的丑陋惊喜。模板消歧器是c++11,但是我们需要支持VS2008,不支持。所以我们基本上从在 Windows 上编译但不在 linux 上编译的东西变成了在 linux 上编译但不在 Windows 上编译的东西。

你知道如何解决吗?具体来说

  • Windows 编译器中是否有一个神奇的选项来启用这个 c++11 构造,或者
  • 在旧的 c++ 标准中有另一种方法可以解决这种歧义,它也是交叉编译器,或者
  • 如果我们需要使用预处理器,区分两个编译器的预处理器常量(如果有的话)是什么(gcc是另一个)
4

1 回答 1

8

自 C++98 以来,模板消除器一直是 C++ 的一部分。它是在引入两阶段查找时引入的,以及typename.

于 2013-04-10T08:07:37.800 回答