Здравствуйте, c-smile, Вы писали:
CS>void f(std::function<void(T)> g)
CS> auto func1 = [](int x) { std::cout << x << std::endl; };
CS> f(func1);
такой код не будет работать ни в каком c++
даже без второго определения f, поскольку лямбда и std::function — разные типы, и автоматом привести к нужному типу
сквозь темплейт не получится. во всяком случае в vc2013/gcc49
вот так работает:
void f(std::function<void(int)> g)
f(func1);
может, можно соорудить конвертор? типа такого:
template <typename T>
std::function<T> cvt(T &x) {return x;}
auto func1 = cvt([](int x) { std::cout << x << std::endl; });