Вы можете сделать вышеперечисленное только с лямбдами без захвата.
См. [expr.prim.lambda.closure] (с. 7)
Тип замыкания для неуниверсального лямбда-выражения с без лямбда-захвата , чьи ограничения (если есть) удовлетворены, имеет функцию преобразования вуказатель на функцию с языковой связкой C ++, имеющей тот же параметр и типы возврата, что и оператор вызова функции типа замыкания.
Поскольку лямбда-выражения - это не просто обычные функции и их захватнеобходимо сохранить состояние , вы не можете найти ни одного простого или обычного решения, чтобы заставить их назначать указатели на функции.
Для исправления можно использовать std::function
, который сделает это по типу стирания:
#include <functional> // std::function
int test;
std::function<float(int)> f = [&](int i) -> float {return static_cast<float>(test); };