繁体   English   中英

__cplusplus <201402L即使我指定-std = c ++ 14,也会在gcc中返回true

[英]__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 ,我不知道为什么。

请告诉我如何解决这个问题。

根据GCC CPP手册(版本4.9.25.1.0 ):

__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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM