在为此挣扎了一段时间之后,我看到了下面发生的事情,但我仍然不清楚为什么。当我编译代码时,我收到指示的错误消息(仅)。请注意,它上面的一行是完全相同的类型转换,并且工作正常。此外,一旦我命名枚举(结构 B),一切正常,如果不涉及模板(test1 和 test3),一切正常。
这是编译器错误(我使用的是 VS 2010)吗?或者有人可以指出规范中说明这一点的部分吗?
struct A {
enum {
VALUE1
};
enum {
VALUE2
};
};
struct B {
enum Enum1 {
VALUE1
};
enum Enum2 {
VALUE2
};
};
void foo(int x) {
}
template <typename T>
void bar(T x) {
}
void test1() {
foo(A::VALUE1);
foo(A::VALUE2);
}
void test2() {
bar(A::VALUE1);
bar(A::VALUE2); // error C2664: 'bar' : cannot convert parameter 1 from '' to ''
// Conversion to enumeration type requires an explicit cast (static_cast, C-style cast or function-style cast)
}
void test3() {
foo(B::VALUE1);
foo(B::VALUE2);
}
void test4() {
bar(B::VALUE1);
bar(B::VALUE2);
}