相关疑难解决方法(0)

lambda会在模板化代码中衰减到函数指针吗?

我在某处读到,如果捕获列表为空,则lambda函数应衰减为函数指针.我现在唯一能找到的参考是n3052.使用g ++(4.5和4.6)它可以按预期工作,除非lambda在模板代码中声明.

例如,以下代码编译:

void foo() {
    void (*f)(void) = []{};
}
Run Code Online (Sandbox Code Playgroud)

但它在模板化时不再编译(如果foo在其他地方实际调用):

template<class T>
void foo() {
    void (*f)(void) = []{};
}
Run Code Online (Sandbox Code Playgroud)

在上面的参考中,我没有看到这种行为的解释.这是g ++的临时限制,如果没有,是否有(技术)理由不允许这样做?

c++ lambda templates function-pointers c++11

9
推荐指数
1
解决办法
949
查看次数

标签 统计

c++ ×1

c++11 ×1

function-pointers ×1

lambda ×1

templates ×1