为什么在C++20中std::is_integral<__uint128_t>的值为false?

3

我正在尝试将一个遗留应用程序升级到C++20,但在GCC 11.1.0上未使用--std=c++20时会出现错误:

static_assert(std::is_integral_v<__uint128_t>, "Error: non-integral type");

为什么只有在使用C++20时出现故障,我该怎么解决?


1
使用-std=gnu++20可以帮助吗? - Marc Glisse
9
任何以双下划线开头的类型都是为编译器或标准库实现保留的。在标准C++中没有原生的uint128_t(尚未有)。在这种情况下,要么__uint128_t实际上不是作为整数类型实现的(也许它是一个结构/类类型?),要么它是一个整数类型,但是编译器供应商可能只是忘记了为其特化is_integral - Remy Lebeau
2
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=50441 - Marc Glisse
1个回答

0

std::integral_v 用于判断类型是否为内置或实现定义的“扩展整数类型”。GCC不支持扩展整数类型。

因此,根据规则,对于标准C++应该返回false。

static_assert 将编译使用 -std=gnu++20,这将启用许多非标准行为。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接