如何将转换应用于条件运算符中的位字段类型?

问题描述

以下代码在使用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 (将#修改为@)