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::c' メンバーの代わりに 'helper::b' メンバーにアクセスしています

コンパイル時にこれを判断する方法はあるのだろうか...

4

0 に答える 0