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

问题描述:

可能重复:
How to determine the version of the C++ standard used by the compiler?如何判断编译器支持哪种版本的ISO C++标准?

是否有你的程序,以确定这在编译时的方法吗?是否有可以使用的预处理宏?

我知道,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的一个更加完整。

+0

@Bo佩尔松 - 我很想删除这个问题,我自己的无奈。这个问题没有特别有用的答案。哎呀,我在g ++ bug报告中找到了比这个问题更有用的答案。也没有人在这里得到任何体面的答案。 – Omnifarious

+0

@Omnifarious - 我添加了一个链接到一个功能矩阵,类似于boost.config将使用的一个boost。 – Flexo

+0

我不认为有任何语言标准答案,只是编译手册记录了C++ 11支持的数量。该委员会明确拒绝了部分实施宏的想法。他们希望编译器实现整个语言! –

看的__cplusplus

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

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

你链接到问题的Boost.Config recommendation是很好的建议太,并提供一个更细粒度的答案。我认为它基本上编写了一个feature matrix并定期更新它。

+0

哪些值对应于哪些标准? – Omnifarious

+0

而且,作为一个实际问题(这是g ++中的一个bug)g ++将该宏定义为'1',即使您在该命令中指定了'-std = C++ 0x' – Omnifarious

+0

,这可能是他们支持不完整的证明,它使得Boost.Config变得更有价值, – Flexo

要跳,我希望它会去的方向开始这一点,这里是我从一个g++ bug report收集一些有用的信息。

  • C++ pre-C++ 98:__cplusplus is 1
  • C++ 98:__cplusplus199711L
  • C++ 0x/11:__cplusplus201103L