包含通过引用捕获的 lambda 函数的 "variable" 的类型是什么?

What is the type of a "variable" containing a lambda function that captures by reference?

我正在对 lambda 函数进行快速试验,但我无法弄清楚如何在下面声明 testFunc 变量。

一般来说,一个函数指针可以这样定义:

int (*someFunc)(int, int) = otherFunction;

在没有任何闭包的情况下对 lambda 函数执行此操作时,它工作正常:

int (*someFunc)(int) = [](int a) -> int { return 0; };

但是,我在尝试通过引用捕获时遇到编译器错误:

void (*testFunc)() = [&]() -> void { /* code here */ };

如果我将 testfunc 声明为 auto,它会起作用,但我很好奇上面的代码有什么问题?

很简单:

所有 lambda 都有独特的匿名类型。 (这就是 auto 起作用的原因)

没有捕获的 Lambda 可以转换为函数指针,但捕获的 lambda 不能。