我想知道是否有可能进行编译时检查来验证两个不同位域中的成员是否处于同一位置。确切位置无关紧要。
struct A {
uint8_t x : 1;
};
struct B {
uint8_t y : 1;
};
static_assert(position_check<A, B>::value); // ?
这有可能吗?
或者,检查位域的成员是否占据了已知的位位置。
这是一个可行的解决方案,它依赖于以下事实:从0xFF
到位字段的隐式转换将在适当的位置设置一个位:
struct A {
uint8_t x : 1;
};
struct B {
uint8_t y : 1;
};
constexpr A a = { 0xFF };
constexpr B b = { 0xFF };
static_assert((uint8_t(a.x) ^ uint8_t(b.y)) == 0);
让我知道您是否认为它会起作用。