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