如何判断编译器支持的哪个版本的ISO C ++标准?

时间:2011-08-20 14:58:54

标签: c++ c++11 standards

  

可能重复:
  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更完整。

2 个答案:

答案 0 :(得分:1)

查看__cplusplus

的值
  

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

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

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

答案 1 :(得分:1)

要按照我希望的方向跳起来,这里有一些我从g++ bug report收集的有用信息。

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