c++ - 我如何知道我的编译器是否支持 XXXX C++11 功能?

标签 c++ compiler-construction c++11 cross-compiling preprocessor-directive

<分区>

Possible Duplicate:
How do I check for C++11 support?

我正在编写一个小型库,我想在编译器支持时使用类枚举。我还想使用其他 C++11 功能,例如 finaloverride 关键字。

到目前为止,我已经使用一些技巧来确保它在所有版本的 GCC 上编译,但是当我启动我的 Windows 分区时,Visual Studio 2010 也开始报错。这是我使用的技巧的示例:

#if __GNUC__ == 4 && (__GNUC_MINOR__ > 7 || \
      (__GNUC_MINOR__ == 7 && __GNUC_PATCHLEVEL__ > 1))
#   define TATO_OVERRIDE override
#   define TATO_NO_THROW nothrow
#else
#   define TATO_OVERRIDE
#   define TATO_NO_THROW throw()
#endif

我知道最新版本的 Visual Studio 也已经支持了一批新功能。我想要的是类似于一组宏的东西,它告诉我我正在使用的编译器上有哪些功能可用。

#ifdef THIS_COMPILER_SUPPORTS_CLASS_ENUMS
  ...
#endif

这存在吗?有这样做的图书馆吗?


The compiler’s documentation?

让我澄清一下。我知道如何找到这些信息,我的问题在别处。我不想通过所有可能的编译器文档来收集这些信息,尤其是因为同一个编译器可能支持不同版本的不同功能。这是我到目前为止一直在做的事情,而我正在寻找的实际上是一种不这样做的方法。

最佳答案

Boost 实际上有 a wide range of such macros可用的。你可以用那个。否则,唯一的方法就是从根本上检查编译器的版本,并使用您对该版本支持的功能的了解来决定某个功能是否可用。

本质上,Boost 所做的,除了手动操作。

关于c++ - 我如何知道我的编译器是否支持 XXXX C++11 功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12821719/

相关文章:

c++ - 在非 constexpr 函数上添加的 constexpr 限定符不会触发任何警告

C++ 在数组中存储任何子结构/类?

c++ - 访问 std :vector of std:vector in a class with another std:vector 的类成员

c++ - 对应于C++的MAKEWORD(2,2)的VBA值?

visual-c++ - 一次将所有源文件传递给编译器有什么好处吗?

c++ - 从复制构造函数调用构造函数

c++ - 重置线程事件 - C++

c++ - 我可以在编译和链接时将 C++ 主函数和类与 Objective-C 和/或 C 例程分开吗?

c - 执行使用 lex 和 yacc 工具开发的 c 文件时出错

c++ - 如何使用双重检查锁来初始化 shared_ptr