我注意到,如果我写:
template<typename T = int> void Test(T t) {};
则以下代码不编译:
auto x = Test;
然而,该代码确实如此,并将x推导为void(*x((int t(:
auto x = Test<int>;
我只是想知道,为什么在第一种情况下,它不假设类型参数是int,并将其与第二种情况相同?
如果您有一个带有默认参数的函数,例如:
int f(int n=0);
使用默认参数调用此函数是通过以下操作完成的:
int g=f();
而不是这个:
int g=f;
同样的原理适用于模板实例化:
auto x = Test<>;