Почему неявное «преобразование лямбда-функции в указатель на функцию» запрещает захват «по ссылке» статических членов?

Стандарт 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
    }
};

Почему не всегда возможно преобразовать лямбду в указатель на функцию, если первый не имеет состояния? Я что-то упустил или комитет забыл об этом конкретном моменте?

6
задан Frédéric Terrazzoni 17 July 2012 в 23:39
поделиться