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

时间:2018-02-03 06:38:46

标签: c++ g++ clang++ c++17

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

1 个答案:

答案 0 :(得分:7)

gcc is wrong here, these are clearly two distinct types.

And to confirm - this bug is fixed in gcc 8.0.1

Sample code