该指令:
#ifndef __cplusplus
#error C++ is required
#elif __cplusplus < 201402L
#error C++14 is required
#endif
命令行:g++ -Wall -Wextra -std=c++14 -c -o header.o header.hpp
我的 g++ 版本:g++ (tdm-1) 4.9.2
错误C++14 is required
即使我添加了也会生成-std=c++14
,我不知道为什么。
请告诉我如何解决这个问题。
根据GCC CPP手册(版本4.9.2 https://gcc.gnu.org/onlinedocs/gcc-4.9.2/cpp/Standard-Predefined-Macros.html#Standard-Predefined-Macros and 5.1.0 https://gcc.gnu.org/onlinedocs/gcc-5.1.0/cpp/Standard-Predefined-Macros.html#Standard-Predefined-Macros):
__cplusplus
该宏是在使用C++编译器时定义的。您可以使用__cplusplus
测试头文件是由 C 编译器还是 C++ 编译器编译的。这个宏类似于__STDC_VERSION__
,因为它扩展为版本号。根据所选的语言标准,宏的值为199711L
,按照 1998 C++ 标准的规定;201103L
,根据 2011 C++ 标准;严格大于的未指定值201103L
对于启用的实验语言-std=c++1y
and -std=gnu++1y
.
你可以检查一下g++ --std=c++14
定义__cplusplus
as:
Version __cplusplus
4.8.3 201300L
4.9.2 201300L
5.1.0 201402L
For 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 支持。
要检查特定功能,您也可以尝试升压配置 http://www.boost.org/doc/libs/1_58_0/libs/config/doc/html/index.html(尤其不支持描述 C++14 功能的宏 http://www.boost.org/doc/libs/1_58_0/libs/config/doc/html/boost_config/boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_describe_c__14_features_not_supported).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)