众所周知,对于某些编译器:
struct T{
char bits: 4; // 3:0
};
对于其他人:
struct T{
char bits: 4; // 7:4
};
因为这不是标准中规定的。(我觉得这个(算术意义)应该是标准规定的,实际的物理分配是另一个不能规定的问题。)
但是,我希望我的代码更通用,所以我尝试了:
union helper{
unsigned char b:1;
unsigned char c;
constexpr helper(unsigned char i): c(i){}
};
constexpr int lsb_defined_at_top(){ return helper(1).b;}
enum{
LSB_AT_DEFINED_AT_TOP = lsb_defined_at_top()
};
但编译器(gcc 4.7.2)抱怨:
错误:访问 'helper::b' 成员而不是常量表达式中初始化的 'helper::c' 成员
我想知道有没有办法在编译时确定这一点......