Использование типа шаблона в параметрах функции, передаваемой в качестве аргумента (либо в виде std :: function, либо в качестве указателя на функцию), делает компилятор неспособным определить тип, когда функция передается как лямбда (см. Код ниже) , Интересно, что это работает, если функция не является лямбда.
Есть ли способ добиться этого? Я пробовал следующий код с Visual Studio 2017 и G CC 7.4, и оба не удаются, поэтому вряд ли это будет ошибка компилятора и, вероятно, есть причина для такого поведения.
#include <iostream>
#include <functional>
template <typename T>
void collide(void (*callback)(T)) // or std::function<void(T)> callback
{
callback(42);
}
int main() {
// doesn't compile: "could not deduce template arguments"
collide([](int a) {
std::cout << a << std::endl;
});
}