假设我有以下内容struct
:
struct A
{
unsigned int a : 1;
unsigned int b : 1;
};
我感兴趣的是表达的类型a + b
。虽然从技术上讲,位域的“类型”的大小小于int
可能应该发生整体提升,然后结果int
就像它恰好在 gcc 和 clang 中一样。
但是由于不可能提取位域本身的确切类型并且它总是被推断为它的“大”类型(即unsigned int
在这种情况下),所以应该进行整体提升是否正确?因为我们实际上不能谈论位域的确切类型和它们的大小,除非它们被推断为unsigned int
在这种情况下不应该发生积分提升。
(我的问题再次源于 MSVC 碰巧认为这unsigned int
是这种表达的类型)