如何通过预处理宏检测Visual Studio(VS) C++编译器是否支持C++11?我试过使用__cplusplus
(许多人建议用于这种检查的预处理宏),但在VS C++ 2010编译器下失败了(即函数get_dimension
从未被声明):
#if __cplusplus > 199711L
int get_dimension(int index);
#endif
如何通过预处理宏检测Visual Studio(VS) C++编译器是否支持C++11?我试过使用__cplusplus
(许多人建议用于这种检查的预处理宏),但在VS C++ 2010编译器下失败了(即函数get_dimension
从未被声明):
#if __cplusplus > 199711L
int get_dimension(int index);
#endif
_MSVC_LANG
进行检查。
__cplusplus
是一种语言多编译器的高级解决方案,但不幸的是,在MSVC
中需要启用它才能有意义地使用(并且可能不支持非常旧的版本)。这对于使用例如gcc
的人来说非常棒,因为它默认设置了版本(大多数这些人也会认为它在MSVC
上也适用)。因此,只有在您需要支持许多编译器时才需要担心,并且即使在这种情况下,我也会考虑为某些编译器添加特殊检查,即MSVC
。您需要使用#if __cplusplus >= 201103L
来检查编译器是否完全符合C++11标准。如果返回false,则表示编译器不支持C++11或仅支持其子集。
现在,如果您只需要使用C++11中的一些特定功能,则可以使用Boost进行检查。例如,如果您需要constexpr
支持,则使用:
#ifndef BOOST_NO_CXX11_CONSTEXPR
你也可以使用一些{{link1:宏},允许在C++03编译器中使用C++11特性},例如BOOST_CONSTEXPR
但更好的解决方案是使用_MSC_VER
或_MSC_FULL_VER
完全排除古老的编译器。
#if _MSC_VER > 1600