Я считаю, что это не имеет ничего общего с шаблонами.Свободная функция, перегруженная таким образом, выдает ту же самую неоднозначную ошибку.
проверьте этот простой пример кода. Это похоже на то, что вы делаете в своем примере шаблона:
void doSomething(int i, int j, int k );
void doSomething(int i, int j, int k = 10);
void doSomething(int i, int j, int k)
{
}
void doSomething(int i, int j)
{
}
int main()
{
doSomething(10,20);
return 0;
}
Ошибкаis:
prog.cpp:18: error: call of overloaded ‘doSomething(int, int)’ is ambiguous
prog.cpp:5: note: candidates are: void doSomething(int, int, int)
prog.cpp:10: note: void doSomething(int, int)
Очевидно, что вы не можете перегрузить функции таким способом только на основе аргументов по умолчанию.