0
我想在类模板中为enum
模板重载operator |
。在类模板的成员枚举上重载运算符
这里是一个小例子:
#include <iostream>
using namespace std;
template <class T>
struct test1 {
enum test2 {
test3, test4
};
};
template <class T>
typename test1<T>::test2 operator | (typename test1<T>::test2 f1, typename test1<T>::test2 f2) {
return static_cast<typename test1<T>::test2>(
static_cast<unsigned>(f1) | static_cast<unsigned>(f2)
);
}
int main() {
test1<int>::test2 flags = test1<int>::test3 | test1<int>::test4; // error here
}
编译器示出了在这个代码以下诊断:
In function 'int main()':
error: invalid conversion from 'int' to 'test1<int>::test2' [-fpermissive]
test1<int>::test2 flags = test1<int>::test3 | test1<int>::test4;
我还试图编译该代码与LLVM 6.1.0。
这段代码有什么问题?