有没有办法确定C ++编译器实现的语言功能?

时间:2015-12-15 19:44:46

标签: c++ c++11 c++14

不同的C ++编译器在不同的时间点实现各种语言功能(例如,参见clang C++ statusgcc c++ status;同样适用于其他编译器)。在创建C ++库时,通常需要支持最新功能以改善用户体验。当支持新功能而不是在任何地方实现的公共子集时,了解编译器支持哪些功能而不必为每个编译器支持一组版本号是有帮助的。

是否有合理标准化的功能测试集可以在编译时用于确定编译器是否支持特定的语言功能?

2 个答案:

答案 0 :(得分:5)

您可能无法比Boost.Config库做得更好。它定义了各种C ++ 11和C ++ 14特性的预处理器宏,这些特性在VC ++等C ++ 11/14-ish编译器上并不普遍支持。它就像你要达到标准一样接近。

IIRC,它与autoconf类似,通过预建(并在必要时执行)一堆简单的测试程序。我不认为你会得到任何完全在编译时运行的东西,只是因为在一个实现中存在关键字,而在另一个实现中存在语法错误。

答案 1 :(得分:2)

我还没有尝试过使用这些建议,但在C ++委员会会议上,功能测试SG(SG10)会议并更新推荐列表。 Here是列出当前功能测试宏的最新文档:有各种语言级功能的宏。期望在将新功能投入工作草案时更新文档P0096rx。

本文档标准文档:标准要求实施语言标准,标准化宏指示是否实现特定功能没有意义!实现要么完全符合要么不符合要求。但是,期望编译器供应商确实使用这些宏作为帮助用户的指导。