如何判断编译器支持哪种版本的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的一个更加完整。
看的__cplusplus
值在C++ 0X宏__cplusplus将被设置为从不同 的值(大于)当前199711L。
http://predef.sf.net对检测特定标准具有一些价值。
你链接到问题的Boost.Config recommendation是很好的建议太,并提供一个更细粒度的答案。我认为它基本上编写了一个feature matrix并定期更新它。
哪些值对应于哪些标准? – Omnifarious
而且,作为一个实际问题(这是g ++中的一个bug)g ++将该宏定义为'1',即使您在该命令中指定了'-std = C++ 0x' – Omnifarious
,这可能是他们支持不完整的证明,它使得Boost.Config变得更有价值, – Flexo
要跳,我希望它会去的方向开始这一点,这里是我从一个g++ bug report收集一些有用的信息。
- C++ pre-C++ 98:
__cplusplus
is1
。 - C++ 98:
__cplusplus
是199711L
。 - C++ 0x/11:
__cplusplus
是201103L
。
@Bo佩尔松 - 我很想删除这个问题,我自己的无奈。这个问题没有特别有用的答案。哎呀,我在g ++ bug报告中找到了比这个问题更有用的答案。也没有人在这里得到任何体面的答案。 – Omnifarious
@Omnifarious - 我添加了一个链接到一个功能矩阵,类似于boost.config将使用的一个boost。 – Flexo
我不认为有任何语言标准答案,只是编译手册记录了C++ 11支持的数量。该委员会明确拒绝了部分实施宏的想法。他们希望编译器实现整个语言! –