我正在尝试将一个遗留应用程序升级到C++20,但在GCC 11.1.0上未使用--std=c++20时会出现错误:
static_assert(std::is_integral_v<__uint128_t>, "Error: non-integral type");
为什么只有在使用C++20时出现故障,我该怎么解决?
std::integral_v
用于判断类型是否为内置或实现定义的“扩展整数类型”。GCC不支持扩展整数类型。
因此,根据规则,对于标准C++应该返回false。
static_assert
将编译使用 -std=gnu++20
,这将启用许多非标准行为。
uint128_t
(尚未有)。在这种情况下,要么__uint128_t
实际上不是作为整数类型实现的(也许它是一个结构/类类型?),要么它是一个整数类型,但是编译器供应商可能只是忘记了为其特化is_integral
。 - Remy Lebeau