2012-04-19 61 views
7

如何检查单个C++ 0x/C++ 11语言功能的存在?我知道Clang有一个很好的系统。 GCC,Visual Studio或Boost呢?我想一种方法是检测编译器版本并将其与该版本中引入的功能相关联。但这很麻烦。有人已经做到了吗?C++ 11功能检查

+1

直接的答案是编写一个具有该功能的代码并编译它。 – iammilind 2012-04-19 09:58:15

+0

为什么这个问题要关闭? – 2012-04-19 10:15:14

+0

@Nordlöw:两人投票决定将其作为[此问题]的副本关闭(http://stackoverflow.com/q/6095885/636019)。 – ildjarn 2012-04-19 17:26:31

回答

3

boost config附带脚本来检查一些但不是全部的C++ 11功能。

它为每个功能生成一个包含宏的配置文件。

+0

我认为你的意思是在*之后写一些东西。无论如何,是的Boost.Config可能是最好的选择。 Boost家伙已经追踪到了这些信息,所以人们不必这样做:他们错误地编译器团队知道它何时足够稳定可以被广告,或者在Clang请求新的检查标志的情况下。 – 2012-04-19 10:28:35

+0

其实这是一个草案答案剩下的。我将删除它。谢谢。 – mirk 2012-04-19 10:31:07

3

您的构建工具可以帮助解决这个问题。

CMake有try_compile命令,它允许您测试代码示例是否将编译并根据编译结果设置变量。

目前我刚刚使用更常用的功能,如auto打字。

您可以经常使用Boost替换缺失的库功能,这可能是在编译器和库更新并修复错误后几年的最佳选择。

对GCC的C++ 11功能兼容性列表在这里:http://gcc.gnu.org/projects/cxx0x.html

注意警告:

重要提示:GCC对C++ 11的支持仍处于试验阶段。某些功能是基于早期的建议实现的,当它们更新以匹配最终的C++ 11标准时,不会尝试保持向后兼容性。