C 11功能的可用性

编译器供应商已经采用零散的C 11功能,这是可预测的,因为其中许多功能都不易实现.

报告编译器完全支持的规范的标准方法是通过__cplusplus预定义宏.但是,主要供应商报告__cplusplus = 199711L,这意味着他们只是完全支持C 98(例如MSVC14).这(大概)意味着它们并不完全支持C 11规范,即使它们可能实现了大部分功能.

我想开始使用C 11功能,当它们可用时(并且当它们不可用时回退到现有代码).但是,我的代码必须支持许多编译器,包括我可能无法使用的专有编译器.有没有标准的方法可以知道编译器可以使用哪些C 11功能,而不知道具体使用哪个编译器? (如果编译器以非标准方式运行,则检测行为可能是不正确的).

注意:这个问题是对我的问题’Availability of static_assert c++11‘的概括,这个问题并不是很受欢迎,因为我觉得我的动机被误解了.

解决方法

您可能对 feature test macros感兴趣,它使您能够测试特定的C 11,C 14甚至C 17功能,例如__cpp_static_assert,__ cpp_lib_make_unique或__cpp_variable_templates. Clang和GCC已经支持这一点,见 live demo.

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...