template <typename T> void function(T arg1,
T min = std::numeric_limits<T>::min(),
T max = std::numeric_limits<T>::max())
{
}
template <> void function<int>(int arg1, int min,int max)
{
}
int main(int argc,char* argv[])
{
function<int>(1);
}
它在語法錯誤C2689和C2059上的函數默認參數行::
令牌。 但沒有專業化,它做得很好。如果我更改默認參數 和還在做專業化:模板函數專門化默認參數
template <typename T> void function(T arg1,
T min = T(0),
T max = T(1))
{
}
template <> void function<int>(int arg1, int min,int max)
{
}
沒了的問題。
現在如果我這樣使用它:function<int>(1,2,3);
或function<float>(1.0f)
它很好,所以看起來如果模板函數是專用的,我們必須在調用它時重寫默認參數?
但在我的第二種情況下,我將其替換爲std::numeric_limits<T>::..
和T(..)
在調用function<int>(1)
時沒有語法錯誤,爲什麼?
(我'使用Visual Studio 2010 x64)的
因爲原來的問題是由於錯誤的,現在的問題變爲如何解決辦法呢?
如何向Microsoft報告此錯誤? – uray 2010-08-04 03:31:21
@uray:您可以通過我列出的錯誤報告鏈接在connect.microsoft.com上提交它;您必須登錄並打開新的缺陷。如果你不想,我會盡量減少這個問題,以及我之前報告給一個普通樣本的問題,並重新提交問題。讓我知道;我很樂意提供幫助。 – 2010-08-04 03:33:27
我現在報告錯誤。 – uray 2010-08-04 03:35:44