Стандарт C++11 говорит (или, по крайней мере, моя версия -не окончательная):
The closure type for a lambda-expression with no lambda-capture has a public non-virtual non-explicit const conversion function to pointer to function having the same parameter and return types as the closure type’s function call operator.
Я понимаю, почему невозможно получить указатель функции из лямбды с отслеживанием состояния, поскольку указатель функции не может содержать какие-либо данные сам по себе.
Но когда захваченные объекты являются просто статическими членами/статическими переменными, такого ограничения нет, поскольку ссылки на захваченные объекты могут быть жестко связаны с самой функцией.
struct A {
static int count = 0;
void foo() {
static int bar = 0;
auto fun = [&]()->void {
count++;
bar++;
};
void(*ptrFun)();
ptrFun = fun; // forbidden by the quoted wording
}
};
Почему не всегда возможно преобразовать лямбду в указатель на функцию, если первый не имеет состояния? Я что-то упустил или комитет забыл об этом конкретном моменте?