我有内部 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) 的枚举进行按位运算,这将是很好的,因为这适用于其他编译器。这是我自己的做法