我很驚訝,下面的代碼產生了could not deduce template argument for T
錯誤:編譯器爲什麼不能從默認參數中推導出模板類型?
struct foo
{
template <typename T>
void bar(int a, T b = 0.0f)
{
}
};
int main()
{
foo a;
a.bar(5);
return 0;
}
調用a.bar<float>(5)
修復該問題。爲什麼編譯器不能從默認參數中推導出類型?
A template type-parameter cannot be deduced from the type of a function default argument.
在C++ 11:
雖然說「因爲標準如此」是一個有效的答案,所以很高興知道其背後的原因。 – 2012-03-09 04:39:16
除了其他原因,函數的不同聲明可以聲明不同的默認參數(我相當肯定這同樣適用於函數模板。) – 2012-03-09 04:42:25
@James:不,不允許聲明不同的默認參數。甚至不允許多個聲明將相同的默認值賦予相同的參數。 8.3.6說:「一個默認的參數不能被後面的聲明重新定義(甚至不會被重新定義)。」當然,這隻適用於非模板功能。對於模板函數,它看起來像默認參數只能在初始聲明中提供。 – 2013-09-03 05:03:33