自动模板参数:g++ 7.3 vs clang++ 6.0:哪个编译器是正确的?
auto template parameters: g++ 7.3 vs clang++ 6.0 : Which compiler is correct?
两个编译器对此代码示例产生不同的结果。
Clang 生成两种不同的类型。 G++ 对 fu
和 fi
使用相同的类型。
哪个符合标准?
#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
gcc 在这里是错误的,这显然是两种不同的类型。
并确认 - 此错误已在 gcc 8.0.1 中修复
两个编译器对此代码示例产生不同的结果。
Clang 生成两种不同的类型。 G++ 对 fu
和 fi
使用相同的类型。
哪个符合标准?
#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
gcc 在这里是错误的,这显然是两种不同的类型。
并确认 - 此错误已在 gcc 8.0.1 中修复