Да, я проигнорировал тег ... спасибо за подсказку, я исправлю это.

отрим этот код:

#include <functional>

template <typename T,typename COMP>
bool foo(T a,T b,COMP c = std::less<T>()) { 
    return c(a,b); 
}

bool bar(int a, int b){ return a<b;}

int main(){
    foo(1,2,bar);               // OK
    foo(1,2,std::less<int>());  // OK
    foo(1,2);                   // error
}

Первые два вызова в порядке, но, по-видимому, запрещено разрешать компилятору выводить типCOMP из параметра по умолчанию:

<source>:14:5: error: no matching function for call to 'foo'    
    foo(1,2);    
    ^~~    
<source>:4:6: note: candidate template ignored: couldn't infer template argument 'COMP'    
bool foo(T a,T b,COMP c = std::less<T>()) {    
     ^   
1 error generated.    
Compiler returned: 1

Я что-то пропустил? Я не очень понимаю, почему компилятор «не может вывести аргумент шаблона« COMP »», и я скорее подозреваю, что это не разрешено.

Можно ли вывести аргумент шаблона из параметра по умолчанию? Если нет, то почему?

Ответы на вопрос(2)

Ваш ответ на вопрос