我可以使用GCC 4.9编译此代码
struct Space2 {
static const int Size = 2;
};
struct Space3 {
static const int Size = 3;
};
template <typename Space>
struct A {
void f(int a[Space::Size]); //error C2244
};
template <typename Space>
void A<Space>::f(int a[Space::Size]) {
}
int main() {
typedef Space2 Space;
int a[Space::Size];
A<Space> m;
m.f(a);
return 0;
}
但我对VC2010编译器有错误:
error C2244: 'A<Space>::f': unable to match function definition to an existing declaration
main.cpp(11): see declaration of 'A<Space>::f' definition
'void A<Space>::f(int [Space::Size])'
existing declarations
'void A<Space>::f(int [Space::Size])'
为什么?
P.S。当我将f
的定义放入A
时,此代码使用GCC4.9和VC2010编译得很好。