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

如果是bug:
  • 有谁知道它是否已在更高版本的 VC++ 中修复?
  • 除了显式调用 Foo<3, float> 之外还有其他解决方法吗?

  • 如果不是bug:

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

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

    最佳答案

    T x[D] 类型的参数等效于 T x[] 又名 T* xD 不能从中推导出来。使它成为 void Foo(T (&x)[D]) - 您以这种方式传递对数组的引用。

    关于c++ - 数组类型的模板参数推导,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21686207/

    10-11 23:10
    查看更多