【问题标题】:How can you tell which version of the ISO C++ standard your compiler supports? [duplicate]您如何知道您的编译器支持哪个版本的 ISO C++ 标准? [复制]
【发布时间】:2011-08-20 14:58:54
【问题描述】:

可能重复:
How to determine the version of the C++ standard used by the compiler?

您的程序有没有办法在编译时确定这一点?有可以使用的预处理器宏吗?

我知道 g++ 有这个nice matrix of c++0x/c++11 feature support。这对于其他流行的编译器是否存在?是否有任何标准(事实上或其他)方法可以使用预处理器来测试给定特征的存在?

有一个关于这个的问题,但答案似乎不是很完整:How to determine the version of the C++ standard used by the compiler?

我知道 Boost.Config 可以做到这一点,但它是如何做到的呢?很高兴知道我是否出于某种原因不想使用 Boost。

我将其作为副本关闭,因为有人编辑了 answers in the original question 之一以使其更加完整。

【问题讨论】:

  • @Bo Persson - 我很想自己删除这个问题。这个问题没有特别有用的答案。哎呀,我在 g++ 错误报告中找到了比那个问题更有用的答案。也没有人在这里为任何体面的答案而烦恼。
  • @Omnifarious - 我添加了一个特征矩阵的链接,类似于 boost.config 中使用的一个 boost。
  • 我认为没有任何语言标准答案,只有编译器手册记录了 C++11 支持的数量。委员会特别拒绝了为部分实现使用宏的想法。他们希望编译器实现整个语言!
  • 啊哈哈..third time today...
  • @Tomalak - 凭借 C++0x 投票产生的新闻,它很可能不会是最后一个......

标签: c++ c++11 standards


【解决方案1】:

__cplusplus的值

在 C++0x 中,宏 __cplusplus 将设置为不同的值 从(大于)当前的 199711L。

http://predef.sf.net 有一些用于检测特定标准的值。

您所链接的问题上的Boost.Config recommendation 也是很好的建议,并提供了更细粒度的答案。我认为它基本上编码了feature matrix 并定期更新它。

【讨论】:

  • 哪些值对应哪些标准?
  • 而且,实际上(这是 g++ 中的一个错误)g++ 将此宏定义为 1,即使您在命令行上指定了 -std=c++0x
  • 这可能是承认他们的支持不完整。不过,它使 Boost.Config 更有价值。
  • wiki.apache.org/stdcxx/C%2B%2B0xCompilerSupport 也有一个有用的特征矩阵。
  • Apache wiki 正是我正在寻找的那种东西。
【解决方案2】:

要朝着我希望的方向快速开始,这里有一些我从g++ bug report 收集到的有用信息。

  • C++ pre-C++98:__cplusplus1
  • C++98:__cplusplus199711L
  • C++0x/11:__cplusplus201103L

【讨论】:

    猜你喜欢
    • 2020-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-17
    • 1970-01-01
    • 2010-10-20
    • 1970-01-01
    相关资源
    最近更新 更多