I created a templated function of which I am trying to automatically deduce the template argument. MCVE(compile it):
template<class Value, class Allocator> void foo(const std::vector<Value, Allocator>& v, const std::function<void(const Value&)>& f) { } int main() { vector<int> v; foo<int>(v, [](const int&){}); //okay //foo(v, [](const int&){}); //not okay return 0; } I first thought the Allocator could not be deduced but that does not seem to solve it. My next guess is it has something to do with the lambda to std::function but no idea on further steps there. Anybody got any clues about what I need to do to make this deducible?
Ps: I know "const int&" could become "int" but in the real code there is a non scalar data type there.
std::functionand havetemplate<class Value, class Allocator, typename Func> void foo(const std::vector<Value, Allocator>& v, Func&& f) { }std::vectormight have more than 2 template arguments and your code fails to take that into account.