Microsoft VC ++ 2010在此代码中出错:
template <int D, typename T>
void Foo(T x[D]) {
// details omitted
}
int main() {
float x[3];
Foo(x); // C2784: could not deduce template argument for 'T [D]' from 'float [3]'
return 0;
}
相同的代码通过了gcc和clang。
这是VC ++ 2010的错误吗?
如果是错误:
Foo<3, float>
?如果不是错误:
gcc和clang是否有扩展,允许他们解析模板参数?
我已经将实际代码大大简化为这个小例子。我已经在其他编译器上尝试过,但我目前无法访问更新的Microsoft编译器。我在SO上发现了类似的问题,但没有一个专门解决这个问题。
答案 0 :(得分:6)
T x[D]
类型的参数相当于T x[]
又名T* x
。 D
无法从中推断出来。设为void Foo(T (&x)[D])
- 您正以这种方式传递对数组的引用。