问题描述
以下代码在使用Clang为x86_64编译时和在int
使用GCC编译时显示unsigned int
。
我不确定哪个(如果有)正确。
#include <stdio.h>
struct s {
unsigned int x : 1;
};
template<typename T>
void f(T) {}
template<> void f<int>(int) {
printf("int\n");
}
template<> void f<unsigned int>(unsigned int) {
printf("unsigned int\n");
}
struct s r;
int main()
{
f(0 ? r.x : 0);
}
如果我们将条件替换为(r.x + 0)
,则两个编译器都说类型是带符号的。
C ++标准部分expr.cond具有许多转换规则,但是似乎没有一种情况涉及不同类型的glvalue和prvalue之间的转换问题。
是否将实现无符号位提升为有符号整数?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)