2

众所周知,对于某些编译器:

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' 成员

我想知道有没有办法在编译时确定这一点......

4

0 回答 0