在提供的示例中,foo无法推断T的类型 - 函数指针和lambda(注释掉),提供的类型或foo2一切正常。 什么阻止foo推断T型?有没有办法让它自动完成?
template<typename T>
void foo(std::function<T(const T&)> op) {
std::cout << op(6) << std::endl;
}
void foo2(std::function<int(const int&)> op) {
std::cout << op(6) << std::endl;
}
int bar(const int &x) {return 3 * x;}
int main() {
// foo(bar);
// foo([](const int &x) {return 3 * x;});
foo<int>(bar);
foo<int>([](const int &x) {return 3 * x;});
foo2(bar);
foo2([](const int &x) {return 3 * x;});
return 0;
}