自动模板参数:g++ 7.3 vs clang++ 6.0:哪个编译器是正确的?

10

这个代码示例会有两个编译器生成不同的结果。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

clang-6.0 输出:

-10 4294967286


4
这是gcc bug 79092 - Barry
1个回答

7

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

并且确认一下 - 这个bug在gcc 8.0.1中已经修复了。

样例代码


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