如何在编译时确定位顺序分配?

时间:2012-12-19 18:14:46

标签: c++

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

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

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

0 个答案:

没有答案