ビット単位の操作を処理するための内部 bitOr および bitAnd 関数があります。通常は問題なく動作し、g++ 4.7 および VC++ 2012 でテストされていますが、g++ 4.4.6 では c++0x std で失敗します。
template <typename T, typename Flag_T>
inline Flag_T bitOr(T e, Flag_T flag) {
return static_cast<Flag_T>(e) | flag;
}
これを使用するには、私は
unsigned short flag = 0x0;
flag = bitOr<MyEnum, unsigned short>(MyEnum::Val1, flag);
そして、内部 g++ エラーが発生します。列挙型でビット単位の操作を行う他の回避策はありますか?
In file included from main.cc:1:
enum-test.h: In function ‘Flag_T bitOr(T, Flag_T) [with T = FormatFlags, Flag_T = short unsigned int]’:
enum-test.h:1590: instantiated from here
enum-test.h:603: internal compiler error: Segmentation fault
Please submit a full bug report,
with preprocessed source if appropriate.
See <http://bugzilla.redhat.com/bugzilla> for instructions.
Preprocessed source stored into /tmp/ccKUWf68.out file, please attach this to your bugreport.
これはコンパイラの問題であることは理解していますが、g++ 4.4.6 (SL RHEL) の列挙型でビット単位の操作を行う回避策がある場合、これは他のコンパイラでも機能するため、すばらしいでしょう。これは私なりのやり方です