Да, я проигнорировал тег ... спасибо за подсказку, я исправлю это.
отрим этот код:
#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 »», и я скорее подозреваю, что это не разрешено.
Можно ли вывести аргумент шаблона из параметра по умолчанию? Если нет, то почему?