数组类型的模板参数推导

时间:2014-02-10 19:31:03

标签: c++ templates visual-c++

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的错误吗?

如果是错误:

  1. 是否有人知道它是否已在更高版本的VC ++中修复?
  2. 除了明确调用Foo<3, float>
  3. 之外,还有解决方法吗?

    如果不是错误:

    gcc和clang是否有扩展,允许他们解析模板参数?

    我已经将实际代码大大简化为这个小例子。我已经在其他编译器上尝试过,但我目前无法访问更新的Microsoft编译器。我在SO上发现了类似的问题,但没有一个专门解决这个问题。

1 个答案:

答案 0 :(得分:6)

T x[D]类型的参数相当于T x[]又名T* xD无法从中推断出来。设为void Foo(T (&x)[D]) - 您正以这种方式传递对数组的引用。