首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++20不可用

C++20不可用
EN

Stack Overflow用户
提问于 2022-10-26 17:51:22
回答 2查看 96关注 0票数 0

我目前正在使用gcc / g++构建代码,如下所示:

代码语言:javascript
复制
g++-10 -std=c++2a -Wall -Wextra -c -o hw01.o hw01.cpp

( gcc-10,gcc,g++也有相同的结果)和我的代码中有一个静态检查:

代码语言:javascript
复制
static_assert(__cplusplus >= 202002L);

可惜每次都失败了。据我所知,使用的C++版本取决于gcc和它的版本。gcc-10的版本为10.3.0,而gcc命令使用的是9.4.0版本,因此这两种命令都应该能够使用build命令中指定的C++20。然而,在查看VsCode时,变量__cplusplus的计算结果为201402L,因此导致断言失败。

即使在卸载/重新安装编译器(或sudo apt删除cpp)时,此问题仍然存在。

有什么帮助吗?如何让我的系统使用更新的C++版本?

PS:我正在开发Ubuntu (主机系统是Windows 10)

编辑:因为大多数推荐都是忽略静态测试和f.e。测试一个不同的__cplusplus值或简单地扔掉测试,我这样做是为了一个大学作业。satic测试是不可转让的,不能更改,也不能更改.我必须通过更改本地C++版本的构建值来通过测试,我只是不知道如何通过。

EN

回答 2

Stack Overflow用户

发布于 2022-10-26 18:06:27

在对未来的标准版本进行标准化之前,不知道未来版本的实际值。在标准化之前“支持”新版本的编译器必须选择一个比旧版本更大的值,但不会有“标准”值。

不过,您可以做的是检查__cplusplus是否大于上一个标准的版本。例如,__cplusplus in C++17具有值201703,因此GCC 10.3 returns of 201709值大于该值,因此您“知道”您的版本比C++17更新。

票数 0
EN

Stack Overflow用户

发布于 2022-10-26 19:37:27

__cplusplus是为了回答以下问题:“这个实现声称支持什么版本的C++?”这是一个非常广泛的问题,特别是在“支持”的确切定义方面。

GCC 10.3认为其对C++20的支持不足以满足某种“支持”的定义。因此,它并不声称“支持”C++20,即使这是您所要求的版本。

这不是你能改变的东西。没有编译器可以强迫GCC以不同的方式回答这个问题。

如果您不能将GCC升级到一个愿意声称“支持”C++20的版本,并且您不能删除或更改更改,那么您就不走运了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74212149

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档