根据 GCC CPP 手册(版本4.9.2和5.1.0):
__cplusplus
该宏是在使用 C++ 编译器时定义的。您可以使用__cplusplus
来测试头文件是由 C 编译器还是 C++ 编译器编译的。这个宏类似于__STDC_VERSION__
,因为它扩展为一个版本号。根据选择的语言标准,宏的值是199711L
1998 C++ 标准所规定的;201103L
,根据 2011 C++ 标准;一个未指定的值,严格大于201103L
-std=c++1y
和启用的实验语言-std=gnu++1y
。
您可以检查g++ --std=c++14
定义__cplusplus
为:
Version __cplusplus
4.8.3 201300L
4.9.2 201300L
5.1.0 201402L
对于clang++ --std=c++14
:
Version __cplusplus
3.3 201305L
3.4 201305L
3.5.x 201402L
3.6 201402L
3.7 201402L
所以更安全的检查应该是:
#ifndef __cplusplus
# error C++ is required
#elif __cplusplus <= 201103L
# error C++14 is required
#endif
如评论中所述,这可能意味着部分 C++14 支持。
要检查特定功能,您还可以尝试Boost Config(尤其是描述不支持 C++14 功能的宏)。