微軟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和鐺鼓起。
這是VC++ 2010的錯誤嗎?
如果它是一個錯誤:
- 有誰知道,如果它被固定在VC++的更高版本?
- 除了明確調用
Foo<3, float>
之外,還有一種解決方法嗎?
如果它是不是一個錯誤:
有一個擴展,GCC和鐺,使他們能夠解決模板參數?
我已經大大簡化了實際的代碼到這個小例子。我已經在其他編譯器上嘗試過了,但我目前無法訪問較新的Microsoft編譯器。我在SO上發現了類似的問題,但沒有一個具體解決這個問題。
'Visual Studio 2013'和'Visual C++ Compiler Nov 2013 CTP'我得到同樣的錯誤。 – bolov
不能與鏗鏘爲我編譯:http://coliru.stacked-crooked.com/a/918ee9e151031a46 - 也不gcc:http://coliru.stacked-crooked.com/a/0399a5aff6ce0f83 –
啊,對不起gcc和clang紅鯡魚。他們接受更爲複雜的Foo版本,顯然是因爲他們能夠從第二個參數中推導出參數。但MS VC++不接受更復雜的版本。因爲複雜的版本太長而無法發佈,所以我簡化了這個,但實際上並沒有測試我最後一次對gcc和clang的迭代。 –