Это auto
+ decltype
:
auto l = [](int i) -> bool { printf("%d",i); return true; };
foo<decltype(l)> fi(l);
fi.fum();
Каждый лямбда имеет свой уникальный, безымянный тип.Вы, как кодер, просто не можете назвать его.
Однако, в вашем случае, поскольку лямбда ничего не захватывает (пусто []
), она неявно конвертируетсяуказатель на функцию, так что это будет делать:
foo<bool(*)(int)> fi([](int i) -> bool { printf("%d",i); return true; });
fi.fum();