[英]__cplusplus < 201402L return true in gcc even when I specified -std=c++14
指令:
#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
即使我添加了-std=c++14
,也会生成错误C++14 is required
,我不知道为什么。
请告诉我如何解决这个问题。
__cplusplus
此宏在使用C ++编译器时定义。 您可以使用__cplusplus
来测试标头是由C编译器还是C ++编译器编译。 此宏类似于__STDC_VERSION__
,因为它扩展为版本号。 根据所选择的语言标准,宏的值是199711L
,符合1998 C ++标准;201103L
,符合2011 C ++标准; 对于由-std=c++1y
和-std=gnu++1y
启用的实验语言, 严格大于201103L
的未指定值 。
您可以检查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功能的宏 )。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.