Я где-то читал, что лямбда-функция должна переходить в указатель на функцию, если список захвата пуст.Единственная ссылка, которую я могу найти сейчас, это n3052 .С g ++ (4.5 и 4.6) он работает как положено, если лямбда не объявлена в коде шаблона.
Например, компилируется следующий код:
void foo() {
void (*f)(void) = []{};
}
Но он больше не компилируетсяпри шаблонизации (если foo
фактически вызывается в другом месте):
template<class T>
void foo() {
void (*f)(void) = []{};
}
В приведенной выше ссылке я не вижу объяснения этому поведению.Является ли это временным ограничением g ++, и если нет, то есть (техническая) причина, по которой это не разрешается?