【问题标题】:"template" disambiguator is c++11. Any chance for VS2008 compiler?“模板”消歧器是 c++11。 VS2008编译器有机会吗?
【发布时间】:2013-04-10 08:05:02
【问题描述】:

几周前I posted this question 收到一条奇怪的错误消息。罪魁祸首是对

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

你知道如何解决吗?具体

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

【问题讨论】:

标签: c++ templates visual-studio-2008 g++


【解决方案1】:

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

【讨论】:

  • 当然,Visual Studio 必须支持两阶段查找才有意义...
  • 为什么VS2008编译器不识别呢?
  • @NicolBolas 当然。这里的很多海报有时会提出 C++11 解决方案,但许多用户仍然坚持使用 VC++,可以说它仍然不支持 C++98,更不用说任何更新的东西了。我的舌头在我的脸颊上,我想说,如果你使用的是 VC++,你不能使用比 ARM 更新的东西(还不是标准的 C++ 1990 版)。
  • @StefanoBorini 因为 VS2008 仍然实现了 ARM 中定义的 C++(我认为是 1990 年);它仍然没有实现 C++98,更不用说 C++03 或 C++11。基本上,如果可移植性(对于较新的编译器或其他系统)是一个问题,并且您必须支持 VC++,那么您甚至不能使用模板,更不用说最近的功能了。 (实际上,当然,可以编写适用于两种模型的模板代码。但你必须保持简单。如果你需要template disabiguator,你的使用太复杂了。 )
猜你喜欢
  • 2011-05-03
  • 2010-12-27
  • 2010-11-24
  • 1970-01-01
  • 2015-07-09
  • 1970-01-01
  • 1970-01-01
  • 2013-03-14
  • 2021-04-24
相关资源
最近更新 更多