我目前正在尝试使用GCC/g++构建代码,如下所示:
g++-10 -std=c++2a -Wall -Wextra -c -o hw01.o hw01.cpp
(GCC-10、GCC、g++也有相同的结果)和我的代码中有一个静态检查:
static_assert(__cplusplus >= 202002L);
遗憾的是,它每次都失败了。据我研究,使用的C版本取决于GCC及其版本。GCC-10的版本是10.3.0,而正常的GCC命令使用的是9.4.0版本,因此两者都应该能够使用Build命令中指定的C20。然而,当查看VsCode时,变量__cplusplus
的计算结果为201402L
,因此导致Assert失败。
即使在卸载/重新安装编译器(或sudo apt删除cpp)时,此问题仍然存在。
有什么帮助吗?如何让我的系统使用较新的C版本?
PS:我正在使用Ubuntu WSL(主机系统是Windows 10)
编辑:由于大多数建议都忽略了静态测试和有限元分析。测试__cplusplus的不同值,或者干脆放弃测试,我是为了一项大学作业而这样做的。SATIC测试是没有商量余地的,不能更改,也不能更改。我必须通过更改本地C版本的Build值来通过测试,我只是不知道如何通过。
2条答案
按热度按时间mgdq6dx11#
在未来的标准版本标准化之前,未来版本的实际价值是未知的。在标准化之前“支持”新版本的编译器将不得不选择一个比旧版本更大的值,但不会有“标准”值。
不过,您可以做的是检查
__cplusplus
是否高于以前标准的版本。例如,C17中的__cplusplus
的值为201703
,因此值GCC 10.3 returns of201709
大于该值,因此您“知道”您的版本比C17更新。h7appiyu2#
__cplusplus
旨在为以下问题提供答案:“这个实现声称支持什么版本的C++?”这是一个非常广泛的问题,特别是就“支持”的确切定义而言。GCC 10.3并不认为它对C20的支持足以满足某些“支持”的定义。因此,它并没有声称“支持”C20,即使这是您所要求的版本。
这不是你可以改变的事情。没有编译器选项可以强制GCC以不同的方式回答问题。
如果你不能把GCC升级到一个愿意宣称“支持”C++20的版本,而且你也不能删除或改变这个改变,那么你就倒霉了。