我有一个关于当有两个匹配时 C++ 模板推导的问题:一个是类型匹配,另一个是非类型匹配。在以下情况下:
// First
template<int>
void g(int a)
{
...
}
// Second
template<class A>
void g(A a)
{
...
}
int a = 1;
g(a);
Run Code Online (Sandbox Code Playgroud)
第二个模板受到青睐,而如果非类型化模板参数被赋予默认值:
// First
template<int m = 1>
void g(int a)
{
...
}
// Second
template<class A>
void g(A a)
{
...
}
int a = 1;
g(a);
Run Code Online (Sandbox Code Playgroud)
第一个模板受到青睐。为什么??这里有哪些规则在起作用?谢谢。