自动模板参数:G++ 7.3 与 CLang++ 6.0:哪个编译器是正确的

auto template parameters: g++ 7.3 vs clang++ 6.0 : Which compiler is correct?

本文关键字:编译器 参数 G++ CLang++      更新时间:2023-10-16

两个编译器为此代码示例生成不同的结果。Clang 生成两种不同的类型。G++ 对 fufi 使用相同的类型。哪一个符合标准?

#include <iostream>
template< auto IVAL>
struct foo {
    decltype(IVAL) x = -IVAL;
};
int main()
{
    foo<10u> fu;
    foo<10> fi;
    std::cout << fi.x << " " << fu.x << 'n';
    return 0;
}

G++-7.3 输出:

4294967286 4294967286

叮当当-6.0 输出:

-10 4294967286

gcc 在这里是错误的,这显然是两种不同的类型。

并确认 - 此错误已在 gcc 8.0.1 中修复

示例代码